Перейти к содержанию
    

MSP430FR5969 не работает по BSL

Всем здравствовать.

Только что разобрался с подсчётом CRC-CCITT16 для формирования пакетов связи с МК MSP430FR5969. Однако, вылезла проблема совсем иного свойства. После входа в режим BSL при помощи ног TEST и RST#, посылаю посылку TX BSL Version: 0x80 0x01 0x00 0x19 0xE8 0x62. Должен прийти ответ: 0x00 0x80 0x05 0x00 0x3A 0x00 0x07 0x34 0xB2 0x14 0x90. Но вместо ожидаемой строки в терминале вижу символы TQ, что означает: Т (0х54=01010100) - Packet size exceeds buffer. The packet size given is too big for the RX buffer;  Q (0х51=01010001) - Header incorrect. The packet did not begin with the required value of 0x80.

Инициализацию BSL и передачу пакета осуществляю из МК скорость UART 9600, приём в терминал. Пробовал использовать для передачи/приёма Advanced Serial Port Terminal (он умеет слать шестнадцатиричные значения) - результат тот же.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Разобрался. Дело было в формате посылки UART, нужно было выставить parity "even", а у меня было настроено без контроля чётности. Так что сам балбес)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

BSL не сдаётся))) Пытаюсь отправить две посылки с двумя блоками данных, в каждой посылке свой стартовый адрес. Первую посылку (длинную) BSL принимает и в ответ пишет 0х00 - успешное завершение операции. В ответ на вторую посылку (короткую- всего 2 байта данных) BSL отвечает 0х52 - неверный CRC и четыре штуки 0х51 - неверный заголовок/заголовок не 0х80. И то, и другое проверил и перепроверил, но вот не принимается этот пакет и всё!

Сам пакет: 0x80,   0x02, 0x00, 0x10,    0xFE, 0xFF, 0x00,    0x00, 0x44,    0x89, 0xA7

Эта строка из файла .ti-txt: @FFFE - начальный адрес  для записи блока данных
                                               00 44 - блок данных

То же из файла hex: :02 FFFE 00 0044 BD

Ещё хочу уточнить - нужно ли посылать символ q - окончания файла?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проверьте что у Вас действительно 9600, без всяких плюс-минусов. Есть уникумы, игнорирующие кварцевые резонаторы.

Проверяется осциллографом, по длительности одного бита в посылке. Если есть возможность (для BSL) - уменьшите скорость до 1200-2400.

4 часа назад, MPetrovich сказал:

. . .  В ответ на вторую посылку (короткую- всего 2 байта данных) BSL отвечает 0х52 - неверный CRC и четыре штуки 0х51 - неверный заголовок/заголовок не 0х80. И то, и другое проверил и перепроверил, но вот не принимается этот пакет и всё! . . . 

Увеличьте (а может быть - уменьшите) таймаут между ответом и новым запросом. Курите док на BSL по протоколу, а именно - обеспечению таймаутов в обмене. 

По симптому похоже что в буфере приема BSL лежит что-то лишнее. Снифером контролируйте, что отсылается в сторону BSL, "в здравом уме и тверодой/трезвой памяти".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, k155la3 said:

контролируйте, что отсылается в сторону BSL, "в здравом уме и тверодой/трезвой памяти".

Это был дельный совет) На логическом анализаторе сразу увидел ошибку в посылке - неправильное количество байт(это два байта после заголовка 0х80). У меня в посылке: 0х02 0х00, а нужно: 0х06 0х00... Однако, неожиданная реакция на неверную длину посылки.

Между посылками я установил паузы в 500мСек, для приёма ответа.

Теперь обе посылки BSL сожрал и на обе ответил 0х00 - т.е. Operation successful. 

