1.???? CH37x系列產(chǎn)品簡(jiǎn)介

1)???????? CH370USBHost功能接口芯片,并口、SPI接口通訊,通用USB主機(jī)接口,支持控制、批量、中斷、等時(shí)傳輸,支持12Mbps全速和1.5Mbps低速通訊,可操作Hub

2)???????? CH372USB Device功能接口芯片,并口通訊,通用USB設(shè)備接口,可配置內(nèi)置固件模式(自動(dòng)處理端點(diǎn)0所有事務(wù))或者外置固件模式,支持控制、批量、中斷傳輸,支持12Mbps全速通訊。

3)???????? CH374USB Host/Device功能接口芯片,并口/SPI通訊,支持控制、批量、中斷和同步傳輸,支持12Mbps全速和1.5Mbps低速通訊,內(nèi)置3端口Hub。

4)???????? CH375USB Host/Device功能接口芯片,設(shè)備功能與CH372完全兼容,并口/UART通訊,支持動(dòng)態(tài)切換主機(jī)與設(shè)備方式,內(nèi)置Mass Storage專(zhuān)用通訊協(xié)議固件,支持控制、批量和中斷傳輸,兼容USB2.0 ,支持12Mbps全速和1.5Mbps低速通訊。

5)???????? CH376USB Host/Device功能接口芯片,設(shè)備方式完全兼容CH372,主機(jī)方式基本兼容CH375,支持并口/SPI/UART通訊方式,支持動(dòng)態(tài)切換主機(jī)與設(shè)備方式,內(nèi)置Mass Storage專(zhuān)用通訊協(xié)議固件和FAT12/FAT16/FAT32文件系統(tǒng)管理固件,支持控制、批量和中斷傳輸,兼容USB2.0 ,支持12Mbps全速和1.5Mbps低速通訊。

6)???????? CH378USB Host/Device功能接口芯片,支持SPI/并口/串口通訊方式,主機(jī)功能專(zhuān)用于管理高速U盤(pán),SD卡。設(shè)備功能支持12Mbps全速和480Mbps高速USB通訊。

?RTX截圖未命名.png

1? CH37x產(chǎn)品簡(jiǎn)介與選型

?

2. 正常的U盤(pán)操作流程(375 USB Host操作U盤(pán)為例)

操作流程如圖1所示。文件名的創(chuàng)建更改、文件屬性的修改等操作類(lèi)似文件的讀寫(xiě)操作,可以參考相關(guān)芯片的EVT例程。

圖片.png

1? 375 USB Host操作U盤(pán)

?

3. 通用USB設(shè)備枚舉過(guò)程(CH375操作鍵盤(pán)為例)

1)???????? 總線復(fù)位(BUS Reset);

2)???????? 檢測(cè)設(shè)備速度,需根據(jù)設(shè)備速度決定是否需要切換芯片通訊速度到低速。(芯片默認(rèn)為全速)

3)???????? 獲取設(shè)備描述符(Get Device Descriptor);

4)???????? 可選,總線復(fù)位(Bus Reset),若總線復(fù)位,芯片通訊速度再次復(fù)位到全速,需根據(jù)設(shè)備速度決定是否需要切換芯片通訊速度到低速;

5)???????? 設(shè)置地址(Set Address)

6)???????? 獲取設(shè)備描述符(Get Device Descriptor);

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

8)???????? 獲取字符串描述符(Get String Descriptor),可選過(guò)程,若有字符串描述符,則根據(jù)字符串描述符索引號(hào)獲取相應(yīng)字符串描述符;

9)???????? 設(shè)置配置(Set Configuration)

/* 以下是設(shè)備類(lèi)命令或廠商命令相關(guān)過(guò)程*/

10)???? 獲取報(bào)告描述符(Get Report Descriptor),HID特有過(guò)程;

11)???? 設(shè)置空閑(Set Idle)HID特有過(guò)程;

12)???? 設(shè)置報(bào)告(Set Report)HID特有過(guò)程。

建議:某些不常用的設(shè)備描述符,或者廠商自定義描述符可以通過(guò)BUS Hound等抓包工具來(lái)抓包分析該設(shè)備的枚舉過(guò)程。

?

4. 模擬USB設(shè)備過(guò)程及注意點(diǎn)(375模擬HID鍵盤(pán)為例)

如圖2、圖3所示,初始化CH375之后,查詢CH375中斷狀態(tài),若有中斷發(fā)生,使用GET_STATUS命令獲取中斷狀態(tài)(CH375的設(shè)備方式與CH372完全兼容,具體操作流程參考CH372DS2.PDF)IN中斷上傳數(shù)據(jù),OUT中斷接收主機(jī)下傳數(shù)據(jù),SETUP中斷時(shí)根據(jù)相應(yīng)SETUP請(qǐng)求返回相應(yīng)數(shù)據(jù)。值得一提的是:

當(dāng)IN中斷到來(lái)時(shí),應(yīng)該在IN中斷發(fā)生后立即使用UNLOCK_USB命令釋放緩沖;

當(dāng)OUTSETUP中斷到來(lái),則應(yīng)用OUT中斷中使用RD_USB_DATA來(lái)讀取IN端點(diǎn)緩沖區(qū)數(shù)據(jù),并釋放緩沖(該命令包含釋放緩沖功能,不需額外使用UNLOCK_USB命令)。

對(duì)于任何一個(gè)CH372中斷,必須唯一對(duì)應(yīng)一個(gè)UNLOCK_USB命令或者RD_USB_DATA命令。中斷的框架大體如下流程圖所示,詳細(xì)可參考我司CH372EVT.ZIP下的CH372FRM.C文件。

圖片.png

2 CH375操作模擬鍵盤(pán)流程圖


圖片.png

3 CH375枚舉流程圖

?

關(guān)于CMD_UNLOCK_USB命令的相關(guān)解釋?zhuān)?/span>

該命令釋放當(dāng)前USB緩沖區(qū),CH37x向單片機(jī)請(qǐng)求中斷之前會(huì)鎖定當(dāng)前緩沖數(shù)據(jù),以防緩沖區(qū)被其他數(shù)據(jù)覆蓋,當(dāng)單片機(jī)讀取緩沖數(shù)據(jù)之后必需寫(xiě)CMD_UNLOCK_USB命令來(lái)解鎖釋放當(dāng)前緩沖區(qū)。所以,當(dāng)CH37x做設(shè)備時(shí),OUT中斷發(fā)生時(shí)應(yīng)讀取緩沖數(shù)據(jù)之后再解鎖緩沖,而IN中斷發(fā)生在緩沖數(shù)據(jù)發(fā)送之后,代表緩沖內(nèi)數(shù)據(jù)已空,應(yīng)先解鎖緩沖,再往緩沖內(nèi)寫(xiě)數(shù)據(jù)。