我想使用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
答案 0 :(得分:0)
该错误消息(假设它是准确的)表示芯片上的调试端口(SWD连接的从设备)检测到错误。这可能是SWD上的奇偶校验错误,读取轮询不匹配或AHB错误响应。见table 2.10 here。如果不深入研究这些openOCD可以处理的内容,很难说清楚。这只是你的问题的一个症状 - 很可能你的芯片不支持直接写入闪存(或者至少没有准备闪存控制器的前导码)
答案 1 :(得分:0)
你不能只是"只是"将任何值写入闪存。在(差不多?)所有情况下你必须按照一个非常具体的程序来实际写入那里(比如设置这个位,等待其他位,将地址写入该寄存器,将值写入该寄存器,设置另一位,等待"完成"位,重复...)。这就是为什么你要做的事情只是在你使用更多mww
(以及mmw
和mdw
以及使用16位的8位,有时你可能在实际写入之前一次只写2个字节,而不是所有4个命令。