Как стать автором
Обновить

Как Перепрошить Пастильду

Время на прочтение8 мин
Количество просмотров2.8K

В этом тексте представлена подробная инструкция того как перепрошить Пастильду с расчетом на самого обычного пользователя компьютера.

Пролог

Дело в том, что оригинальная базовая заводская прошивка очень сырая и не доработанная. Об этом свидетельствует отчет Beta-тестирования. Подробнее про дефектную ведомость оригинальной прошивки можно почитать тут https://habr.com/ru/articles/694970/. Очевидно, что оригинальной прошивкой пользоваться крайне неудобно. В связи с этим возникает нужда накатить другую прошивку, например, из этого источника https://habr.com/ru/articles/706470/

Что нужно сразу подготовить из оборудования?

Даже не спрашивайте почему так много. Всё по ходу прочитаете.

Оборудование

Комментарий

1

провода перемычки Гнездо-Вилка

Чтобы подключить провод Reset явно к тест паду на PCB

2

ST-LINK/V2 ISOL

Программатор

10

PowerBank

Чтобы запитать Пастильду на время прошивки

3

Pastilda r1.1

Целевое устройство

4

Кабель USB-А-USB(mini)

Кабель для подключения к LapTop

5

DMM

Для прозвонки пинов Пастильды

6

Персональный компьютер (Например LapTop)

Для запуска утилиты обновления прошивки

7

Линза с подсветкой или микроскоп

Чтобы обнаружить тестовые пады и дорожки на плате

8

Логический анализатор Seleae (Сало)

Как ни странно, но без него SWD Link крайне нестабильный

9

Шлейф-переходник с 2,54мм 20pin на 1,27мм 4pin

Для соединения пастильды и программатора

Что надо из софвера?

Программа

Назначение

OS Windows

Для запуска утилит производителя чипа ST

ST-LINK_CLI.exe

Утилита перепрошивки STM чипов от вендора. CLI версия

STM32 ST-Link Utility.exe

Утилита перепрошивки STM чипов от вендора. GUI версия

Вот блок схема устройства на основе MCU: STM32F415RGT6

Блок-схема Пастильды
Блок-схема Пастильды

Это список основных микроконтроллерный пинов PasTilda r1.1

Чтобы подключиться программатором к Пастильде надо осознать распиновку на печатной плате PCB. Есть 2 пути. Легкий посмотреть схемотехнику или трудный прозвонить плату DMM(ом).

Это компоновочная схема (слева) и схема топологии печатной платы (PCB) (справа) для Pas~ r1.1. Верхний и нижний слой.

Сверху верхний слой, снизу - нижний слой PCB Pas~r1.1
Сверху верхний слой, снизу - нижний слой PCB Pas~r1.1

Грабли №1 (экзотический разъём для программатора)

У устройства особый конструктив. Из-за этого мне пришлось купить на радиорынке на окраине города в (20км от сити центра) вилку с экзотическим шагом 2,00 мм! Припаять такую вилку у себя дома в спальне подручными материалами, сами понимаете, просто нереально. Вероятно тут поможет переходник PogoPins 2mm. Вот ссылка https://aliexpress.ru/item/1005004383550982.html?spm=a2g2w.orderdetail.0.0.268c4aa6QyXHlY&sku_id=12000028986468124

С такой прищепкой всё выглядит весьма прилично

Вот так надо правильно перепрошивать Пастильду
Вот так надо правильно перепрошивать Пастильду

Пока переходник Pogo Pin идет по почте я отправился в ближайший торговый центр, нашел там мастера по ремонту мобильных телефонов и попросил его припаять вилку на X4. Мастер под микроскопом каким-то специализированной паяльной станцией установил этот 4х пиновый разъём на X4.

Пастильда обладает 4х проводным высокоскоростным последовательным синхронным интерфейсом SWD (Serial Wire Debug) который выведен на улицу через заръём X4.

Wire Name

GPIO

MCU pin

functions

SWDIO

PA13

46

JTMS-SWDIO/ EVENTOUT

SWCLK

PA14

49

JTCK-SWCLK/ EVENTOUT

Чтобы запрограммировать Пастильду можно, как вариант, воспользоваться фирменным программатором ST-LINK/V2 ISOL. Вот так он выглядит. Это вполне исправный экземпляр. Он только, что прошивал пару других плат с STM32.

Программатор поддерживает не только SWD, но и JTAG. Поэтому пинов аж 20 штук. Однако понадобится только 4 пина:

Pin Number on (ST-LinkV2)

Name

Meaning

1

VAPP

Провод питания 3,3V

12 или 20

GND

Провод заземления

7

SWDIO

Провод данных

9

SWCLK

Провод тактового сигнала синхронизации

Эти пины просто найти на корпусе программатора

Пины программатора и комментарии к ним можно посмотреть тут.

