【问题标题】:STM32F2 removal of readout protectionSTM32F2去掉读出保护
【发布时间】:2014-02-28 14:49:38
【问题描述】:

STM32F2 micro-controller 具有内置功能,可防止使用调试接口读取应用程序代码。它工作正常,并且通过将读取保护(RDP)级别配置为'1' (!0xAA || !0xCC) or '2' (0xCC which is irreversible) 很容易完成。除了试图关闭它是我遇到问题的地方。

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();

【问题讨论】:

    标签: c flash security microcontroller stm32


    【解决方案1】:

    我使用的库如下(没有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
    

    不是真正的解决方案,但我希望这可以节省一些时间。

    【讨论】:

      【解决方案2】:

      这是因为在清除保护标志之前,以及在批量闪存擦除过程中,您重新启动了芯片。

      恢复芯片的唯一方法是使用系统引导程序。

      上电时强制boot0 引脚为1 并强制boot1 引脚为0,启动引导加载程序然后连接USB 并使用DFU 编程器对芯片进行编程。 可以下载DFU编程器here。

      【讨论】:

        猜你喜欢
        • 2019-10-19
        • 2014-08-28
        • 1970-01-01
        • 1970-01-01
        • 2019-08-19
        • 2015-12-07
        • 2014-03-14
        • 2013-10-31
        • 1970-01-01
        相关资源
        最近更新 更多