Однако, после сброса контроллер не работает :-(  

Прога взята самая примитивная из примеров IAR - мигание светодиодом. Вот код:

#include "io430.h"

int main( void )
{
  WDTCTL = WDTPW | WDTHOLD;        // Stop watchdog timer
  PMMCTL0 = PMMPW;                // Open PMM Module
  PM5CTL0 &= ~LOCKLPM5;            // Clear locked IO Pins
  P1DIR |= 0x01;                        // Set P1.0 to output direction

  for (;;)
  {
    volatile unsigned int i;            // volatile to prevent optimization

    P1OUT ^= 0x01;                      // Toggle P1.0 using exclusive-OR

    i = 10000;                          // SW Delay
    do i--;
    while (i != 0);
  }
}


Фаилы .hex и .ti-txt прикладываю.

blink.hex blink.txt

Дурацкий вопрос вдогонку: данные надо передавать в том порядке, как они в файле выстроены слева направо или задом наперёд - справа налево?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Программа Ваша, мигалка, работает правильно, мигает. Компилируется и грузится на MSP430F5529, таймаут переключения светодиода примерно 0.3 с, хорошо видно.

Данные передаются, также, как мы пишем, буква написанная раньше(левее) так-же и передается, "по мере написания", слева направо.

@4400
31 40 00 24 B0 13 0C 44 B0 13 3A 44 F1 03 B2 40
80 5A 5C 01 B2 40 00 A5 20 01 92 C3 30 01 D2 D3
04 02 D2 E3 02 02 B1 40 10 27 00 00 B1 53 00 00
первый байт 0x31 будет передан первым, и записан по адресу 0x4400

второй  байт 0x40 будет передан вторым, и записан по адресу 0x4401

итд

Что из оборудования Вы используете (какая плата/LaunchPad, есть ли програматор/отладчик или только BSL)

Возможно "не идет" по причине ошибок или неверно указанных данных в опциях проекта, в первую очередь - тип процессора.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 hours ago, k155la3 said:

Программа Ваша, мигалка, работает правильно, мигает. Компилируется и грузится на MSP430F5529, таймаут переключения светодиода примерно 0.3 с, хорошо видно.

Огромное Вам спасибо за эту проверку! Я, конечно, не особо сомневался, что пример от TI должен работать, но хотелось подтверждения "в железе"

 

10 hours ago, k155la3 said:

Что из оборудования Вы используете (какая плата/LaunchPad, есть ли програматор/отладчик или только BSL)

У меня в наличии только 6 шт. м/сх MSP430FR5969 в корпусе VQFN-48. Мне надо убедится в их работоспособности. Програматор/отладчик отсутствует и поэтому пытаюсь зашить программу по BSL. Для этого на мк ATMega128 написана простая прога, которая активирует BSL и шлет по UART пакеты. Сначала "Mass_Erase", потом два RX_Data_Block с начальными адресами: первый - 0х4400; второй - 0хFFFE. После передачи каждого пакета пауза 0,5Сек для приёма ответа BSL. Постом сброс посредством опускания RES# в ноль. На ноге Р1.0 должны быть импульсы, но их нет...

 

10 hours ago, k155la3 said:

Возможно "не идет" по причине ошибок или неверно указанных данных в опциях проекта, в первую очередь - тип процессора.

Да вроде бы всё так   image.thumb.png.5da7ee374dcc2ebc5f90a365fb5162d1.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ваш дамп-прошивка, которая на скриншоте выше, отличается от моей.

Перекомпилировал мигалку под FR5969, попробуйте залить это

@4400
31 40 00 24 B0 13 0C 44 B0 13 3A 44 F1 03 B2 40
80 5A 5C 01 B2 40 00 A5 20 01 92 C3 30 01 D2 D3
04 02 D2 E3 02 02 B1 40 10 27 00 00 B1 53 00 00
24 41 04 93 F6 27 FA 3F 03 43 80 00 42 44 FF 3F
03 43 80 00 3E 44 
@FFFE
00 44 
q

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, k155la3 said:

попробуйте залить это

Попробовал. Результат тот же - не мигает.

Кстати, а отчего отличие возникает? У Вас какой версии IAR? У меня 6.40.1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, MPetrovich said:

Сначала "Mass_Erase"

Забыл сказать, что этот пакет не работает в MSP430FR5xx и MSP430FR6xx. Вот что написано в документации: For MSP430FR5xx and MSP430FR6xx devices, this function does not erase information memory. The MSP430FR5xx and MSP430FR6xx bootloader do not send the BSL core response for the mass erase execution.

Заменил на другой пакет - RX_Password, он позволяет получить ответ от BSL и ответ содержит 0х00 - т.е. Operation successful. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

59 минут назад, MPetrovich сказал:

Попробовал. Результат тот же - не мигает.

Кстати, а отчего отличие возникает? У Вас какой версии IAR? У меня 6.40.1

IAR  6.40.1 (6.40.1.950)

Отличия могут возникнуть по многим причинам, в частности от включенного уровня оптимизации.

Возможно проблема не в прошивке/программе, а какая-нибудь элементарщина вроде помехи по питанию, занижено-завышено питание, цепь подключенная на ресет неверно отрабатывает (или отсутствует импульс сброса) итд итп, светодиод (пардон) включен в неверной полярности, в конце концов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 minutes ago, k155la3 said:

занижено-завышено питание

У этих МК довольно широкий диапазон по питанию: 1,8...3,6V.

 

12 minutes ago, k155la3 said:

цепь подключенная на ресет неверно отрабатывает (или отсутствует импульс сброса)

RST# подключен напрямую к ноге ATMega1218, сброс после передачи пакетов 500мСек, потом на RST# висит единица.

 

14 minutes ago, k155la3 said:

элементарщина вроде помехи по питанию

Это вряд ли. Тогда была бы "мерцающая" неисправность - то работает, то не работает. И BSL барахлил бы, а он чётко работает.

 

15 minutes ago, k155la3 said:

светодиод (пардон) включен в неверной полярности

Тоже нет. Включен правильно.

Кстати, из 6-ти м/сх есть одна, которая не работает по BSL - пишет в ответ, что посылка больше размера буфера. Остальные м/сх нормально воспринимают посылки, но после сброса молчат и не мигают светодиодом... 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 минут назад, MPetrovich сказал:

. . . Кстати, из 6-ти м/сх есть одна, которая не работает по BSL - пишет в ответ, что посылка больше размера буфера. Остальные м/сх нормально воспринимают посылки, но после сброса молчат и не мигают светодиодом... 

Ну, в допоплнение к полярности светодиода. Какой корпус контроллера, сколько выводов, что на нем написано (подробно), на какой пин контроллера подключен светодиод и как.

ps 

Проверьте также правильность формирования пакетов данных BSL и правильность распарсивания-передачи байтов прошивки (проще это сделать из формата .txt). 16-разрядные данные вроде передаются правильно (младший байт передается первым, старший - вторым), но как правильно для BSL - не знаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 minutes ago, k155la3 said:

Какой корпус контроллера, сколько выводов, что на нем написано (подробно), на какой пин контроллера подключен светодиод и как.

 

17 minutes ago, k155la3 said:

на какой пин контроллера подключен светодиод и как.

Светодиод подключен на ногу 1 - P1.0/TA0.1/DMAE0/RTCCLK/A0/C0/VREF-/VeREF-  через резистор 1к, катод на земле.

корпус.JPG

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...