Вот схема шлейфа SWD шины для программирования Parlild(ы) к 1.1
Вот схема шлейфа SWD шины для программирования Parlild(ы) к 1.1

Windows определяет программатор STM32 STLink в диспетчере устройств.

Перепрошивка Пастильды

Надо указать путь к серии утилит ST-Link в переменную Path
C:\Program Files (x86)\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility

Открывает GUI версию STM32 ST-Link Utility.exe

Грабли №2 (Нет Link(а) с микроконтроллером)

При попытке подключится к памяти микроконтроллера появляется ошибка. Пробовал режимы Normal, Hot Plug в настройках Settings. Частота SWD минимальная 5kHz. Программатор просто не видит Target. Такое же сообщение можно получить, если попробовать сделать connect вообще ничего не подключая к программатору. Дело плохо.

Грабли №3 (Нет пина RST на разьёме)

Однако разработчики устройства не вывели пин D3.7 (nRST) на разъём для программирования.

Это очень плохо. Однако на PCB есть test pad для пина nRST. Можно попробовать взять провод, одним концом подключить его к земле, а другим попробовать осторожно тыкнуть в пин 7. Также можно попробовать тыкнуться прямо в резистор R5 или конденсатор C6.

Даже если соединить проводом придерживая рукой nRST провод NRST пин программатора и инициировать Connect under Reset, то всё равно появляется сообщение. Can not connect to target!

Can not connect to target! If you're trying to connect to an STM32W1xx device, please select Normal or HotPlug mode from Target->Settings menu. If you're trying to connect to a low frequency application , please select a lower SWD Frequency mode from Target->Settings menu.

После многочисленных попыток я обнаружил, что в 1 случае из 15 удается подключиться к устройству в режиме HotPlug. Но надо делать так. Cначала включаю питание программатора, затем подаю питание на плату через USB и только после этого нажимаю connect в утилите. Только так изредка появляется SWD Link. Работать соблюдая такие ритуалы конечно же надоедает.

Грабли №4 Зашита On-Chip Nor Flash памяти

При попытке стереть прежнюю прошивку срабатывает защита от чтения.

Либо происходит какая-то Internal command error

Зайдем в меню зашиты прошивки. Видим, что установлен уровень 1. Это защита на чтение и стирание прошивки.

.
.

Грабли 5 Не получить доступ с Option byte STM32

С первой попытки не получилось сбросить защиту появляется сообщение об ошибке

Could not set Option bytes! Please reset the target and retry.

Вот скриншот. Эта ошибка сброса зашиты тоже появлялась раз 40.

Как же снять Read Out Protection на STM32?

Проблемы с SWD Link(ом) Были вызваны проводами. Придерживаю рукой самопальный SWD шлейф удалось случайно отменить защиту и стереть оригинальную прошивку.

Однако SWD Link все еще крайне нестабильный (1 из 15). Я уже отчаялся и решил в последний раз подключить логический анализатор Seleae к шине SWD и посмотреть на какой фазе пропадает SWD Link. И вдруг неожиданный образом появился стабильный SWD Link! Даже на максимальной битовой скорости в 4MHz. Причем сам логический анализатор можно даже не подключать к USB V3. и достаточно насадить щуп только на провод SWCLK и GND. Он просто своим присутствием каким-то магическим образом чинит SWD шину. Природа этого явления мне как обычному пользователю компьютера совершенно не ясна. Видимо шупы логического анализатора добавляют ёмкость на провода и это как-то увеличивает стабильность линка.

Во время стабильного SWD Link программатор ST-Link V2 мигает зелено-красным цветом. Это внушает оптимизм.

Я решил воспользовался случаем и не отключая от шины SWD анализатора записал прошивки первичного загрузчика, основного загрузчики и самого приложения в Target.

Мои артефакты для Пастильды
Мои артефакты для Пастильды

Ура! Удалось записать свои дикие бинари в чужую железку!

Вот лог загрузки

Hidden text

