-1

我想使用 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

4

2 回答 2

0

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

于 2018-01-11T11:52:09.260 回答
0

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

于 2017-11-29T18:52:35.823 回答