stm32 - 操作期间图像转储失败
问题描述
我使用下面的 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 停止转储剩余的内存?
解决方案
您可以使用 dfu-utils 重新刷新您的 STM32 微控制器。
在 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 选项,您可以选择产品:供应商,例如 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 选项可以指定保存二进制文件的闪存地址。检查数据表中的内存映射。
希望这可以帮助!:-)
推荐阅读
- android - Android Studio 模拟器错误
- javascript - 清除 radtextbox telerik 后显示数据
- javascript - 在 http.get 函数返回之前调用的 Angular 成功函数
- spring-mvc - mongoReactiveTemplate 聚合查询
- java - 如果 Spark 数据集中的记录的键相同,如何创建值列表
- java - 如何仅将主题中的最后一条消息保存到文件中?
- java - 在编译时获取处理器内部方法调用(ExecutableElement)的参数类
- c# - Unity 中的“鼠标 X”和“鼠标 Y”返回什么?
- c# - 通过 Partition 和 Row Key 检索数据时获取 null
- java - 类中的 main() 与接口中的 main()