Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

На STM32-контроллере изменился chipid, не могу его сбросить

Сб апр 09, 2022 20:52:12

Имею плату STM32F103C8T6 (Blue Pill).

После прошивки в контроллер DFU-бутлоадера и поигравшись немного с ним, решил прошить контроллер своей программой по-обычному, через ST-LinkV2 (SWD). Поставил boot-джамперы в положение 00, и попытался прошить через ST-Link. И каково же было мое удивление, что я этого сделать не могу по причине некорректного chipid.

До прошивки DFU-bootloaderа плата выдавала такие данные:
Код:
> st-info --probe
Found 1 stlink programmers
 serial: 132014026315303030303032
openocd: "\x13\x20\x14\x02\x63\x15\x30\x30\x30\x30\x30\x32"
  flash: 65536 (pagesize: 1024)
   sram: 20480
 chipid: 0x0410
  descr: F1 Medium-density device

А после работы с DFU-прошивкой плата стала выдавать такое:
Код:
Found 1 stlink programmers
 serial:     132014026315303030303032
 hla-serial: "\x13\x20\x14\x02\x63\x15\x30\x30\x30\x30\x30\x32"
 flash:      0 (pagesize: 0)
 sram:       0
 chipid:     0x0748

И в момент прошивки по SWD STLinkV2 дает теперь такую ошибку:
Код:
> st-flash --reset write myprogramm.bin 0x08000000
st-flash 1.6.1
2022-04-09T18:48:44 WARN common.c: unknown chip id! 0x3748
Failed to connect to target
(И что еще непонятно, в st-info виден идентификатор 0x0748, а флешер ругается на идентификатор 0x3748).

Начал искать советы, как сбросить плату. Советы были разные, ни один не сработал. Вот что я делал:

* * *

Вначале выставил boot-перемычки на boot0=1 и boot1=0 чтобы при старте платы не выполнялся левый код, переткнул плату в USB-гнезде и попытался обнулить FLASH. Но нет, такое не прокатывает:
Код:
> st-flash erase
st-flash 1.6.1
2022-04-09T18:57:41 WARN common.c: unknown chip id! 0x3748
Failed to connect to target

Пробовал с boot-перемычками в положении 00, тот же самый результат.

В конце концов заметил, что если нажать Reset и удерживать, плата начинает выдавать такую информацию о себе:
Код:
Found 1 stlink programmers
 serial:     132014026315303030303032
 hla-serial: "\x13\x20\x14\x02\x63\x15\x30\x30\x30\x30\x30\x32"
 flash:      61010944 (pagesize: 1024)
 sram:       20480
 chipid:     0x0410
 descr:      F1xx Medium-density

Странный размер FLASH, но зато chipid правильный. Удерживая Reset, дал команду очистки FLASH и она сработала:
Код:
> st-flash erase
st-flash 1.6.1
INFO common.c: F1xx Medium-density: 20 KiB SRAM, 59581 KiB flash in at least 1 KiB pages.

Дальше перегрузил плату, но она все равно опять показывает flash:0, sram:0, chipid:0x0748. Я пытался проделать то же самое с boot-перемычками Boot0=1 Boot1=0, результат тот же.

Тогда при нажатом Reset я проверил, а что вообще в FLASH памяти есть:
Код:
> st-flash read firmware.bin 0x8000000 0x2000
> xxd firmware.bin
00000000: 08b5 1420 08b5 1420 08b5 1420 08b5 1420  ... ... ... ...
00000010: 08b5 1420 08b5 1420 08b5 1420 08b5 1420  ... ... ... ...
00000020: 08b5 1420 08b5 1420 08b5 1420 08b5 1420  ... ... ... ...
00000030: 08b5 1420 08b5 1420 08b5 1420 08b5 1420  ... ... ... ...
00000040: 08b5 1420 08b5 1420 08b5 1420 08b5 1420  ... ... ... ...
00000050: 08b5 1420 08b5 1420 08b5 1420 08b5 1420  ... ... ... ...
00000060: 08b5 1420 08b5 1420 08b5 1420 08b5 1420  ... ... ... ...
00000070: 08b5 1420 08b5 1420 08b5 1420 08b5 1420  ... ... ... ...
00000080: 08b5 1420 08b5 1420 08b5 1420 08b5 1420  ... ... ... ...
00000090: 08b5 1420 08b5 1420 08b5 1420 08b5 1420  ... ... ... ...
000000a0: 08b5 1420 08b5 1420 08b5 1420 08b5 1420  ... ... ... ...
...

Прошивки уже нет. Но все равно плата показывает flash:0, sram:0, chipid:0x0748 пока не зажмешь Reset.

Я пробовал зажимать Reset до вставки ST-LinkV2 в USB, пробовал не зажимать, пробовал нажимать один раз, с разными положениями boot-перемычек, давал команды st-flash erase, st-flash reset, но все бестолку. Плата упорно показывает flash:0, sram:0, chipid:0x0748.

Вопрос: как, блин, эту плату можно сбросить? Чтобы вернулся нормальный id и правильный размер FLASH/RAM?

Re: На STM32-контроллере изменился chipid, не могу его сброс

Вс апр 10, 2022 00:20:47

Скачайте официальную утилиту и ее используйте для прошивки https://www.st.com/en/development-tools ... nk004.html
Если такая реакция на сброс, это означает что в МК есть прошивка, мешающая нормальной работе.

Re: На STM32-контроллере изменился chipid, не могу его сброс

Вс апр 10, 2022 12:52:34

Скачайте официальную утилиту и ее используйте для прошивки https://www.st.com/en/development-tools ... nk004.html
Если такая реакция на сброс, это означает что в МК есть прошивка, мешающая нормальной работе.


Конечно, пробовал ей.
Она не может работать с устройством, говорит что ей chipid 0x0748 не нравится.
А если зажать и удерживать Reset, при котором chipid становится 0x0410, тогда говорит что не может прошить плату, потому что на плате зажат Reset.

Но в конце концов я сбросил контроллер, chipid восстановился, объем памяти FLASH/RAM стали правильные.

Вот здесь подробности: https://electronix.ru/forum/index.php?a ... &id=166052

Re: На STM32-контроллере изменился chipid, не могу его сброс

Вс апр 10, 2022 14:03:14

Ты, похоже, не успеваешь reset отпустить.
Последовательность действий такая: выставляешь перемычки для загрузки из флеша (т.е. как обычно); набираешь в терминале нужную команду (скажем, сброс), затем зажимаешь reset на плате, жамкаешь enter и тут же отпускаешь reset.
Но проще поставить перемычки для загрузки с встроенного бутлоадера и почистить при помощи "родного" USART-бутлоадера. Некоторые БУшные МК, которые я покупал на али, только так и очищались (в прошивке еще и SWD был отключен, а с зажатым резетом почему-то не прокатывало).

Re: На STM32-контроллере изменился chipid, не могу его сброс

Пн апр 11, 2022 11:58:06

Подключите сигнал RESET от программатора.
Ответить