【问题标题】:Image dump fails during operation操作期间图像转储失败
【发布时间】:2018-10-18 11:11:31
【问题描述】:

我使用下面的 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-util 重新刷新您的 STM32 设备?
  • 不,我为什么要这样做?我从来没有用 dfu* 来刷 STM32。
  • 设置 openocd 以重新刷新 STM32 设备并非易事。我一直在使用 dfu-utils 来重新刷新这样的设备,而且非常简单。如果你需要的话,我可以试着做一个小的分步手册。
  • 是的,如果你喜欢@aicastell 会非常有用
  • 完成!希望能帮助到你! :-)

标签: stm32 openocd


【解决方案1】:

您可以使用 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 选项可以指定保存二进制文件的闪存地址。检查数据表中的内存映射。

希望这会有所帮助! :-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    相关资源
    最近更新 更多