Arm 使用OpenOcd闪存ELF文件会导致ELF头写入闪存

Arm 使用OpenOcd闪存ELF文件会导致ELF头写入闪存,arm,stm32,elf,openocd,Arm,Stm32,Elf,Openocd,我使用OpenOcd来刷新STM32 ARM Cmake项目的Elf图像 在mem.ld脚本中,闪存扇区的起始地址分配有一个地址偏移量0x08020200 如果使用OpenOCD和write_image命令将Elf文件写入闪存,则Elf头似乎在0x08020000处写入闪存 应用程序二进制文件在0x08020200处正确写入闪存(0x08020200处的前四个字节反映堆栈指针值) 由于0x08020200是闪存扇区5(0x08020000-0x0803FFFF)内的地址,我希望OpenOcd

我使用OpenOcd来刷新STM32 ARM Cmake项目的Elf图像

在mem.ld脚本中,闪存扇区的起始地址分配有一个地址偏移量0x08020200

如果使用OpenOCD和write_image命令将Elf文件写入闪存,则Elf头似乎在0x08020000处写入闪存

应用程序二进制文件在0x08020200处正确写入闪存(0x08020200处的前四个字节反映堆栈指针值)

由于0x08020200是闪存扇区5(0x08020000-0x0803FFFF)内的地址,我希望OpenOcd write_image命令的自动擦除功能能够擦除整个扇区5(因为只能擦除完整扇区)

是什么导致ELF头写入地址0x08020000处的闪存

我执行了以下步骤:

  • 手动擦除整个闪存
  • 使用OpenOcd dump_image命令转储整个flash内容
  • 选中转储的图像表示清晰的闪存(所有字节0xFF)
  • 使用OpenOcd write_image命令刷新test.elf文件
  • 再次使用OpenOcd dump_image命令转储整个flash内容
  • 选中0x08020200处的前四个字节反映堆栈指针值
  • 已检查0x08020000->ELF标头处的闪存内容已写入闪存

当在flash开始时编程ELF头时,我也遇到了同样的问题,但我在“stm32 programmer CLI”(非openOCD)中遇到了这个问题,我通过十六进制修复了它。如果我使用十六进制文件而不是ELF,闪存的开头不会损坏。

我编辑了您的问题,以明确这是一个CLion配置/使用问题-我发现原来的措辞“ELF文件的闪烁导致ELF头写入闪存”有点混乱。顺便问一下,你能在flash中只看到ELF头,还是整个ELF文件?openocd知道如何正确读取和使用ELF文件,你是如何使用该工具的?@old_timer:我的理解是,他不是直接使用openocd,而是通过Jetbrain的IDE使用。这很可能是一个Clion配置问题,而不是openocd问题,因为正如您所指出的,openocd确实讲ELF。我今天做了一些进一步的测试,我的问题在很多方面都不正确。因此,我编辑了原始问题。我还删除了CLion主题,因为我可以直接使用OpenOcd重现问题。您如何使用
write\u image
命令?您是否使用
类型
参数?它不回答问题。OP不是在询问如何刷新图像,我的意思是这个bug与openOCD无关。因为对于下载映像,您需要使用一些驱动程序,当我使用stm32程序员CLI时,我看到了相同的问题。为了进行检查,我使用stm32程序员下载固件(不带openOCD),并在版本2.5和2.6中重现此错误。