Arm 未找到地址0x00000000的闪存库

Arm 未找到地址0x00000000的闪存库,arm,cortex-m3,openocd,stm32l152,Arm,Cortex M3,Openocd,Stm32l152,我正试图将固件闪存到STM32L152中,但我有: Open On-Chip Debugger 0.10.0+dev-00312-g1a3cbbf3 (2018-03-02-20:11) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html adapter speed: 300 kHz adapter_nsrst_delay: 100 Info : The sele

我正试图将固件闪存到STM32L152中,但我有:

Open On-Chip Debugger 0.10.0+dev-00312-g1a3cbbf3 (2018-03-02-20:11) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html adapter speed: 300 kHz adapter_nsrst_delay: 100 Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD none separate Info : Unable to match requested speed 300 kHz, using 240 kHz Info : Unable to match requested speed 300 kHz, using 240 kHz Info : clock speed 240 kHz Info : STLINK v2 JTAG v28 API v2 SWIM v6 VID 0x0483 PID 0x3748 Info : using stlink api v2 Info : Target voltage: 1.769170 Info : stm32l1.cpu: hardware has 6 breakpoints, 4 watchpoints Info : Listening on port 3333 for gdb connections Info : Unable to match requested speed 300 kHz, using 240 kHz Info : Unable to match requested speed 300 kHz, using 240 kHz adapter speed: 240 kHz target halted due to debug-request, current mode: Thread xPSR: 0x01000000 pc: 0x0800b324 msp: 0x20007ffc STM32L: Enabling HSI Info : Unable to match requested speed 2000 kHz, using 1800 kHz Info : Unable to match requested speed 2000 kHz, using 1800 kHz adapter speed: 1800 kHz ** Programming Started ** auto erase enabled Info : Device: STM32L1xx (Cat.3 - Medium+ Density) Info : STM32L flash size is 256kb, base address is 0x8000000 Warn : no flash bank found for address 0x00000000 wrote 0 bytes from file build/firmware.bin in 0.003700s (0.000 KiB/s) ** Programming Finished ** ** Verify Started ** target halted due to breakpoint, current mode: Thread xPSR: 0x61000000 pc: 0x2000002e msp: 0x20007ffc Error: checksum mismatch - attempting binary compare diff 0 address 0x00000004. Was 0x25 instead of 0xb5 diff 1 address 0x00000005. Was 0xb3 instead of 0xa7 ~~~~ Lot's of those ~~~~ More than 128 errors, the rest are not printed. ** Verify Failed ** shutdown command invoked 打开片上调试器0.10.0+dev-00312-g1a3cbbf3(2018-03-02-20:11) 根据GNU GPL v2获得许可 有关错误报告,请阅读 http://openocd.org/doc/doxygen/bugs.html 适配器速度:300 kHz 适配器\u nsrst\u延迟:100 信息:所选传输接管了低级目标控制。与普通JTAG/SWD相比,结果可能有所不同 不分开 信息:无法匹配请求的速度300 kHz,使用240 kHz 信息:无法匹配请求的速度300 kHz,使用240 kHz 信息:时钟速度240千赫 信息:STLINK v2 JTAG v28 API v2游泳v6视频0x0483 PID 0x3748 信息:使用stlink api v2 信息:目标电压:1.769170 信息:stm32l1.cpu:硬件有6个断点,4个观察点 信息:侦听端口3333上的gdb连接 信息:无法匹配请求的速度300 kHz,使用240 kHz 信息:无法匹配请求的速度300 kHz,使用240 kHz 适配器速度:240 kHz 由于调试请求,目标已暂停,当前模式:线程 xPSR:0x01000000 pc:0x0800b324 msp:0x200007FFC STM32L:启用HSI 信息:无法匹配请求的速度2000 kHz,使用1800 kHz 信息:无法匹配请求的速度2000 kHz,使用1800 kHz 适配器速度:1800 kHz **开始编程** 自动擦除已启用 信息:设备:STM32L1x(第3类-中等密度) 信息:STM32L闪存大小为256kb,基址为0x8000000 警告:未找到地址0x00000000的闪存组 以0.003700s(0.000 KiB/s)的速度从文件build/firmware.bin写入0字节 **编程完成** **验证启动** 目标因断点而暂停,当前模式:线程 xPSR:0x61000000 pc:0x2000002e msp:0x20007ffc 错误:校验和不匹配-正在尝试二进制比较 差异0地址0x00000004。是0x25而不是0xb5 差异1地址0x00000005。是0xb3而不是0xa7 ~~~~~~~~~~~~~ 超过128个错误,其余未打印。 **验证失败** 已调用shutdown命令 固件.cfg

source [find interface/stlink.cfg] set WORKAREASIZE 0x8000 transport select hla_swd source [find target/stm32l1.cfg] init_reset halt program build/firmware.bin verify reset exit 源[查找接口/stlink.cfg] 设置工作区大小0x8000 社会福利署交通部 源[查找目标/stm32l1.cfg] 初始化复位暂停 程序生成/固件.bin验证重置退出 有趣的是,当尝试编程
firmware.elf
时,一切都正常。当然,
firmware.bin
是从
firmware.elf
生成的,因此它们共享相同的链接器脚本(或者我在这方面错了?)


记忆
{
闪光(rx):原点=0x08000000,长度=256K
RAM(xrw):原点=0x20000000,长度=32K
}
...

我还尝试了OpenOCD
0.10.0
0.9.0

从文件build/firmware.bin写入0字节

firmware.bin丢失了其偏移量信息,因为它是原始二进制格式。 您最好尝试直接刷新firmware.elf文件

或者,您可以尝试将正确的闪存偏移量放入OpenOCD命令:

program build/firmware.bin 0x08000000 verify reset exit

谢谢,我会在我拿回我的物理板后马上测试这个,但是我有点好奇,为生产闪存elf文件而不是bin是一个好的做法吗?elf可能包含调试符号和类似的信息,人们可能不想与生产共享。(英特尔)十六进制文件是一种除了程序及其地址之外不包含任何有用内容的替代文件。与二进制文件不同,十六进制文件还支持“孔”-未编程/可用空间。firmware.bin文件中的第一个字节将来自闪存中0x08000000处的第一个字节。因此,如果使用.bin,则需要指定地址0x08000000。旁注:如果你有一个单字节的.bin数据,你的.bin文件将被填充。假设您有10个字节的.text,并且您的变量都是.bss,flash.bin将是10个字节,但是如果您有10个字节的.text和1个字节的.data,.bin文件将是0x18000001字节或402653185,即使文件中只有11个相关字节。请注意openocd输出中的这一行:信息:STM32L flash size是256kb,基址为0x8000000