我使用下面的openocd脚本转储STM32微控制器的闪存。
mkdir -p dump
openocd -f board/stm3241g_eval_stlink.cfg \
\
-c "init" \
-c "reset halt" \
-c "dump_image dump/image.bin 0x08000000 0x100000" \
-c "shutdown" \
FILENAME=dump/image.bin
FILESIZE=$(stat -c%s "$FILENAME")
echo "Size of $FILENAME = $FILESIZE bytes."
该脚本应该读取整个内存,在我看来是1MB,但很少这样做。通常它会在结束前停止读取内存。
为什么每次执行此脚本都无法获得1MB?导致openocd停止转储其余内存的问题是什么?
答案 0 :(得分:1)
您可以使用dfu-utils重新刷新STM32 micros。
在Ubuntu / Debian发行版中,您可以使用apt安装dfu-utils:
$ sudo apt-get install dfu-util
$ sudo apt-get install fwupd
以DFU模式启动您的电路板(请参阅数据表)。进入DFU模式后,您应该会看到类似以下内容:
$ lsusb | grep DFU
Bus 003 Device 076: ID 0483:df11 STMicroelectronics STM Device in DFU Mode
以DFU模式启动后,请重新刷新您的二进制文件:
$ sudo dfu-util -d 0483:df11 -a 0 -s 0x08000000:leave -D build/$(PROJECT).bin
使用-d选项,您可以选择product:vendorid,例如lsusb在DFU模式下列出的产品。
使用-a 0选项选择替代模式0,如下例所示检查可用选项:
$ sudo dfu-util -l
Found DFU: [0483:df11] ver=2200, devnum=101, cfg=1, intf=0, alt=1, name="@Option Bytes /0x1FFFF800/01*016 e", serial="FFFFFFFEFFFF"
Found DFU: [0483:df11] ver=2200, devnum=101, cfg=1, intf=0, alt=0, name="@Internal Flash /0x08000000/064*0002Kg", serial="FFFFFFFEFFFF"
如您所见,alt = 0用于内部闪存。
使用-s选项,您可以指定保存二进制文件的闪存地址。在数据表中检查您的内存映射。
希望这会有所帮助! :-)