LINUX.ORG.RU

Не прошивается STM32 через StLink

 


0

1

Я пишу потихоньку свой фреймворк для программирования микроконтроллеров и столкнулся с проблемой. После прошивки программы, собранной моим фреймворком, становится невозможно загрузить прошивку через программатор - st-flash просто зависает. При этом через бутлоадер по-прежнему сохраняется возможность залить прошивку. А возможность отладки через StLink и GDB сохраняется (но если сделать load в gdb, то всё зависнет).

Что характерно, проблема проявляется только на STM32F103 - на STM32F407 всё работает отлично.

Если залить прошивку, собранную с другими библиотеками (скажем, libopencm3 или ChibiOS), то всё начинает работать.

Если запускать st-flash с ключом --debug, то можно видеть бесконечный вывод строки типа

2015-11-23T22:48:24 DEBUG src/stlink-common.c: *** stlink_read_debug32 3 is 0x4002200c

В чём может быть проблема? Я отладку не запрещал специально никакими регистрами, ножки не переназначал. Быть может, отладку надо наоборот в коде специально разрешить?

Кстати, если загрузить в бутлоадер (boot0 = 1), то программатор нормально шьёт. То есть именно как будто я что-то не инициализирую.

UPD: Интересно, 0x4002200c - это адрес статус-регистра контроллера Flash... Всё, что я делаю с контроллером флеш-памяти - это настраиваю задержку при активации PLL:

FLASH_ACR = (FLASH_ACR & ~FLASH_ACR_LATENCY_MASK) | FLASH_ACR_PRFTBE | ((outClk - 1) / 24000000);

Перемещено true_admin из science

★★★★★

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

Из моего опыта были следующие проблемы:

1) старый st-link в какой-то момент стал нестабильно шить, вылечил обновлением st-link с гитхаба.

2) если что-то не работает то я запускаю while true; do st-flash --reset write fw.bin 0x8000000 && break; done и периодически жму на резет. Обычно это решает проблему. Почему так не знаю.

PS Перенести тему в Development?

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

Тут именно с моей прошивкой не прошивает. Стоит прошить прошивку, собранную с libopencm3 или ChibiOS - и всё становится нормально. Так что вряд ли дело в программаторе.

Очень интересно было бы узнать, что значит ошибка stlink_read_debug32 3 is 0x4002200c. С учётом того, что 0x4002200c - адрес регистра статуса контроллера флеш, это может быть натолкнуть на мысли.

PS Перенести тему в Development?

А сам как думаешь? Прошивка микроконтроллеров это больше Development или Engineering?

Настройки Flash-памяти я только один раз трогаю - вот тут: https://github.com/KivApple/controllerFramework/blob/master/platform/stm32/st.... Когда активирую PLL.

KivApple ★★★★★
() автор топика
Ответ на: комментарий от KivApple

А сам как думаешь?

Ну, пусть повесит в development, может, больше народу увидит.

Так ты пробовал reset дёргать? Я ничего в этом не понимаю, но, может, у тебя там бесконечный цикл без пауз и SWD это не нравится... А chibios вроде как событийно-оринетированный, там много чего происходит и какое-нить прерывание оживляет МК. Может, что-нить в errata есть.

У меня тоже иногда контроллер начинает плохо шиться. Плата f411re. На f429 пока всё нормально...

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

Ну в том же libopencm3 бесконечный цикл без пауз - это ок. И прерывания использовать не обязательно. А между тем с такими проблемами не сталкивался.

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