четверг, 15 мая 2025 г.

Вычитывание и прошивка ST10 на примере Raven CAN Accuboom control node

 Я давно работаю с STM32, программирую, дизассемблирую чужие прошивки, ну а прошить или считать содержимое такого микроконтроллера вообще не составляет труда. Но сегодня знакомый попросил помочь ему с вычитыванием и прошивкой микроконтроллера ST10. Это достаточно древний микроконтроллер, ранее мне не приходилось с ними работать. Но почитав документацию, предоставленную ST Microelectronics, я не увидел никаких препятствий, чтоб это сделать. 

В отличии от STM32, у которого есть SWD и JTAG, у ST10 нет специализированного интерфейса для прошивки и отладки, все операции производятся через последовательный интерфейс UART или CAN. Для работы с памятью, микроконтроллер нужно перевести в режим загрузки встроенного стандартного bootloader-а. Делается это подтягиванием вывода P0L.4 к земле.

Вскрыв блок, я обнаружил основной микроконтроллер ST10F276-CFG. А так-же драйвер шины RS232, в виде микросхемы MAX3232. Она подключена как раз к RxD0 и TxD0 микроконтроллера. Значит этот блок можно напрямую подключить к COM-порту компьютера, P0L.4 также выведен на внешний разъем через ограничивающий резистор.


Получается для прошивки этого блока его даже не нужно разбирать, все необходимые сигналы доступны с внешнего разъема. Вот распиновка того, что нужно: +12V питание, GND_BOOTLOADER замыкаем с GND для переключения на стандартный загрузчик. RX->TX, TX->RX к COM порту, и не забывает соединить землю COM-порта.



Для работы с этим микроконтроллером в режиме bootloader понадобится специальное приложение, ST10 Flasher tool. Вначале я установил последнюю версию ST10 Flasher 2.4b, она как-то заработала, но при считывании дампа в файл выдает ошибку "Description: LoadExternalFlashMonitor: target Not found", вероятно вызвано тем, что эта версия не правильно определяет модель микроконтроллера. Так что рекомендую использовать ST10 Flasher 2.3g. Эта программа написана ещё в далёком 2002-м году, задолго до появления современных ОС, но она вполне корректно работает на Windows 7 x32. Для этого её нужно установить в "C:/ST10Flash", и выбрать режим совместимости "Windows XP SP3".

ST10 Flasher tool 2.3g
При первом запуске нужно выбрать соответствующий COM-порт, по умолчанию выбран COM1, на скорости 9600. На такой скорости считывание и прошивка может длится десятки минут, но именно с этого режима стоит начинать, чтоб удостоверится, что всё подключено правильно, и микроконтроллер правильно определяется. В дальнейшем скорость можно будет поднят, если этого позволяет ваше соединение и частота осциллятора.

Если всё подключено и настроено правильно, после нажатия кнопки "Reload Monitor", программа должна показать модель микроконтроллера и частоту на которой он работает.

С помощью кнопки "BlankCheck" можно определить какие области памяти пусты, а в каких содержаться данные. При считывании (кнопка "Dump") отмечаем только те блоки, в которых есть данные, это сократит время вычитывания и последующей прошивки дампа.

Bank 8 в моем случае всегда определяется не пустым, даже после стирания памяти, возможно это ошибка в программе, а возможно уже поврежденная ячейка памяти, напишите, кто столкнулся с этой проблемой. 
Подтверждаем вычитывание кнопкой "Dump" и ждем пока завершится считывание. На скорости 9600bts это может занять более десяти минут. Теоретический предел: 832kB/9600bts = 832 * 1024 * 8 / 9600 = 710 s ~ 11 минут, но из-за задержек протокола и сервисных битов время может заметно больше.
С помощью кнопки "Set Port", в открывшемся окне установим скорость 57600, нажимаем "Initialize Port" и проверяем обмен кнопкой "Send Null char".

Для прошивки микроконтроллера открываем нужный файл в разделе "File to program". Сразу отображается объем данных, предположительное время и номера блоков. Если установлена галочка "Auto Erase", эти блоки будут автоматически стерты перед "прошивкой".
На скорости 57000bts понадобилась всего минута. Чтоб дополнительно удостоверится, что всё "прошилось" правильно можно воспользоваться кнопкой "Compare", выбрать нужные блоки и нажать "Verify" 

Желаю удачи!