Квест: Перепрошить Pastild(у) (или прогулка по граблям)

от автора

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

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

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

Комментарий

1

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

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

2

ST-LINK/V2 ISOL

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

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 версия

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

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

У устройства особый конструктив. Из-за этого мне пришлось купить на радиорынке на окраине города в (20км от сити центра) вилку с экзотическим шагом 1,27мм! Припаять такую вилку у себя дома в спальне подручными материалами, сами понимаете, просто нереально. Поэтому я отправился в ближайший торговый центр, нашел там мастера по ремонту мобильных телефонов и попросил его припаять вилку на 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

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

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

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

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

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

Надо указать путь к серии утилит ST-Link в переменную Path

Открывает 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).

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

Вывод

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

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

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
У вас есть Pastilda?
12.5% да 1
87.5% нет 7
Проголосовали 8 пользователей. Воздержались 2 пользователя.

ссылка на оригинал статьи https://habr.com/ru/post/698964/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *