Openocd:将值写入闪存地址

时间:2017-11-29 12:12:22

标签: c arm gdb cortex-m3 openocd

我想使用openocd在flash中为地址写一个特定的值。 地址为0x0003FFF0。我要写给它的值是0xFFFFC000

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

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

要解决此问题,我运行了flash info 0来查找要开始的地址,然后运行flash erase_address 0x38000 2048,这样就可以了。

最后将值写入我试过的flash:

reset halt

mww 0x0003FFF0 0xFFFFC000

但得到了这个错误:

SWD ack not OK: 4 FAULT SWD IDCODE 0x2ba01477

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

你不能只是"只是"将任何值写入闪存。在(差不多?)所有情况下你必须按照一个非常具体的程序来实际写入那里(比如设置这个位,等待其他位,将地址写入该寄存器,将值写入该寄存器,设置另一位,等待"完成"位,重复...)。这就是为什么你要做的事情只是在你使用更多mww(以及mmwmdw以及使用16位的8位,有时你可能在实际写入之前一次只写2个字节,而不是所有4个命令。