Перейти к содержанию
    

Вопрос о программировании Flash STM32F405

Здравствуйте, уважаемые коллеги, может кто-либо сталкивался с такой ситуацией.

Процессор STM32F405 отлично программируется посредством BootLoader, но мне необходимо сделать доработки в программе и отладку новой версии. Как я не бьюсь, но по SWD не удается запрограммировать FLash, из среды Keil, при ее программировании получаю сообщение: истек таймаут при обращении к Flash-памяти. Никакие ключи для защиты Flash-памяти в BootLoader не устанавливал.

Заметил, что когда процессор был чистым, он поддерживал SWD, но стоило один раз запрограммировать его через BootLoader, он перестал программироваться через SWD. Keil процессор на SWD-интерфейсе обнаруживает, но запрограммировать на может из-за таймаута. Такое подозрение, что автоматически установилась защита Flash-памяти, но я не устанавливал защиту.

Уважаемые, коллеги, если кто-то знает в чем тут дело, подскажите, пожалуйста.

В литературе и мануалах, не нашел ответа на свой вопрос, к сожалению.

Заранее благодарен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Заметил, что когда процессор был чистым, он поддерживал SWD, но стоило один раз запрограммировать его через BootLoader, он перестал программироваться через SWD. Keil процессор на SWD-интерфейсе обнаруживает, но запрограммировать на может из-за таймаута. Такое подозрение, что автоматически установилась защита Flash-памяти, но я не устанавливал защиту.

 

Ну так может bootloader ее сам устанавливает? Попробуйте сделать unsecure из segger jflash или ее аналога

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Программа может переопределять выводы SWD.

+1

 

Нужен аналог такого

	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); // !

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Программа может переопределять выводы SWD.

Действительно, этот момент нужно тщательнее просмотреть!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сеанс коллективного гадания :)

 

Я ставлю на слетевшие настройки Flash Download в настройках отладчика.

Это если верить в "кейл процессор обнаруживает" и не верить в "сломалось сразу после первой прошивки".

 

А вообще - больше информации надо.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Действительно, этот момент нужно тщательнее просмотреть!

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

 

 

Сеанс коллективного гадания :)

 

Я ставлю на слетевшие настройки 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 не нашел.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно "зайти" с другой стороны.

Попробовать "действо" на другом PC. (возможно что-то слетело не на F405 а в "комплекте" Keil или драйверах)

Если есть ST-Link + STM32 ST-LINK Utility - считать + стереть чип.

Подать ресет до возникновения сообщения о таймауте. Проверить питание.

Проверить кабель USB (заменить)

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Утилитой STMFlashLoader (ST) снял все защиты: чтение/запись. И все заработало!

Спасибо всем за полезные советы!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите, пожалуйста, сигнал NRST сброса процессора обязательно нужно задействовать при использовании SWD? Или можно без него, т.е. обойтись минимально возможным количеством сигналов: SWDIO, SWCLK, GND? Вопрос возник из-за того, что часто от Keil имею ошибку доступа в Flash/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите, пожалуйста, сигнал NRST сброса процессора обязательно нужно задействовать при использовании SWD? Или можно без него, т.е. обойтись минимально возможным количеством сигналов: SWDIO, SWCLK, GND? Вопрос возник из-за того, что часто от Keil имею ошибку доступа в Flash/

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

 

Тем более, что коннект под сбросом это способность STM32.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите, пожалуйста, сигнал NRST сброса процессора обязательно нужно задействовать при использовании SWD? Или можно без него, т.е. обойтись минимально возможным количеством сигналов: SWDIO, SWCLK, GND? Вопрос возник из-за того, что часто от Keil имею ошибку доступа в Flash/

Ошибка доступа из-за высокой скорости SWD или длинных проводов.

RESET как раз полезен, если переопределяются выводы SWD или как написали про спячку - отладчик сбрасывает процессор, и пока он не успел переопределить, можно подключиться.

Еще желателен вывод VCC -тот же STLink V2 требует его наличия, чтобы выдавать соответствующие уровни напряжения для процессора.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С сигналом NRST стал процессор программироваться всегда, но отладчик не стартует, дает такое сообщение Keil:

 

Cannot access Memory

*** error 57: illegal address (0x08000000)

 

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

 

Был ли у кого-либо опыт программирования поочередно: когда через BootLoader, а когда через SWD?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С сигналом NRST стал процессор программироваться всегда, но отладчик не стартует, дает такое сообщение Keil:

Конечно глупая версия, но может после программирования и перед отладкой надо снять NRST?

Такое может быть, если вы его формируете вручную.

Опыт был, программирую всегда с поддержкой NRST, никаких проблем не возникало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...