本文目的
- 本文主要分享wch的CH57x,ch58x 系列的risc-v芯片的在线仿真相关方法,以及注意事项
适用芯片
- CH573/CH571
- CH583/CH582/CH581
(本文不适适用ARM-M0的CH579/578/577,这类芯片可参考:https://www.cnblogs.com/iot-fan/p/14922920.html)
软件环境
- 本文使用MountRiver Studio:http://www.mounriver.com/
- GDB命令行大佬,本文仅作参考
支持的仿真工具
- WCH-link(base on CH549)
- WCH-linkE(base on CH32V305)
(注意这里的仿真协议为wch 专有协议,非arm-swd协议,所以只能适用wch提供的WCH-link 进行仿真,不支持其他第三方的工具)
注意事项
- 使用USB/UART下载后 SWD下载会自动关闭,如需要使用需要再次打开;
- 低功耗下,SWD会被禁用,导致芯片不能响应SWD,从而下载/调试失败;
- WCH-link版本跟MRS的版本是强相关的
无法通过SWD或者在应用程序关闭SWD,需要在wchisp工具中关闭,所以强烈不建议使用SWD去做批量生产(不建议使用SWD 做生产烧录)
使用步骤
1.使能芯片的仿真
默认的芯片是开启仿真功能的,但是一旦经过ISP工具下载后,仿真功能就会关闭,所以一般来说,我们需要先要在ISP模式下使能芯片的仿真功能:
如果ISP进入方法,以及问题排查,可以参考文章:https://www.cnblogs.com/iot-fan/p/13498088.html
2.硬件链接
CH573/571 58x 系列芯片仿真器连接的IO在PB14/PB15上,分别对应:
- PB14 TIO 即为SWDIO
- PB15 TCK 即为SWCLK
- 电源
3.调试器插入电脑
设备管理器显示下面两个设备,无叹号,表示识别成功,否则请按照 (>MounRiver_Studio\ExTool\WCH-Link使用说明.pdf 排查问题)
4.调试
连接好硬件后,点击工程上面的仿真按钮启动仿真.
(速度比较慢,大概只有几K 一秒,如果是BLE的工程动辄100多个K,这一步可能需要等待几十秒(wch-link2.1 版本后速度似乎提高了不少,有8k那样) ,所以调试BLE工程不到万不得已,一般不使用在线仿真)
(在一些时序要求严格的场景,往往也不好用仿真,比如USB通信,BLE通信, 一旦打个端点,通信时序就异常了)
上面的过程无问题,会弹出下面的界面:
5.使用SWD只下载
6.重设调试配置
问题排查
1.CH581/582/583 下了某个代码后再也下不进去代码了,就像线没连好一样.
有时候,我们因为低功耗,或者其他原因,导致CH583/582/581 的SWD被禁用或者干扰到了,导致SWD 一直连接不上,这时候我们需要把之前的代码破坏掉,阻止其运行后就可以恢复仿真:
1>,进入isp下载模式,使用WCHisptool 下载一个任意的HEX/或者bin文件,然后芯片会关闭仿真;
2>,再次进入isp下载模式,再次使能芯片的仿真,这时候从非仿真到仿真模式,flash代码会进行清空,这时候影响swd下载的代码就会被清掉啦.
*>,(已经跟wch联系过,后面wchisptool进入仿真可能会加入强制擦除flash,这样我们只需再次点使能仿真就可以了)
2.外设的寄存器看不到
有时候,调试的时候,我们看不到芯片的寄存器的值,这时候可能是debug配置有问题,可以按照下面去添加SVD文件即可
MounRiver Studio IDE 提供的SVD文件默认路径参考:
./MounRiver_Studio/template/wizard/WCH/ARM/CH32F103/NoneOS/CH32F103xx.svd
./MounRiver_Studio/template/wizard/WCH/ARM/CH56X/NoneOS/CH56Xxx.svd
./MounRiver_Studio/template/wizard/WCH/ARM/CH57X/NoneOS/CH57Xxx.svd
./MounRiver_Studio/template/wizard/WCH/RISC-V/CH32V103/NoneOS/CH32V103xx.svd
./MounRiver_Studio/template/wizard/WCH/RISC-V/CH32V303/NoneOS/CH32V303xx.svd
./MounRiver_Studio/template/wizard/WCH/RISC-V/CH32V305/NoneOS/CH32V305xx.svd
./MounRiver_Studio/template/wizard/WCH/RISC-V/CH32V307/NoneOS/CH32V307xx.svd
./MounRiver_Studio/template/wizard/WCH/RISC-V/CH56X/NoneOS/CH56Xxx.svd
./MounRiver_Studio/template/wizard/WCH/RISC-V/CH57X/NoneOS/CH57Xxx.svd
./MounRiver_Studio/template/wizard/WCH/RISC-V/CH58X/NoneOS/CH58Xxx.svd
然我我们重新进行仿真,即可看到外设寄存器信息啦