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

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

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

Комментарий

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.

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

Комментарии (11)


  1. Shpakov
    15.11.2022 15:23
    +3

    Непонятно, что экзотического в шаге 1,27мм? Вроде стандарт...
    На прошлой работе в командировке видел, как такие вилки запаивали с помощью газовой турбо зажигалки.


    1. aabzel Автор
      15.11.2022 15:27

      Для разъёмов 1,27мм нет покупных перемычек на 2,54мм.
      Шлейф приходится делать самому из непонятно чего.


      1. sigprof
        15.11.2022 17:59
        +1

        На AliExpress всё есть :-)

        Другой вопрос, что ждать оттуда доставки замучаешься, а теперь я вообще не могу понять, каким образом можно ускорить эту самую доставку — раньше можно было при необходимости выбрать вместо непонятного метода по умолчанию AliExpress Standard Shipping, заплатив за него, а теперь в новом интерфейсе такой возможности нет вообще. Или вот для этого товара доступна доставка в пункт выдачи, и там среди прочего есть доставка в Пятёрочку — но почему-то для выбора доступны далеко не все их точки (насколько я понимаю, это происходит, если тип доставки AliExpress Saver Shipping, но переключиться на Standard, где можно выбрать нужную мне Пятёрочку, нет возможности). Не знаю, получится ли при таком способе заказать доставку в какую-нибудь Пятёрочку из доступных для выбора, а потом через приложение 5Post переадресовать доставку в другую (вроде бы такая услуга там есть).


  1. SuperTEHb
    15.11.2022 15:34
    +5

    То есть ровно точно так же, как и любой другой микроконтроллер STM32?


    1. aabzel Автор
      16.11.2022 16:30
      -1

      С STM32 на самом деле проще всего работать.

      Вот TI сложнее. Там, например, настройки кварца хранятся в Flash памяти.
      Прописал неправильный бинарный конфиг и прошивка не стартует при пере сбросе питания. При этом пошаговая отладка работает.

      STM32 это начальный базовый уровень для абсолютных beginner(ов). Для STM32 можно написать прошивку даже сидя в боксерских перчатках.


      Современные же сложные проекты делают на многоядерных микроконтроллерах с PowerPC внутри. Или на nRFx, TI.




      1. SuperTEHb
        17.11.2022 10:35

        AVR-ы передают привет. И по количеству телодвижений для микроконтроллерного «Привет, Мир!» (мигающий светодиод), и по количеству разнообразных доступных программаторов, и по корпусам, которые можно тупо в макетку воткнуть, и по разнообразию срез разработки, которые просто сразу берут и работают, не требуя вообще никакой настройки…
        Впрочем, речь не об том. Пастильда из статьи основана на STM32 и не имеет каких-то особенностей по сравнению с любым другим микроконтроллером STM32. Те же потенциальные проблемы, те же способы, те же программы. Акцент именно на пастильду не нужен.


  1. predator86
    15.11.2022 16:30
    +1

    SWDIO и SWCLK идут параллельно в шлейфе к ST-Link'у?


    1. aabzel Автор
      15.11.2022 17:19

      70% пути да. Затем еще 5см нет так как перемычки.


      1. predator86
        15.11.2022 18:03
        +1

        Им нельзя быть рядом, между ними должен быть провод с землёй, или хотя бы растащить их подальше друг от друга.


  1. sigprof
    15.11.2022 16:39
    +1

    С пином PA9 там печальная ситуация, описанная в блоге разработчика на Хабре — разработчик железа понадеялся на надпись “5V Tolerant” в даташите и подключил PA9 напрямую к VBUS, не прочитав полностью AN4879 и упомянутую там статью Management of VBUS sensing for USB device design (на самом деле там нужен был делитель напряжения, либо, поскольку встроенного источника питания в устройстве нет, можно было не подключать этот пин вообще, а вместо этого отключить определение наличия VBUS при настройке контроллера USB). Из-за этого даже использование встроенного загрузчика STM32F405 (который можно было бы активировать замыканием площадок BOOT0 и 3.3V, специально для этого выведенных на другой край платы, и не заниматься описанной вознёй с SWD) чревато выгоранием чипа (во вторичном загрузчике и оригинальной прошивке там поставлен костыль в виде настройки PA9 на вход, но во встроенном загрузчике этот пин используется как выход USART1_TX, и с этим уже ничего не сделать).


  1. sim2q
    16.11.2022 17:59
    +1

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

    входы китайского Seleae (основе чипа CY-что-то там) если не ошибаюсь - не плохо так подтянуты к питанию, у меня через них даже что то запускалось :)