WCH沁恒 CH37系列芯片选型以及常见问题的处理(CH376/CH378)
- 选型
型号 |
接口 |
功能 |
备注 |
电源 |
CH372 |
并口 |
USB_Device |
全速 USB 设备接口,兼容 USB V2.0 |
3.1-3.6 4.2-5.4 |
CH374 |
SPI/并口 |
Host/Device都可以,F/U封装可以扩3个USB口 |
支持 1.5Mbps 低速和 12Mbps 全速 USB 通讯,兼容 USB V2.0 |
3.0-3.6 4.4-5.3
|
CH375 |
并口/串口(只能在USB_HOST下使用) |
Host/Device |
支持 1.5Mbps 低速和 12Mbps 全速 USB 通讯,兼容 USB V2.0。作为设备兼容CH372 |
3.1-3.6 4.2-5.4 |
CH376 |
SPI/串口/并口 |
主要做U盘、SD卡读写。USB为低速/全速 |
支持 1.5Mbps 低速和 12Mbps 全速 USB 通讯,兼容 USB V2.0 |
3.0-3.6 4.3-5.3
|
CH378 |
SPI/串口/并口 |
主要做U盘、SD卡读写。USB为全速/高速 |
支持USB2.0全速以及USB2.0高速。 |
V33:2.7-3.6 V18:1.65-1.95 |
CH370 |
SPI/并口 |
USB_Host |
支持 1.5Mbps 低速和 12Mbps 全速 USB 通讯,兼容 USB V2.0 |
支持 5V 电源电压和 3.3V 电源电压,内置电源上电复位。CH370V 只支持 3.3V 电源电压。
3.0-3.6 4.5-5.3 |
注释:CH37x电源有两个范围(除了CH378为两个电源供电),电源典型值分别为3.3V和5V。不同的供电电压,芯片的最小系统原理图是不一样的。最明显的区别在于V3脚的链接处理。在5V供电的时候,V3脚连接0.01uF的退耦电容到地即可;在3.3V供电的时候,V3脚需要连接到VCC。具体可以看下面两个原理图。红框部分很明显的区别。
2. CH37x系列的芯片很多,上面的表格分类也是只把一些基础的信息放在了上面。但是具体项目的时候该怎么选择。
1. CH370
这个芯片只有主机功能
2. CH372
这个是WCH一颗比较经典的芯片,主要功能就是作为一个USB_Device与电脑或者USB_Host链接实现USB数据的传输的,因为接口是使用的并口,所以占用的IO数量比较多,可以使用STM32的FSMC去控制。使用CH372作为USB_Device拓展,电脑装上CH372驱动后,可再PC端识别为CH372设备,简单实现数据上下传。
3.CH374
CH374这个芯片有两个版本,一个是普通的CH374T等封装,这个就是一个SPI、串口、并口去扩展一个USB2.0全速Host/Device的USB接口芯片。而CH374F,CH374U是有Hub根集线器的一个USB扩展芯片。即实现SPI/并口去扩展出3个USB口,类似于HUB扩展的功能,不过是接口扩展USB。可以实现单片机通过374扩展出USB_Host,然后去识别键鼠、打印机、CDC设备、游戏手柄等等。这边从枚举到数据传输,都需要用户根据电脑枚举这些设备的步骤去模拟。CH374也可以作为Device使用,芯片作为设备有两个模式选择,一个是内置固件模式,再USB_Mode设置这边选择这个内置固件模式后,芯片即可自动完成CH372设备的枚举过程。如果需要做其它的设备,则需要用户选择外置固件模式,自己去做设备的枚举以及后续数据的传输。
4.CH376/CH378
目前CH376的版本号为:0x45;
目前CH378的版本号为:0x42;
这两个芯片主要是被用作U盘或者SD卡的读写。对于不想在自己MCU代码里面加入FATFS以及USB开发的工程师而言,是一个不错的选择。
两颗芯片的主要功能基本都是一样的。区别就在于速度以及模式上的区别。CH376的USB为低、全速,而CH378的USB接口为高速。与主控芯片连接的接口方面CH378的接口速度大于CH376,所以实际文件传输方面,速度会略快于CH376。
USB模式方面,两颗芯片都可以做USB_Device以及USB_Host。USB_Device也拥有内置固件模式(及无需用户做USB设备枚举阶段的代码,PC安装372驱动),PC端的设备管理器就能识别出一个372设备没用于USB数据的批量上下传。外置固件模式,就是使用者自己做好枚举的过程(使用者自己将CH37x系列的USB在电脑端识别为HID、CDC、大容量设备等)。主机模式都是一样的,实现对U盘或者SD卡的读写(比较简单)。也可以实现对对键鼠的识别等。最大的区别在于,0x43固件版本的CH378加入了读卡器模式(08H),设置完模式之后,就可以实现读卡器功能,在PC上识别出存储设备,并进行读写操作。
3. 常见问题
CH376/CH378
1. 接口通讯不正常,无法对芯片进行操作
答:遇到这个问题,首先需要判断硬件上是否正确。检查芯片的电源脚是否在手册需求范围之内,CH376的V3脚硬件设计区别(根据芯片供电电压有区别,在文章上面有详细说明)。看晶振是否起振,芯片的复位引脚电平是否正确,以及接口选择相关的引脚电平是否正确。其次看一下接口通讯的时序是否满足手册的需求。例如SPI时序,CS片选信号需要按照手册需求来。如下图:在一个CS拉低的边沿里面完成了命令,数据的发送,以及读取。
2. 磁盘初始化过不去,U盘无法实现读写
答:检查以下几点:(1)接口通讯是否正常,不正常就看上面第一条。(2)看一下U盘,U盘的文件格式是否满足FAT12/FAT16/FAT32;存储容量大小满足小于等于32GB的需求。如果是USB3.0的U盘,需要确认那个U盘可以插入2.0的接口。然后还有一个比较重要的是,如果用户使用的U盘是做过系统盘的,那么需要使用第三方的格式化工具把U盘格式化后,在把文件系统改为CH37x要求的配置。
3. 有关于CH376/CH378串口通讯,波特率修改的相关问题。
答:两颗芯片如果是使用串口接口进行通讯的话,会涉及到波特率的设置。设置有两种方式:
(1)上电时,芯片部分引脚的高低电平设置。
对于CH376,会在上电的时候检测SDI/D6,SCK/D5,以及BZ/D4三个引脚的电平状态,从而修改默认的串行通讯波特率。
对于CH378,会在上电的时候检测SDI,SDO,以及SCK三个引脚的电平状态,从而修改默认的串行通讯波特率。
(2)串口命令修改波特率
两颗芯片都是支持以硬件默认波特率上电,通过CMD_SET_BAUDRATE命令去设置后续的串口通讯波特率,在设置完串口波特率之后,需要尽快在1ms以内将对应通讯主控芯片的串口波特率也设置到相同。
以下为CH376设置的值
CH378相对复杂一点,不过总体的流程都是类似的。
在代码方面,以STM32的程序为例,大概流程如下:
首先发送设置波特率的命令,然后发送对应的波特率的值,03 cc按照CH376的手册对应给的就是115200波特率。再修改完CH376的波特率之后,立刻修改STM32F103的串口波特率,最后读取返回值是否正确,正确则表示双方波特率修改成功。
4. CH376/CH378初始化都没有问题,但是创建文件出错,或者创建文件,写入数据后,实际里面没有内容。
答:这个问题,一般是使用者没有按照手册需求创建短文件名,或者创建函数写的有一些问题导致的。
需求:路径名首字符必须是斜杠/或者\,所有字符必须是大写字母、数字或者中文汉字以及某些特殊字符,文件名长度不超过11个字符:8字符长度主文件名 . 扩展名不超过3字符。长文件名另外考虑。可以参考沁恒官方例程EXAM11。或者在个人Gitee上下载STM32F103创建长文件名的驱动代码(暂时还未上传)。
下面是SPI时序下,控制CH378与STM32芯片通讯创建文件的时序,提供参考。
5. 相关测试工具
答:在WCH官网下载CH376EVT。里面有一个检测CH376是否正常工作的软件
4. 眼图测试
USB的眼图测试是由一套详细的规范要求的。测试框图如下:
测试框图如上图。
5. CH376磁盘容量获取U盘容量大小运算
使用函数CH376DiskCapacity();实现读取U盘容量,读出的数值为扇区的数量,例如读取一个28.8GB的U盘,读出的扇区数为60620799
60620799*扇区字节512/10241024/1024=28.8GB