【问题标题】:Openocd how to write option bytes to STM32F4Openocd如何将选项字节写入STM32F4
【发布时间】:2018-08-02 06:44:11
【问题描述】:

我有两个带有 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 设备受保护”

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

要在该扇区上运行任何操作,Flash 选项中的选项锁定位 (OPTLOCK) 控制寄存器 (FLASH_OPTCR) 必须清零。要被允许清除该位,您有 执行以下序列:\n

  • 在闪存选项密钥寄存器 (FLASH_OPTKEYR) 中写入 OPTKEY1 = 0x0819 2A3B
  • 在闪存选项密钥寄存器 (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

第 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

在 RM0090 第 3.7.2 章中还说:4. Set the option start bit (OPTSTRT) in the FLASH_OPTCR register 因此上面的 nr 6.。

【问题讨论】:

    标签: stm32f4 jtag openocd


    【解决方案1】:

    Flash 寄存器基地址为 0x40023C00(根据 RM0090)。 0x08 是从基址偏移的,所以你应该写到 0x40023C08

    【讨论】:

      【解决方案2】:

      我的工作解决方案如下:

      1. stm32f2x lock 0是锁不解锁。
      2. 重启电源
      3. reset init
      4. mww 0x40023C08 0x08192A3B
      5. mww 0x40023C08 0x04C5D6E7F
      6. mdw 0x40023c0c 等待闪存写入完成,确保我们收到 00000000
      7. mww 0x40023C18 0x0FFF0000
      8. mww 0x40023C14 0x0FFFAAEC 将 user_options 写入与工作相同
      9. mww 0x40023C14 0x0FFFAAEE 设置选项起始位,步骤“4”。在 rm0090。
      10. mdw 0x40023c0c 等待闪存擦除完成,确保我们收到 00000。这大约需要 10 秒。
      11. 重启电源

      OpenOCD 命令“options_write”不能工作的原因,可以在 OpenOCD 的手册中找到。 “user_options”参数从 FLASH_OPTCR 中获取位 31-28 和 7-0。

      【讨论】:

      • 出色的工作!感谢分享。今天这救了我。
      猜你喜欢
      • 2020-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-04
      • 1970-01-01
      • 1970-01-01
      • 2017-11-10
      • 2021-09-27
      相关资源
      最近更新 更多