Openocd如何将选项字节写入STM32F4

时间:2018-02-22 12:08:23

标签: stm32f4 jtag openocd

我有两块板,带有STM32F437(IGH6 7BA4S VQ PHL 7B 542)处理器。我们用openocd和jtag编程这些,但最近一张卡停止工作。不再可能对卡进行编程,我们发现的差异之一是卡之间的用户选项字节不同。

  • 0x0EC在工作卡上
  • 0xCFC破碎

我尝试做的是使用options_write命令。请注意,STM32F4显然属于" stm32f2x"命令。

openocd -f openocd.cfg -c "reset halt; stm32f2x unlock 0; reset halt; stm32f2x options_write 0 0x0EC"

这导致错误消息:"错误:stm32x设备受保护"

在STM32F437参考手册RM0090下" 3.7.2编程用户选项字节"它说:

  

要在此扇区上运行任何操作,请在Flash选项中选择锁定位(OPTLOCK)   必须清除控制寄存器(FLASH_OPTCR)。你可以清除这一点   执行以下序列:\ n

     
      
  • 在Flash选项密钥寄存器(FLASH_OPTKEYR)中写入OPTKEY1 = 0x0819 2A3B
  •   
  • 在Flash选项密钥寄存器(FLASH_OPTKEYR)中写入OPTKEY2 = 0x4C5D 6E7F
  •   
     

可以保护用户选项字节,防止不需要的擦除/编程操作   通过软件设置OPTLOCK位。

为此,我在telnet会话中尝试了以下内容:

  1. mww 0x08 0x08192A3B
  2. mww 0x08 0x04C5D6E7F
  3. mdw 0x0C
  4. mww 0x18 0x0EC
  5. mww 0x14 0x0EC
  6. 第1行的0x08是FLASH_OPTKEYR,第3行的0x0C是FLASH_SR,用于检查BSY位是否未置位,第4行的0x14是FLASH_OPTCR1,第5行的0x14是FLASH_OPTCR。

    然后重新启动并尝试编写应用程序 openocd -f openocd.cfg -c "program HCF-220_07_010_PA2.hex reset exit"

    这会导致错误:

      

    错误:stm32x设备受保护。

    我还尝试在编程之前执行以下命令解锁: openocd -f openocd.cfg -c "openocd -f openocd.cfg -c "reset halt; stm32f2x unlock 0; program HCF-220_07_010_PA2.hex reset exit"

    结果相同:

      

    错误:stm32x设备受保护。

    更新

    我在telnet中尝试了以下操作但没有运气,用户选项仍然是0xCFC:

    1. mww 0x40023C08 0x08192A3B
    2. mww 0x40023C08 0x04C5D6E7F
    3. mdw 0x40023c0c
    4. mww 0x40023C18 0x0EC
    5. mww 0x40023C14 0x0EC
    6. mww 0x40023C08 0x02
    7. Power Cycle
    8. 在RM0090第3.7.2章中,它还说:4. Set the option start bit (OPTSTRT) in the FLASH_OPTCR register 因此,上面的nr 6.

2 个答案:

答案 0 :(得分:1)

闪存寄存器的基地址为0x40023C00(根据RM0090)。 0x08与基偏移,因此您应该写入0x40023C08

答案 1 :(得分:0)

对我来说可行的解决方案如下:

  1. pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * \ bytes((BLOCK_SIZE - len(s) % BLOCK_SIZE, )) 是的,不能解锁。
  2. 重新启动电源
  3. stm32f2x lock 0
  4. reset init
  5. mww 0x40023C08 0x08192A3B
  6. mww 0x40023C08 0x04C5D6E7F等待闪存写入完成,请确保我们收到00000000
  7. mdw 0x40023c0c
  8. mww 0x40023C18 0x0FFF0000写出与工作中相同的user_options
  9. mww 0x40023C14 0x0FFFAAEC设置选项的起始位,步骤“ 4”。 rm0090。
  10. mww 0x40023C14 0x0FFFAAEE等待闪存擦除完成,请确保我们收到00000。这大约需要10秒钟。
  11. 重新启动电源

它不能与OpenOCD命令“ options_write”一起使用的原因,可以在OpenOCD手册中找到。 “ user_options”自变量采用FLASH_OPTCR的位31-28和7-0。