LINUX.ORG.RU

Раскирпичивание STM32F103

 


1

1

Купил китайский клон Maple Mini (не собираюсь использовать Maple IDE, просто удобный форм-фактор заводской платы с STM32F103). И зашил с помощью dfu-util (на микроконтроллере предустановлен USB DFU bootloader) по ошибке ELF-файл вместо BIN-файла. Судя по всему в загрузчике нет проверки на то, что память кончилась и пора бы прекратить писать, и он перезаписал всё что смог, пока, вероятно, не дошёл до собственного кода и утилита прошивки вылетела с ошибкой.

Это не беда подумал я - исходники загрузчика есть на официальном сайте, а у меня есть программатор ST-Link V2, однако всё оказалось не так просто. Программатор видит чип и я могу свободно писать в него свою прошивку, однако она не запускается (пробовал писать официальный bootloader, а также демку ChibiOS для данной платы). Если подключиться в режиме отладчика, то видно, что сразу после старта происходит unhandled expection. Если записывать те же прошивки тем же программатором на другие платы с таким же МК (но который я не перезаписывал с помощью dfu-util, а только программировал программатором), то всё работает.

Получается, что DFU USB Bootloader перед своей смертью перезаписал какой-то участок энергонезависимой памяти, который не перезаписывается при обычной прошивке и теперь мешает запуску любой прошивки.

Собственно вопрос - как починить? Могу скопировать нужный кусок памяти с рабочего МК, но надо знать адрес, который пострадал.

UPD: Писал с помощью GDB регистры периферии. Вручную разблокировал запись Option Bytes (ну по идее же ведь кроме них и флеша bootloader ничего испортить не мог) и стёр их, после этого программатор стал писать, что у МК 0 КБ флеша, а GDB отказывался работать с периферией. Скачал официальную утилиту для работы с StLink и запустил на виртуальной машине с Windows XP - при подключении к девайсу она ругнулась, что включена защита от чтения. Я зашёл в настройки Option Bytes и выключил защиту, записал. Теперь и официальная утилита, и st-flash вновь видят 128 КБ флеша, как положенно, однако один фиг прошивка не стартует.

Подключился опять GDB. Мы попадаем в Reset_Handler, он немного инициализирует ОЗУ (ну там запись значений по умолчанию, функция LoopCopyDataInit), а потом мы внезапно возвращаемся в Reset_Handler. Грешу на Watchdog, однако он в режиме Software. Если снять галочку в настройках Option Bytes в утилите для прошивке, то он становится Hardware, а прошивка вообще не выходит из Reset_Handler.

UPD2: Это была проблема в бутлоадере, который я скомпилировал. А когда я загрузил демку от ChibiOS она заработала. Так что запись Option Bytes через официальную утилиту помогла. Проблема решена.

★★★★★

Последнее исправление: KivApple (всего исправлений: 3)

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