我正在尝试将固件刷新到STM32L152,但我有:
打开片上调试器 0.10.0+dev-00312-g1a3cbbf3 (2018-03-02-20:11) 根据 GNU GPL v2 授权 有关错误报告,请阅读 http://openocd.org/doc/doxygen/bugs.html 适配器速度:300 kHz adapter_nsrst_delay: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 电脑: 0x0800b324 MSP: 0x20007ffc STM32L:启用恒生指数 信息 : 无法匹配请求的速度 2000 kHz,使用 1800 kHz 信息 : 无法匹配请求的速度 2000 kHz,使用 1800 kHz 适配器速度:1800 kHz ** 编程已开始 ** 已启用自动擦除 信息 : 设备: STM32L1xx (3类 - 中等+密度) 信息 : STM32L闪存大小为256kb,基址为0x8000000警告:找不到地址的闪存库0x00000000从文件构建/固件写入 0 字节.bin以 0.003700s (0.000 KiB/s) 为单位 ** 编程已完成 ** ** 验证已启动 ** 目标因断点而停止,当前模式:线程 xPSR: 0x61000000 电脑: 0x2000002e MSP: 0x20007ffc 错误:校验和不匹配 - 尝试二进制比较 差异 0 地址0x00000004。是0x25而不是0xb5 差异 1 地址0x00000005。是0xb3而不是0xa7~~~~ 很多那些~~~~超过 128 个错误,其余不打印。 ** 验证失败 ** 关闭命令调用固件
.cfg
来源 [查找接口/链接.cfg] 设置工作区大小0x8000 运输选择hla_swd 来源 [查找目标/STM32L1.cfg] init_reset停止 程序构建/固件.bin验证重置退出
有趣的是,当尝试编程时firmware.elf
,一切都很好。当然,firmware.bin
是从firmware.elf
生成的,所以它们共享相同的链接器脚本(或者我在这一部分错了?
MEMORY
{
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 256K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32K
}
...
我也尝试过OpenOCD0.10.0
和0.9.0
。
从文件构建/固件写入 0 个字节.bin
固件.bin丢失了其偏移量信息,因为它是原始二进制格式。 您最好尝试直接刷新固件.elf文件。
或者,您可以尝试将正确的闪存偏移量放入 OpenOCD 命令中:
program build/firmware.bin 0x08000000 verify reset exit