未找到地址 0x00000000 的闪存组

问题描述 投票:0回答:2

我正在尝试将我的固件刷新到STM32L152,但我有:

打开片上调试器0.10.0+dev-00312-g1a3cbbf3 (2018-03-02-20:11)
根据 GNU GPL v2 授权
有关错误报告,请阅读
    http://openocd.org/doc/doxygen/bugs.html
适配器速度:300 kHz
适配器_nsrst_延迟:100
信息:选定的传输接管了低级目标控制。与普通 JTAG/SWD 相比,结果可能有所不同
没有单独的
信息:无法匹配请求的速度 300 kHz,使用 240 kHz
信息:无法匹配请求的速度 300 kHz,使用 240 kHz
信息:时钟速度 240 kHz
信息:STLINK v2 JTAG v28 API v2 SWIM v6 VID 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:0x20007ffc
STM32L:启用HSI
信息:无法匹配请求的速度 2000 kHz,使用 1800 kHz
信息:无法匹配请求的速度 2000 kHz,使用 1800 kHz
适配器速度:1800 kHz
** 编程开始 **
自动擦除已启用
信息:设备:STM32L1xx(Cat.3 - 中等+密度)
信息:STM32L闪存大小为256kb,基地址为0x8000000
警告:未找到地址 0x00000000 的闪存组
在 0.003700 秒(0.000 KiB/秒)内从文件 build/firmware.bin 写入 0 个字节
** 编程完成 **
** 验证已开始 **
目标由于断点而停止,当前模式:线程
xPSR:0x61000000 PC:0x2000002e msp:0x20007ffc
错误:校验和不匹配 - 尝试二进制比较
差异 0 地址 0x00000004。是 0x25 而不是 0xb5
差异 1 地址 0x00000005。是 0xb3 而不是 0xa7
~~~~很多~~~~
超过128个错误,其余不打印。
** 验证失败 **
调用关闭命令

固件.cfg

来源[查找接口/stlink.cfg]

设置 WORKAREASIZE 0x8000
传输选择 hla_swd

源[查找目标/stm32l1.cfg]

初始化重置停止

程序 build/firmware.bin 验证重置退出

有趣的是,当尝试编程时

firmware.elf
,一切都很好。当然,
firmware.bin
是从
firmware.elf
生成的,因此它们共享相同的链接器脚本(或者我在这部分上错了?):


    MEMORY
    {
        FLASH (rx)      : ORIGIN = 0x08000000, LENGTH = 256K
        RAM (xrw)       : ORIGIN = 0x20000000, LENGTH = 32K
    }
    ...

我也尝试过 OpenOCD

0.10.0
0.9.0

arm cortex-m openocd stm32l152
2个回答
5
投票

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

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

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

program build/firmware.bin 0x08000000 verify reset exit

0
投票

我确实指定了地址,但仍然收到错误:警告:没有找到地址 0x08010000 的闪存组,并且验证失败。 我使用的是 23 年 2 月 10 日起的 0.12.0。

注意:相同的文件在 Linux 上运行不会出错。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.