1.     CH37x系列产品简介

1)         CH370USBHost功能接口芯片,并口、SPI接口通讯,通用USB主机接口,支持控制、批量、中断、等时传输,支持12Mbps全速和1.5Mbps低速通讯,可操作Hub

2)         CH372USB Device功能接口芯片,并口通讯,通用USB设备接口,可配置内置固件模式(自动处理端点0所有事务)或者外置固件模式,支持控制、批量、中断传输,支持12Mbps全速通讯。

3)         CH374USB Host/Device功能接口芯片,并口/SPI通讯,支持控制、批量、中断和同步传输,支持12Mbps全速和1.5Mbps低速通讯,内置3端口Hub

4)         CH375USB Host/Device功能接口芯片,设备功能与CH372完全兼容,并口/UART通讯,支持动态切换主机与设备方式,内置Mass Storage专用通讯协议固件,支持控制、批量和中断传输,兼容USB2.0 ,支持12Mbps全速和1.5Mbps低速通讯。

5)         CH376USB Host/Device功能接口芯片,设备方式完全兼容CH372,主机方式基本兼容CH375,支持并口/SPI/UART通讯方式,支持动态切换主机与设备方式,内置Mass Storage专用通讯协议固件和FAT12/FAT16/FAT32文件系统管理固件,支持控制、批量和中断传输,兼容USB2.0 ,支持12Mbps全速和1.5Mbps低速通讯。

6)         CH378USB Host/Device功能接口芯片,支持SPI/并口/串口通讯方式,主机功能专用于管理高速U盘,SD卡。设备功能支持12Mbps全速和480Mbps高速USB通讯。

 RTX截图未命名.png

1  CH37x产品简介与选型

 

2. 正常的U盘操作流程(375 USB Host操作U盘为例)

操作流程如图1所示。文件名的创建更改、文件属性的修改等操作类似文件的读写操作,可以参考相关芯片的EVT例程。

图片.png

1  375 USB Host操作U

 

3. 通用USB设备枚举过程(CH375操作键盘为例)

1)         总线复位(BUS Reset)

2)         检测设备速度,需根据设备速度决定是否需要切换芯片通讯速度到低速。(芯片默认为全速)

3)         获取设备描述符(Get Device Descriptor)

4)         可选,总线复位(Bus Reset),若总线复位,芯片通讯速度再次复位到全速,需根据设备速度决定是否需要切换芯片通讯速度到低速;

5)         设置地址(Set Address)

6)         获取设备描述符(Get Device Descriptor)

7)         获取配置描述符集合(Get Configuration Descriptor)

8)         获取字符串描述符(Get String Descriptor),可选过程,若有字符串描述符,则根据字符串描述符索引号获取相应字符串描述符;

9)         设置配置(Set Configuration)

/* 以下是设备类命令或厂商命令相关过程*/

10)     获取报告描述符(Get Report Descriptor)HID特有过程;

11)     设置空闲(Set Idle)HID特有过程;

12)     设置报告(Set Report)HID特有过程。

建议:某些不常用的设备描述符,或者厂商自定义描述符可以通过BUS Hound等抓包工具来抓包分析该设备的枚举过程。

 

4. 模拟USB设备过程及注意点(375模拟HID键盘为例)

如图2、图3所示,初始化CH375之后,查询CH375中断状态,若有中断发生,使用GET_STATUS命令获取中断状态(CH375的设备方式与CH372完全兼容,具体操作流程参考CH372DS2.PDF)IN中断上传数据,OUT中断接收主机下传数据,SETUP中断时根据相应SETUP请求返回相应数据。值得一提的是:

IN中断到来时,应该在IN中断发生后立即使用UNLOCK_USB命令释放缓冲;

OUTSETUP中断到来,则应用OUT中断中使用RD_USB_DATA来读取IN端点缓冲区数据,并释放缓冲(该命令包含释放缓冲功能,不需额外使用UNLOCK_USB命令)

对于任何一个CH372中断,必须唯一对应一个UNLOCK_USB命令或者RD_USB_DATA命令。中断的框架大体如下流程图所示,详细可参考我司CH372EVT.ZIP下的CH372FRM.C文件。

图片.png

2 CH375操作模拟键盘流程图


图片.png

3 CH375枚举流程图

 

关于CMD_UNLOCK_USB命令的相关解释:

该命令释放当前USB缓冲区,CH37x向单片机请求中断之前会锁定当前缓冲数据,以防缓冲区被其他数据覆盖,当单片机读取缓冲数据之后必需写CMD_UNLOCK_USB命令来解锁释放当前缓冲区。所以,当CH37x做设备时,OUT中断发生时应读取缓冲数据之后再解锁缓冲,而IN中断发生在缓冲数据发送之后,代表缓冲内数据已空,应先解锁缓冲,再往缓冲内写数据。