【问题标题】:Openocd: Write a value to flash addressOpenocd:将值写入闪存地址
【发布时间】:2017-11-29 12:12:22
【问题描述】:

我想使用 openocd 将特定值写入闪存中的地址。 地址是0x0003FFF0。我要写入的值是0xFFFFC000

要删除我使用的那个地址: flash erase_address 0x0003FFF0 2048

但收到错误消息address range 0x0003fff0 .. 0x0003ffff is not sector-aligned

为了解决这个问题,我运行了 flash info 0 以找到要开始的地址,然后运行 ​​flash erase_address 0x38000 2048 并且成功了。

最后将值写入我试过的闪存:

reset halt

mww 0x0003FFF0 0xFFFFC000

但出现此错误:

SWD ack not OK: 4 FAULT SWD IDCODE 0x2ba01477

【问题讨论】:

  • 你能显示mww之前的代码吗?
  • @RingØ 现在更新了,只是一个reset halt
  • 这是一个微控制器,非常特定于芯片(cortex-m3 不是芯片,除了调试器通信以获取芯片特定外围设备的 blob 之外,根本没有真正的相关性)。所以首先没有理由期望从openocd闪烁工作,一旦我们从并行到串行闪存全部结束(芯片特定,以前不一定)。那么您使用的是什么芯片,什么 openocd 版本以及您使用什么命令行和/或 openocd 脚本来获取访问权限?
  • 很少有 µC 将允许使用mww 直接写入闪存。这就是为什么 openOCD 有特殊的闪存写入命令的原因。

标签: c arm gdb cortex-m3 openocd


【解决方案1】:

该错误消息(假设它是准确的)表明芯片上的调试端口(SWD 连接的从设备)检测到错误。这可能是 SWD 上的奇偶校验错误、读取轮询不匹配或 AHB 错误响应。见table 2.10 here。如果不深入研究哪些 openOCD 可以处理,很难说。不过,这只是您的问题的一个症状 - 您的芯片很可能不支持直接写入闪存(或者至少在没有准备闪存控制器的一些前言的情况下不支持)

【讨论】:

    【解决方案2】:

    您不能“只是”将任何值写入闪存。在(几乎?)所有情况下,您必须遵循一个非常具体的程序才能在其中实际写入一些内容(例如设置该位,等待其他位,将地址写入该寄存器,将值写入该寄存器,设置另一个位,等待“完成”位,重复...)。这就是为什么除非您使用更多 mww(以及 mmwmdw,或使用 16 位 8 位的变体,有时您可能一次只写入 2 个字节,而不是在实际写入之前所有 4) 个命令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-24
      • 1970-01-01
      相关资源
      最近更新 更多