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

Не удаётся разблокировать STM32F410CBU6

Всем привет!

Имеется МК STM32F410CBU6, который в результате незафиксированного сбоя при прошивке получил блокировку чтения внутренней flash-памяти (RDP level 1).

Содержимое регистра FLASH_OPTCR(0x40023c14) после включения питания 0x8fffffed. После попытки разблокировки в OpenOCD  с помощью команды unlock:

> stm32f2x unlock 0                                                                                                                     
stm32f2x unlocked.
INFO: a reset or power cycle is required for the new settings to take effect.
> mdw 0x40023c14                                                                                                                        
0x40023c14: 0fffaaed

Т.е. по виду он разблокировался, однако после сброса (reset halt) он снова оказывается в защищенном состоянии:

> reset halt
adapter speed: 4000 kHz
Handling examine-end event for target stm32f410cbu6.cpu
target halted due to debug-request, current mode: Thread 
xPSR: 0x01000000 pc: 0xfffffffe msp: 0xfffffffc
> mdw 0x40023c14
0x40023c14: 8fffffed 

При этом, естественно, никакие команды стирания не проходят:

> stm32f2x unlock 0                                                                                                                     
stm32f2x unlocked.
INFO: a reset or power cycle is required for the new settings to take effect.
> reset halt           
adapter speed: 4000 kHz
Handling examine-end event for target stm32f410cbu6.cpu
target halted due to debug-request, current mode: Thread 
xPSR: 0x01000000 pc: 0xfffffffe msp: 0xfffffffc
> stm32f2x mass_erase 0
stm32x device protected
stm32x mass erase failed

Можно ли его вернуть к жизни и перепрошить или теперь только в морг?

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


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

ST-Link Utility скачайте, подключитесь ST-Link-ом. Все полечится.
Ну или Вы пробовали после снятия блокировки тупо дернуть питание?

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


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

Что такого волшебного может сделать эта утилита, чего не может сделать OpenOCD? У неё есть какие-то недокументированные возможности воздействия на МК?

Питание после команды снятия блокировки я тоже пытался снимать и подавать снова.

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


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

Разбираться с нетипичным поведением я бы стал с помощью их родных утилит.
Глянул RM на STM32F410, и как я понял, Flash-интерфейсы в разных МК довольно разные.
Поэтому есть маааленькая такая вероятность, что в скриптах отладчика OpenOCD просто что-то не учли.

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


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

1867070227_.thumb.png.36e0c324c6a6a1714a81df3eecdec9ae.png

Чуда не произошло. ST-Link + ST-LINK Utility не помогли.

44 минуты назад, Arlleex сказал:

Поэтому есть маааленькая такая вероятность, что в скриптах отладчика OpenOCD просто что-то не учли.

Я пробовал воспроизвести эту последовательность вручную, не полагаясь на то что делает драйвер флеша OpenOCD (stm32f2x). Но результат был тот же: option bytes "записывались" и после перезапуска терялись и RDP восстанавливался в прежнем виде.

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


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

Дополнение: МК перепаял на новый, без проблем блокируется на чтение и потом разблокируется. Все, естественно, через OpenOCD. Т.е. дело не в плате (обвязке МК), а именно в самом контроллере.

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


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

О как. Интересно, конечно.

А что в самой области байтов опций лежит? Там где RDP.
Т.е. как я понял, Flash-память байтов опций физически не прошилась.

Попробуйте вот еще что: стереть через встроенный загрузчик.
Скачайте Flash Loader Demonstrator, загрузитесь из под системного загрузчика и установите в программе RDP Level 0.

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


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

22 минуты назад, Arlleex сказал:

А что в самой области байтов опций лежит? Там где RDP.
Т.е. как я понял, Flash-память байтов опций физически не прошилась.

Да, впечатление именно такое. Т.е. он при старте снова оттуда читает значения, которые соответствуют RDP1, в то время как делает вид, что всё записалось (в регистре всё правильно). Но попробовать сейчас не могу, плату забрали. А подопытного я пока отложил в сторону, может быть попозже попробую его запаять на какую-нибудь другую плату и проверить что там с ним. Хотя, повторюсь, 99% в области option bytes лежит всё то же самое.

 

24 минуты назад, Arlleex сказал:

Попробуйте вот еще что: стереть через встроенный загрузчик.

На этой плате BOOT0 жестко запаян на землю и там к нему не подберешься, т.к. линия идёт под корпусом, а плату портить не хочется.

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


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

было похожее с STM32G. ST-LINK Utility не помогли, зато помог STM32CubeProgrammer. не знаю что именно там сделано по другому, но помог. 

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


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

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

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

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

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

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

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

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

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

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