17:36:53 : Can not connect to target!
Please select "Connect Under Reset" mode from Target->Settings menu and try again.
If you're trying to connect to a low frequency application , please select a lower SWD Frequency mode from Target->Settings menu.
17:36:55 : No target connected
17:39:14 : ST-LINK SN : 37FF6F064D56343143480943
17:39:14 : V2J37S7
17:39:14 : Connected via SWD.
17:39:14 : SWD Frequency = 4,0 MHz.
17:39:14 : Connection mode : HotPlug.
17:39:14 : Device ID:0x413
17:39:14 : Device flash Size : 1MBytes
17:39:14 : Device family :STM32F405xx/F407xx/F415xx/F417xx
17:43:55 : [pastilda_r1_1_mbr.hex] opened successfully.
17:43:55 : [pastilda_r1_1_mbr.hex] checksum : 0x002172ED
17:44:05 : [pastilda_r1_1_bootloader.hex] opened successfully.
Address Ranges [0x080E0000 0x080E0188] [0x080E0190 0x080EDFF0]
17:44:05 : [pastilda_r1_1_bootloader.hex] checksum : 0x0054EFA9
17:44:08 : Memory programmed in 2s and 47ms.
17:44:08 : Verification...OK
17:44:08 : Programmed memory Checksum: 0x0054EFA9
17:44:09 : Flash memory [0x08000000:0x08100000] Checksum: 0x0F2CA192
17:44:27 : [pastilda_r1_1_generic.hex] opened successfully.
Address Ranges [0x0800C000 0x0800C188] [0x0800C190 0x0805C834]
17:44:27 : [pastilda_r1_1_generic.hex] checksum : 0x01EB01FA
17:44:37 : Memory programmed in 7s and 907ms.
17:44:38 : Flash memory [0x08000000:0x08100000] Checksum: 0x0C147FB8
17:46:36 : Disconnected from device.

Грабли №6 Прошивка не стартует при пере сбросе питания

Рано радоваться. В программировании MCU часто возникает такая ситуация: Прошивка загрузчика отлично работает под отладчиком, а после сброса питания вообще не стартует. Сегодня в очередной раз это случилось. На этот раз с Пастильдой. Оказывается надо сконфигурировать в коде на вход пин PA9 (VBus).

Вот теперь нелегальная прошивка прижилась. Стартует после пересброса питания.

Грабли №7 Не запускается первичный загрузчик после Reset(а) из приложения

И снова радо радоваться. Это же Embedded. Если поверх первичного загрузчика (который сам по себе стабильно стартует (если накатить его на пустой Flash)) накатить программатором вторичный загрузчик и затем само приложение, то после запуска приложения очередной пере сброс питания приводит к окирпичиванию устройства. На других платах с STM32 у меня это не проявляется.
При этом даже размыкание провода Vbus (D3.42 PA9) не изменило ситуацию.

размыкание провода Vbus (D3.42 PA9)
размыкание провода Vbus (D3.42 PA9)


Получилось одноразовое устройство. Прошивка отлично работает под отладчиком, но стоит только снять SWD шлейф и пере сбросить питание и получается Тыква.

Если проанализировать начало Flash памяти,

то можно увидеть, что в значении указателя на верхушку стековой памяти записалось значение 0x2001C000, что соответствует отступу 0x1C000 =114688=112kByte. Напомню, что в микроконтроллере STM32F415RGT6 192kByte SRAM.

Причем первые 128kByte идут непрерывным куском начиная с 0x20000000. И еще 64kByte лежат в стороне начиная с 0x10000000.

В качестве адреса первой процедуры ResetHandler указан адрес функции 0x08006c51. Этот адрес тоже попадает в диапазон валидных адресов NorFlash памяти (0x08000000...0x08100000). Идем в *.map файл, который содержит адреса функций

Начало Flash похоже на правду. Однако Пастильда не работает. Тут уж у меня просто остается одно решение. Отказаться от первичного загрузчика, отказаться от вторичного загрузчика и собрать одну монолитную Generic прошивку. По крайней мере так хоть есть воспроизводимость стартов программы после пере сброса патания.

Видимо всё-же MCU уже как-то повредился из-за того, что несколько часов проработал с бажной схемотехникой цепи VBus. Видимо микроконтроллер STM32F415RGT6 всё-таки надо перекидывать.

Эпилог

Как видите, чтобы просто и банально перепрошить микроконтроллер STM32 на конкретной новой плате программатором надо целая куча всего разного и много телодвижений по городу. На каждом шаге вы можете наступить на грабли и огрести жесть. Этот процесс перепрошивки может запросто растянуться на целый день. При этом в Embedded вы никогда не предвидите, что ждет вас за следующим кликом мышки или за следующим пере сбросом питания. Обязательно будете терять SWD Link c Target(ом), в микроконтроллере сработает защита на стирание, прошивка будет отказываться стартовать после ColdReset. Будут отрываться провода. Это основное отличие web от embedded.

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

Тем не менее теперь и вы можете частично пере прошивать Пастильду и учить этому других.

Links
1--Pastilda: Независимое Beta-Тестирование (16+) https://habr.com/ru/articles/694970/
2--ПасТильда: ещё одна прошивка https://habr.com/ru/articles/706470/

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
У вас есть Pastilda?
4% да1
96% нет24
Проголосовали 25 пользователей. Воздержались 2 пользователя.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы программировали микроконтроллеры STM32?
100% да1
0% нет0
Проголосовал 1 пользователь. Воздержавшихся нет.
Теги:
Хабы:
Всего голосов 6: ↑6 и ↓0+6
Комментарии19

Публикации

Истории

Ближайшие события