OpenOCD仅能烧录STM32F103VG一半Flash的问题求助
问题原因及解决方案
你的问题核心是STM32F103VG的大容量Flash(双Bank)在OpenOCD下未能正确完成全片烧录,以下是针对性的排查和解决步骤:
1. 修正WORKAREASIZE参数(最可能的原因)
你的配置中错误设置了WORKAREASIZE 0x18000(96KB),但STM32F103VG的SRAM只有64KB(0x10000)。超出SRAM范围的工作区域会导致OpenOCD在编程后半段Flash时出现内存访问错误,进而失败。
修改my_mcu.cfg中的对应行:
# The chip has 64KB sram set WORKAREASIZE 0x10000
2. 显式配置大容量Flash Bank
默认的stm32f1x.cfg可能未正确适配1MB Flash的双Bank结构,需要手动指定Flash bank的完整参数覆盖默认配置。在source [find target/stm32f1x.cfg]之前添加以下内容:
# 显式配置1MB Flash Bank flash bank $_CHIPNAME.flash stm32f1x 0x08000000 0x100000 0 0 $_TARGETNAME
3. 降低SWD通信速度
树莓派的GPIO电平驱动能力有限,过高的SWD速度可能导致通信丢包,尤其是在烧录后半段Flash时。在source [find interface/stlink.cfg]之后添加:
# 降低SWD速度到1MHz adapter speed 1000
4. 强制指定芯片TAP ID(可选)
如果OpenOCD未能正确识别STM32F103VG的大容量型号,可手动指定TAP ID:
set CPUTAPID 0x1ba01477
验证操作
修改配置后,重新执行烧录命令:
openocd -f my_mcu.cfg -c "program my_bin.srec reset exit"
如果问题仍存在,可尝试增加烧录时的验证步骤,确保数据正确写入:
openocd -f my_mcu.cfg -c "program my_bin.srec verify reset exit"
内容的提问来源于stack exchange,提问作者Antidot
相关产品推荐
相关产品推荐

