【发布时间】:2018-11-23 11:34:22
【问题描述】:
tl;dr:将固件刷新到 0x00000000 而不是 0x08000000,我迷路了吗?
你好,
我的设备基于 STM32F103CBTx,它带有专有固件并开启了读出保护。 我使用连接到 PA13 和 PA14 的 ST-Link v2 SWDIO 和 SWCLK 以及以下命令连接到它:
sudo openocd -f /usr/share/openocd/scripts/interface/stlink-v2.cfg -f /usr/share/openocd/scripts/target/stm32f1x.cfg
我不记得我是如何删除闪存保护的,但它可以正常工作,因为原始固件不再工作了。然后我创建了一个简单的 hello world 固件,它可以上下拉动三个 gpio 并刷新它。 gpios 以 700ms 的间隔上下拉动。
刷机后,我无法再连接openocd了。我忘了指定偏移量,手册说偏移量默认为 0,因为它起作用了,我想我的糟糕的 hello world 不是引导加载程序,而是愉快地上下拉动一些随机引脚……这可能吗?我发现的所有其他线程都说引导加载程序是写保护的。
这是我最后一次联系:
> 停止 停 目标因调试请求而停止,当前模式:处理程序 HardFault xPSR:0x01000003 pc:0xffffffffe msp:0xffffffdc > 闪存 write_image 擦除 fw.hex flash write_image 擦除 fw.hex 启用自动擦除 目标因断点而暂停,当前模式:Handler HardFault xPSR:0x61000003 pc:0x2000003a msp:0xffffffdc 在 0.285697s (14.001 KiB/s) 内从文件 fw.hex 写入 4096 个字节 > 重置 重置 jtag 状态包含无效的模式值 - 通信失败 轮询目标stm32f1x.cpu失败,试图重新检查 检查失败,GDB 将停止。在 100 毫秒内再次轮询高度赞赏的任何方向。
编辑: 我现在得到的,还尝试了另一个st-link:
% sudo openocd -f /usr/share/openocd/scripts/interface/stlink-v2.cfg -f /usr/share/openocd/scripts/target/stm32f1x.cfg 打开片上调试器 0.10.0 在 GNU GPL v2 下获得许可 有关错误报告,请阅读 http://openocd.org/doc/doxygen/bugs.html 信息:自动选择第一个可用的会话传输“hla_swd”。要覆盖使用“传输选择”。 信息:选定的传输接管低级目标控制。与普通 JTAG/SWD 相比,结果可能有所不同 适配器速度:1000 kHz 适配器_nsrst_delay:100 没有分开的 信息:无法匹配请求的速度 1000 kHz,使用 950 kHz 信息:无法匹配请求的速度 1000 kHz,使用 950 kHz 信息:时钟速度 950 kHz 信息:STLINK v2 JTAG v17 API v2 SWIM v4 VID 0x0483 PID 0x3748 信息:使用 stlink api v2 信息:目标电压:3.244356 错误:初始化模式失败(无法连接到目标) 在程序“初始化”中 在程序“ocd_bouncer”中【问题讨论】: