LINUX.ORG.RU

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

 chipid, , ,


0

3

Имею плату 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?

★★★★★

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.