2014-02-04 8 views
2

У STM32F2 micro-controller есть возможности предотвратить считывание кода приложения с помощью интерфейса отладки. Он отлично работает и выполняется довольно легко, настроив уровень защиты чтения (RDP) на '1' (!0xAA || !0xCC) or '2' (0xCC which is irreversible). Кроме того, что я пытаюсь отключить его, я запускаю проблемы.Снятие защиты считывания STM32F2

ожидаемое поведение, когда уровень RDP опускается обратно в 0:

  • чип будет выполнять массовый флэш-стирания.
  • После этого производится очистка флага защиты.
  • Система сброса

За исключением после цикла питания вспышка была успешно стерт, но флаг защиты остается на уровне «1» (0x55), поддерживая интерфейс отладки отключен. И, таким образом, я не могу написать какой-либо новый код приложения. Можно обходиться с отладчиком и заставлять флаг на уровень 0 (0xAA) вручную, хотя ..

Есть ли у кого были такие же или подобные проблемы с серией STM32F2xx, которые могут мне помочь? Я использую стандартные периферийные драйверы STM32 для программирования вспышки.

Включить

// Enable read out protection 
FLASH_OB_Unlock(); 
FLASH_OB_RDPConfig(OB_RDP_Level_1); 
FLASH_OB_Launch(); 
FLASH_OB_Lock(); 

// Restart platform 
NVIC_SystemReset(); 

Отключить

// Disable read out protection 
FLASH_OB_Unlock(); 
FLASH_OB_RDPConfig(OB_RDP_Level_0); 
FLASH_OB_Launch(); 
FLASH_OB_Lock(); 

// Restart platform 
NVIC_SystemReset(); 

ответ

2

Это происходит потому, что перед клиринговым флагом защиты, а в середине массовой вспышки стирает, перезапуск чипа.

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

Force boot0 булавку, чтобы быть 1 и сила boot1 булавку, чтобы быть 0 при включении питания, запуск загрузчика затем подключить USB и программировать чип с DFU программиста. Вы можете скачать программу DFU here.

2

Я использовал библиотеку как не следует (он не работает без FLASH_Unlock();):

// Flash Readout Protection Level 1 
if (FLASH_OB_GetRDP() != SET) { 
    FLASH_Unlock();       // this line is critical! 
    FLASH_OB_Unlock(); 
    FLASH_OB_RDPConfig(OB_RDP_Level_1); 
    FLASH_OB_Launch();      // Option Bytes programming 
    FLASH_OB_Lock(); 
    FLASH_Lock(); 
} 

Нет необходимости в NVIC_SystemReset();.

Проверка функциональности работала лучше всего с STM32 ST-LINK utility CLI для меня:

> "C:\Program Files (x86)\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility\ST-LINK_CLI.exe" -c SWD -rOB 
STM32 ST-LINK CLI v3.0.0.0 
STM32 ST-LINK Command Line Interface 

ST-LINK SN : 51FF6D064989525019422287 
ST-LINK Firmware version : V2J27S0 
Connected via SWD. 
SWD Frequency = 4000K. 
Target voltage = 2.9 V. 
Connection mode : Normal. 
Device ID:0x422 
Device flash Size : 256 Kbytes 
Device family :STM32F302xB-xC/F303xB-xC/F358xx 

Option bytes: 
RDP   : Level 1 
IWDG_SW  : 1 
nRST_STOP : 1 
nRST_STDBY : 1 
nBoot1  : 1 
VDDA  : 1 
Data0  : 0xFF 
Data1  : 0xFF 
nSRAM_Parity: 1 
WRP   : 0xFFFFFFFF 

на самом деле не решение, но я надеюсь, что это экономит кого-то некоторое время.

Смежные вопросы