Имею плату 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
Начал искать советы, как сбросить плату. Советы были разные, ни один не сработал. Вот что я делал:
* * *
Вначале выставил 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?