lub 发表于 2023-7-26 22:21:37

H7tool可以烧录,openocd却不行

本帖最后由 lub 于 2023-7-27 01:03 编辑

有一个关于芯片烧录的疑问在网上没有找到解决方案,因为成功烧录的唯一办法是使用h7tool所以想在这里请教一下。


我在某创商城买了几个stm32F103c8,自己画了块板子引出swd接口,但是烧录的时候有以下现象:
1. 如果不使用某创商城买的芯片,从淘宝买的最小系统开发板上拆下的芯片焊到我自己的板上时使用vscode+openocd+stlink可以正常烧录,可以debug没有任何问题。
2. 焊上某创商城买的芯片后,vscode+openocd+stlink不能烧录,但是使用h7tool上位机导入二进制文件可以成功烧录运行
3. 焊上某创商城买的芯片后,使用keil+stlink有一定概率可以烧录

这是为什么呢?是某创商城买的芯片有某种保护机制吗?一摸一样的环境和电路只是使用某宝随便买的开发板上的芯片就可以完美使用。
某创买的芯片代换过3颗了,可以基本排除个体问题。某宝开发板上的芯片代换过2颗,2颗都没问题。使用的都是同一个电路。


----------
更新:
为什么h7tool可以烧录,openocd+stlink却不行呢?都是swd接口,是不是实现步骤上有什么差别?
因为我注意到h7tool的上位机有“自动解除读写保护”的选项,是不是因为这个呢?

openocd报错结果是:
Error: timed out while waiting for target halted
Error: Target not halted
Error: failed erasing sectors 0 to 31
Error: flash_erase returned -304

----------
更新:
我发现使用vscode+openocd+stlink,在特定时间手动按下电路上的nRST按键可以成功烧录。但是设置stm32f1x.cfg的reset_config各种组合都无效果。



----------
更新:
手动在终端使用telnet连接到openocd
依次输出一下命令:
> reset
> halt
> flash write_image erase <要下载的文件>
> reset
这样可以正常通过openocd+stlink烧录,所以问题出在vscode的Cortex-Debug插件上?但是同样的插件同样的使用方式淘宝买的开发板的芯片却一点问题都没有?以至于我无法分清是插件问题还是芯片问题(我以前的项目中使用STM32F405同样的插件环境没有出现过这种问题,同样是某创商城买的芯片)...

lub 发表于 2023-7-26 23:13:25

本帖最后由 lub 于 2023-7-26 23:29 编辑


为什么h7tool可以烧录,openocd+stlink却不行呢?都是swd接口,是不是实现步骤上有什么差别?
因为我注意到h7tool的上位机有“自动解除读写保护”的选项,是不是因为这个呢?

openocd报错结果是:
Error: timed out while waiting for target halted
Error: Target not halted
Error: failed erasing sectors 0 to 31
Error: flash_erase returned -304

lub 发表于 2023-7-26 23:29:01

为什么h7tool可以烧录,openocd+stlink却不行呢?都是swd接口,是不是实现步骤上有什么差别?
因为我注意到h7tool的上位机有“自动解除读写保护”的选项,是不是因为这个呢?

openocd报错结果是:
Error: timed out while waiting for target halted
Error: Target not halted
Error: failed erasing sectors 0 to 31
Error: flash_erase returned -304

eric2013 发表于 2023-7-27 06:40:54

帮顶,不了解这个问题。

xinchun 发表于 2023-7-27 15:34:52

可能是选项字节不一样,可以读出来看看

lub 发表于 2023-7-28 19:25:31

十分感谢各位老大哥的帮助和回复。{:34:}
我发现把CH340N串口转USB芯片吹下来就好了。但是奇怪的是:我使用某宝买的开发板的芯片却可以兼容没有问题(导致我误判了)。
而且之前F405项目也是这么用也没有问题(将CH340的nRST引脚直接连到STM32复位引脚)。
现在加个低压降的肖特基二极管指向CH340的nRST输出引脚应该就解决问题了(参考了一些串口一键下载电路)。
页: [1]
查看完整版本: H7tool可以烧录,openocd却不行