Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос о программировании Flash STM32F405
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Vladimir_T
Здравствуйте, уважаемые коллеги, может кто-либо сталкивался с такой ситуацией.
Процессор STM32F405 отлично программируется посредством BootLoader, но мне необходимо сделать доработки в программе и отладку новой версии. Как я не бьюсь, но по SWD не удается запрограммировать FLash, из среды Keil, при ее программировании получаю сообщение: истек таймаут при обращении к Flash-памяти. Никакие ключи для защиты Flash-памяти в BootLoader не устанавливал.
Заметил, что когда процессор был чистым, он поддерживал SWD, но стоило один раз запрограммировать его через BootLoader, он перестал программироваться через SWD. Keil процессор на SWD-интерфейсе обнаруживает, но запрограммировать на может из-за таймаута. Такое подозрение, что автоматически установилась защита Flash-памяти, но я не устанавливал защиту.
Уважаемые, коллеги, если кто-то знает в чем тут дело, подскажите, пожалуйста.
В литературе и мануалах, не нашел ответа на свой вопрос, к сожалению.
Заранее благодарен.
Непомнящий Евгений
Цитата(Vladimir_T @ Jun 13 2018, 14:02) *
Заметил, что когда процессор был чистым, он поддерживал SWD, но стоило один раз запрограммировать его через BootLoader, он перестал программироваться через SWD. Keil процессор на SWD-интерфейсе обнаруживает, но запрограммировать на может из-за таймаута. Такое подозрение, что автоматически установилась защита Flash-памяти, но я не устанавливал защиту.


Ну так может bootloader ее сам устанавливает? Попробуйте сделать unsecure из segger jflash или ее аналога
HardEgor
Программа может переопределять выводы SWD.
adnega
Цитата(HardEgor @ Jun 13 2018, 14:20) *
Программа может переопределять выводы SWD.

+1

Нужен аналог такого
CODE
GPIOA->MODER = 0
| (GPIO_MODE_ALTERNATE << GPIO_MODER_PIN0)
| (GPIO_MODE_ALTERNATE << GPIO_MODER_PIN1)
| (GPIO_MODE_ALTERNATE << GPIO_MODER_PIN2)
| (GPIO_MODE_ANALOG << GPIO_MODER_PIN5)
| (GPIO_MODE_ANALOG << GPIO_MODER_PIN6)
| (GPIO_MODE_ALTERNATE << GPIO_MODER_PIN7)
| (GPIO_MODE_OUTPUT << GPIO_MODER_PIN8)
| (GPIO_MODE_ALTERNATE << GPIO_MODER_PIN9)
| (GPIO_MODE_ALTERNATE << GPIO_MODER_PIN10)
| (GPIO_MODE_ALTERNATE << GPIO_MODER_PIN13) // !
| (GPIO_MODE_ALTERNATE << GPIO_MODER_PIN14) // !
| (GPIO_MODE_OUTPUT << GPIO_MODER_PIN15);

GPIOA->AFR[0] = 0
| (AF_PA0_TIM5_CH1 << GPIO_AFR0_PIN0)
| (AF_PA1_ETH_RMII_REF_CLK << GPIO_AFR0_PIN1)
| (AF_PA2_ETH_MDIO << GPIO_AFR0_PIN2)
| (AF_PA7_ETH_RMII_CRS_DV << GPIO_AFR0_PIN7);

GPIOA->AFR[1] = 0
| (AF_PA9_USART1_TX << GPIO_AFR1_PIN9)
| (AF_PA10_USART1_RX << GPIO_AFR1_PIN10)
| (AF_PA13_SWDIO << GPIO_AFR1_PIN13) // !
| (AF_PA14_SWCLK << GPIO_AFR1_PIN14); // !
Vladimir_T
Цитата(HardEgor @ Jun 13 2018, 14:20) *
Программа может переопределять выводы SWD.

Действительно, этот момент нужно тщательнее просмотреть!
esaulenka
Сеанс коллективного гадания sm.gif

Я ставлю на слетевшие настройки Flash Download в настройках отладчика.
Это если верить в "кейл процессор обнаруживает" и не верить в "сломалось сразу после первой прошивки".

А вообще - больше информации надо.
Отладчик такой-то, выводит то-то (дословно!), другие программы (segger, st-link, что-там-ещё) выводят то-то...
Vladimir_T
Цитата(Vladimir_T @ Jun 13 2018, 14:55) *
Действительно, этот момент нужно тщательнее просмотреть!

Проверил, все выводы настроены по умолчанию, на SWD.


Цитата(esaulenka @ Jun 13 2018, 14:57) *
Сеанс коллективного гадания sm.gif

Я ставлю на слетевшие настройки Flash Download в настройках отладчика.
Это если верить в "кейл процессор обнаруживает" и не верить в "сломалось сразу после первой прошивки".

А вообще - больше информации надо.
Отладчик такой-то, выводит то-то (дословно!), другие программы (segger, st-link, что-там-ещё) выводят то-то...

SDK Keil, программатор Ulink 2 (фирменный), сообщение при загрузки:
ULINK:
Flash Timeout.Reset Target and try it again.
uVision:
Error.Flash DownLoaded Error

Подключил программатор JLink 7, тот же самое - не программируется.
Пробовал найти на сайте Segger утилиту JFasher, но для JLink 7 не нашел.
k155la3
Можно "зайти" с другой стороны.
Попробовать "действо" на другом PC. (возможно что-то слетело не на F405 а в "комплекте" Keil или драйверах)
Если есть ST-Link + STM32 ST-LINK Utility - считать + стереть чип.
Подать ресет до возникновения сообщения о таймауте. Проверить питание.
Проверить кабель USB (заменить)


Vladimir_T
Утилитой STMFlashLoader (ST) снял все защиты: чтение/запись. И все заработало!
Спасибо всем за полезные советы!
Vladimir_T
Подскажите, пожалуйста, сигнал NRST сброса процессора обязательно нужно задействовать при использовании SWD? Или можно без него, т.е. обойтись минимально возможным количеством сигналов: SWDIO, SWCLK, GND? Вопрос возник из-за того, что часто от Keil имею ошибку доступа в Flash/
Obam
Цитата(Vladimir_T @ Jun 14 2018, 14:25) *
Подскажите, пожалуйста, сигнал NRST сброса процессора обязательно нужно задействовать при использовании SWD? Или можно без него, т.е. обойтись минимально возможным количеством сигналов: SWDIO, SWCLK, GND? Вопрос возник из-за того, что часто от Keil имею ошибку доступа в Flash/

Нет, не обязательно. Но наличие сброса существенно облегчает жизнь: прислали как-то устройство прошитое, и проц в спячке, когда запитан; не коннектится и всё тут - пришлось тоненький ПЭВ кидать к сбросу у qfp100. Потом узнал (когда без надобности уже было), что просыпался проц по "0" на каком-то выводе.

Тем более, что коннект под сбросом это способность STM32.
HardEgor
Цитата(Vladimir_T @ Jun 14 2018, 18:25) *
Подскажите, пожалуйста, сигнал NRST сброса процессора обязательно нужно задействовать при использовании SWD? Или можно без него, т.е. обойтись минимально возможным количеством сигналов: SWDIO, SWCLK, GND? Вопрос возник из-за того, что часто от Keil имею ошибку доступа в Flash/

Ошибка доступа из-за высокой скорости SWD или длинных проводов.
RESET как раз полезен, если переопределяются выводы SWD или как написали про спячку - отладчик сбрасывает процессор, и пока он не успел переопределить, можно подключиться.
Еще желателен вывод VCC -тот же STLink V2 требует его наличия, чтобы выдавать соответствующие уровни напряжения для процессора.
Vladimir_T
С сигналом NRST стал процессор программироваться всегда, но отладчик не стартует, дает такое сообщение Keil:

Cannot access Memory
*** error 57: illegal address (0x08000000)

К сожалению у меня в наличии платы, которые были до этого запрограммированы через BootLoader в цехе. Не пойму, что такое с ними произошло, что SWD с этими процессорами не дружит...

Был ли у кого-либо опыт программирования поочередно: когда через BootLoader, а когда через SWD?
scifi
Цитата(Vladimir_T @ Jun 15 2018, 11:03) *
Cannot access Memory
*** error 57: illegal address (0x08000000)

На этот счёт есть статья на сайте кейла.
amiller
Цитата(Vladimir_T @ Jun 15 2018, 11:03) *
С сигналом NRST стал процессор программироваться всегда, но отладчик не стартует, дает такое сообщение Keil:

Конечно глупая версия, но может после программирования и перед отладкой надо снять NRST?
Такое может быть, если вы его формируете вручную.
Опыт был, программирую всегда с поддержкой NRST, никаких проблем не возникало.
Vladimir_T
Цитата(amiller @ Jun 15 2018, 11:20) *
Такое может быть, если вы его формируете вручную.


Сигнал NRST формируется автоматически из программатора ULink.


Цитата(scifi @ Jun 15 2018, 11:17) *


Огромное вам спасибо! Долго бы еще копался без вашей помощи!
Интуитивно я клацал этими флажками, но бессистемно, потому ничего не получалось!
scifi
Цитата(Vladimir_T @ Jun 15 2018, 13:37) *
Огромное вам спасибо! Долго бы еще копался без вашей помощи!

Да не за что. Если что, я просто вбил в гугл "keil error 57: illegal address".
Учу гуглить. Дорого biggrin.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.