本文主要是对于wch ch57x,ch58x系列芯片的固件烧录方式进行说明
本文使用以下芯片
- CH577/CH578/CH579
- CH571/CH573
- CH581/CH583
- CH591/CH592
- 其他CH5xx 系列芯片,仅供参考
阅读本文时建议同时参考 CH579/CH57x/CH582/CH573/CH571 硬件设计
固件烧录
ISP烧录
ISP支持的方式
- USB
- UART
ISP工具获取
工具说明
下载步骤
USB下载连接和步骤
ISP下载模式通过USB下载
- USB识别需要装驱动,用到的是CH372的驱动,在安装WCHISPTool_Setup_exe时候,会自动安装该驱动,在isp识别后,设备管理器通常会出现一个USB Module 设备
- 使用USB进行ISP是WCH 推荐的方式,包括批量生产.
USB下载上位机不识别?
- 设备管理器没有"USB Module"设备: 重新安装wchisptool 工具,安装过程中会安装对应的驱动,或者直接安装CH372的驱动.
- 设备管理器有"USB Module"设备,但是叹号: 在win7下可能会有设备管理器出现黄色叹号的问题,这通常是是win7没有打microsoft新版本数字签名补丁导致的,可下载相关的补丁安装:win7_64bit_update_KB3033929,或者关闭数字签名;
- 描述符错误/无法识别的USB设备: 检查硬件设计,如USB是否有短路,晶体是否贴错(CH573/CH571/CH58x/CH59x 必须32M晶体),以及供电是否有按照官方的原理图进行设计,尤其要看VINTA引脚是否在1.05v附近.
- 设备管理器没有任何动静:
1. 上电时候ISP 没有检测到有效的 进入ISP模式的标志.
2. 数据线可能是只能充电,不能当数据线用,一些劣质的"数据线",只有电源不能用于传输数据;
3. 硬件要能够满足进bootloader下载的条件,比如CH577/578/579 bootloader>=2.8的情况下, 外部复位引脚的电容不能大于10nF,CH573/CH583系列必须要焊接高频32M晶体等.具体可参考ch579/ch573/ch57x 硬件设计
4. 芯片供电一定不要超过芯片的供电范围,比如有时候不小心可能供电了5v,导致芯片损坏,这时候我们需要换个芯片
串口下载连接和步骤
ISP下载模式通过UART下载
- 默认波特率为115200
- CH577/CH578/CH579在bootloader2.8版本开始,支持1M和2M波特率下载
- 新版本的CH571/CH573也支持1M和2M波特率下载
- 如果选择了"串口免按键下载",芯片在上电时候 会额外等待40ms 等待串口下载握手,如果握手成功,就会继续等待下载
UART下载上位机不识别?
- 跟usb下载一样,上电时候需要触发,如CH573F,默认是上电检测PB22,低电平有效,其他芯片见上面: 上电进入ISP升级的方式
- UART 的TX 没有数据时候是高电平,通常是push-pull输出,这就存在对外部设备供电的可能, 而芯片进入isp模式又是上电时候检测,如果引文这种串口TX灌电,导致芯片没有有效断电产生上电复位,这就会导致进不去ISP下载模式,这种情况,临时可以TX,RX端串联2K的电阻,大大降低这种风险.
- 检查硬件设计,如晶体是否贴错(CH573/CH571/CH58x/CH59x 必须32M晶体),以及供电是否有按照官方的原理图进行设计,尤其要看VINTA引脚是否在1.05v附近.
- UART一定要是 TTL的电平,切记不能使用RS232,虽然这是比较常识的问题,写这里就当凑字数吧,虽然大家应该不会犯这种低级错误.
高波特率烧录失败
- 低版本bootloader的芯片,不支持高波特率,只支持115200
- 实际选用的串口不支持高波特率,比如CP2102 设置1Mbps的波特率,实际上是921600bps
- 条件允许下,尽可能的用高性能的烧录串口芯片如CH343,CH910x,CP2102N等
ISP的原理
- ISP烧录就是,芯片通过某些方式进入芯片内部预置的ISP升级程序,开启升级功能,然后与外部通信,然后通过相关的协议,完成程序区的擦除,写入,校验和相关的配置等一些列操作的过程.
- wch的芯片,上电复位后,都会默认进入ISP,进行检测,是否进入ISP.
上电进入ISP升级的方式
系列 | 芯片 | USB下载IO | 串口下载IO(注1) | 默认进ISP模式IO(注3) | 进入ISP检测时机 | 可选进ISP IO(注4) | 备注 |
---|---|---|---|---|---|---|---|
ch57x_gen1 | CH579M/578M/579F/577F | PB10_D- /PB11_D+ | PA8_RX/PA9_TX | PB22 低电平 | 上电复位后 | PB11 高电平 | |
CH578F | 不支持 | PA8_RX/PA9_TX | PB22 低电平 | 上电复位后 | PB11 高电平 | ||
ch57x_gen2 | CH573F/571F/571R | PB10_D- /PB11_D+ | PA8_RX/PA9_TX | PB22 低电平 | 上电复位后 | PB11 高电平 | |
CH571K | 不支持 | PA15_RX/PA14_TX | 不支持 | 上电复位后 | 不支持 | 串口免按键下载,上电时候强制等待40ms下载握手 | |
ch58x_gen1 | CH583M/582M/582F | PB10_D- /PB11_D+ | PA8_RX/PA9_TX | PB22 低电平 | 上电复位后 | PB11 高电平 | CH58x 的USB2 也支持USB ISP |
ch58x_gen2 | CH585M/584M | PB10_D-/PB11_D+ | PA8_RX/PA9_TX,PA15_RX/PA14_TX | PB22 低电平 | 上电复位后 | PB11 高电平 | |
CH585F/584F | PB10_D-/PB11_D+ | PB12_RX/PB13_TX,PA15_RX/PA14_TX | PB22 低电平 | 上电复位后 | PB11 高电平 | ||
CH585C | PB10_D-/PB11_D+ | PB12_RX/PB13_TX,PA15_RX/PA14_TX | PB22 低电平 | 上电复位后 | PB11 高电平 | ||
ch59x_gen1 | CH592X/592F/592A/591R | PB10_D-/PB11_D+ | PB12_RX/PB13_TX | PB22 低电平 | 上电复位后 | PB11 高电平 | |
CH591D | PB10_D-/PB11_D+ | PA8_RX/PA9_TX | PB7 低电平 | 上电复位后 | PB11 高电平 | ||
CH592D | PB10_D-/PB11_D+ | PB12_RX/PB13_TX | PB15 低电平 | 上电复位后 | PB11 高电平 | 部分GPIO与CH591D不兼容 |
注1: 芯片亦支持 在ISP检测时候,通过串口的命令检测(所谓的 "串口免按键下载"),但是这个过程非常短暂,通常只有几十ms.
注2: WCH的芯片,在flash 的0地址为0xffffffff时候(通常是空白的芯片),则上电会停留在ISP中,而不会跳转,所以全新的芯片上电后第一次会进bootloader,即使没有控制ISP io.
注3: 芯片仅当在上电复位后才会检测ISP引脚,检测时候,芯片会开启对应的内部上拉或者下拉
注4: 默认不支持,需要在ISP下载时候修改, 然后芯片重新上电生效
WCHISP 工具注意事项
- HEX文件和bin文件的处理问题:
- wchisptool 工具可以下载bin文件和hex文件,但是最终都是转换为bin文件下载
- 涉及到hex转bin 就存在当hex描述的内容不连续时候,数据填充问题, 对于ch57x/ch58x系列的芯片下载时候 wchisptool的处理方式是:其hex转bin在不连续的地方是填充是0x00,这和大多数的hex转bin的实现方式可能不太一样.
- 仍然是wchisptool 的hex转bin下载的问题,对于hex如果不是从0地址开始的,wchisp的逻辑是从0地址开始填充0x00转成bin后再下载.
- 鉴于上面两种方式, 建议客户在做ota,或者分布固件时候,用自己的工具,转换成从0地址起始的bin文件进行下载,从而避免不同的填充方式导致可能带来的校验问题.
其他下载方式
CH578M/CH579M使用 ARM-SWD下载
(仅支持ARM内核的CH579M/578M,不支持RISC-V的CH573/CH571)
其他诸如调试,或者在keil里面下载参考 https://www.cnblogs.com/iot-fan/p/14922920.html
芯片支持兼容ARM-SWD协议的一些工具已经测试的工具包括:
已经测试过的支持的工具
- jlink
- daplink
- st-link
ARM-SWD下载注意事项
- 对于ch577/ch578/ch579 只有芯片直接的bootloader版本在2.5以后,才能开启swd 成功,之前的版本不行
- SWD可以用官方的ISP工具(需要V2.8版本以上)去手动打开,点击打开后,芯片之前的flash会被清空,然后芯片会自动软重启
- SWD打开后,对应的IO不能被程序控制
- 使用USB/UART下载后 SWD下载会自动关闭,如需要使用需要再次打开
- 低功耗下,SWD会被禁用,导致芯片不能响应SWD,从而下载失败
- 不是所有的芯片SWD引脚都被引了出来
其他资源:
- 使用J-FLASH下载的方法见 使用J-flash/jlink操作CH32F10x/CH578/CH579等WCH芯片
- WCH官方论坛离线下载资料和说明:https://www.wch.cn/bbs/thread-73750-1.html