WCHISPTool_CMD 烧录过程中多余的软复位

实验对象:官方 CH32V208 评估板 (带以太网),通过短路帽将 BOOT0 针 对地短接,BOOT1 针 对地短接。


通过 WCHISPTool 烧写:

1. 按住 Download 按键(BOOT0 置高 );

2. 通过电源开关(S1)重新上电;

3. 松开 Download 按键 (BOOT0 悬空 );

4. 此时 WCHISPTool 识别到可烧写设备,可以进入烧写流程;

5. 烧写完成后,因为有勾选“下载完成后执行软复位”选项,芯片复位,从 Code Flash 启动(BOOT0 = 0),开始执行烧录的程序。

符合预期。


但是在 Linux 下使用 WCHISPTool_CMD 烧录时,配置是从 WCHISPTool 导出的。如

`sudo WCHISPTool_CMD -p /dev/ch37x0 -c ./config.ini -o program -f ./GPIO_Toggle.hex`


如果对板子的操作步骤和上述相同,是无法操作成功的。怎么样才能成功呢?


在第2步上电以后,不能松开 Download 按键,需要保持 BOOT0 置高,再执行命令,这样就可以烧录成功。但是即便烧录成功,用户程序也不会立即执行。因为哪怕有“下载完成后执行软复位”,此时复位依然是从 System Flash 启动,因为 BOOT0 为高。


所以要看程序执行效果,只能松开 Download 按键,再按 Reset 复位到 Code Flash 启动,才会执行用户程序。


标题所说的区别就在于此,估计 WCHISPTool_CMD 烧录过程中有执行软复位。而复位后因为BOOT0=0,芯片就不是从 system flash 启动,导致后续相关操作失败。而 WCHISPTool_CMD 没有像 WCHISPTool 有详细的过程,只要过程中报错,就一定按失败处理,缺少过程信息。但实际上这个错误发生在中间某次(多余的)软复位后。


=====ISP_Command_Tool=====

TOOL VERSION:  V3.60

p:/dev/ch37x0
b:0
v:0
c:./config.ini
o:0
f:./GPIO_Toggle.hex

{"Device":/dev/ch37x0", "Status":"Fail", "Code":6, "Message":"Fail to find any valid isp device"}

而 WCHISPTool 的烧录过程中,只有在最后才触发软复位,没有这个问题。


补充:这个问题是在学习 CH32V208 过程中发现,ch583 使用 WCHISPTool_CMD 烧录,没有这个问题(不需要一直按住 Download 键)。


您好,如上现象中使用V3.6工具版本,未更改程序的情况下针对部分CH32系列芯片工具会自动对设备FLASH解保护然后复位一次。可尝试更新下工具:https://www.wch.cn/downloads/WCHISPTool_CMD_ZIP.html 

如需解保护,命令参数里可单独添加 "-r" 选项。


谢谢确认。


https://www.wch.cn/downloads/WCHISPTool_CMD_ZIP.html 目前提供的是 3.7 版本。


增加 '-r 1' 可以实现烧录:


`sudo WCHISPTool_CMD -p /dev/ch37x0 -c ./config.ini -r 1 -o program -f ./GPIO_Toggle.hex`


=====ISP_Command_Tool=====

TOOL VERSION:  V3.70

p:/dev/ch37x0
b:0
v:0
c:../../isp/config.ini
o:0
f:dist/GPIO_Toggle.hex
r:1

{"Device":"/dev/ch37x0","Status":"Ready"}
{"Device":"/dev/ch37x0", "Status":"Programming", "Progress":100%}
{"Device":/dev/ch37x0", "Status":"Finished", "Code":0,"Message":"Succeed"}

如果不带 '-r 1',则 r 为 默认的0,会出现


`sudo WCHISPTool_CMD -p /dev/ch37x0 -c ./config.ini -o program -f ./GPIO_Toggle.hex`


=====ISP_Command_Tool=====

TOOL VERSION:  V3.70

p:/dev/ch37x0
b:0
v:0
c:../../isp/config.ini
o:0
f:dist/GPIO_Toggle.hex
r:0

{"Device":"/dev/ch37x0","Status":"Ready"}
{"Device":/dev/ch37x0", "Status":"Fail", "Code":13, "Message":"Fail to download"}

不过烧录全程都需要按住 Download(BOOT0=1)。


我个人觉得我所说的“多余的”软复位并不是发生在解除保护的动作之后,而是发生在擦除 Flash 之后。而 WCHISPTool 不会这样。


另外,如何下载历史版本的 WCHISPTool_CMD_ZIP ? 如 3.6?


使用 WCHISPTool_CMD 3.7。如果 config.ini 中 IsCodeProtect=0 ,字面意思为关闭代码保护。


那么在接下来的烧录中 WCHISPTool_CMD,都可以直接完成烧录,而且 Download 按键在手动复位后就可以松开,烧录完成后软复位后自动开始执行用户代码。(效果和WCHISPTool 相同,符合预期)


另外,这里所谓的"保护"具体指的是什么?

反正即便“保护”了,用 isp 工具说解就解了,不是么?



如上保护具体是指FLASH写入保护,取决于芯片上一次烧录完成后是否开启了保护,如开启,则下一次烧录代码需要先解除保护再使用。


只有登录才能回复,可以选择微信账号登录