实验对象:官方 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 键)。