1.???? CH37x系列產(chǎn)品簡(jiǎn)介
1)???????? CH370:USBHost功能接口芯片,并口、SPI接口通訊,通用USB主機(jī)接口,支持控制、批量、中斷、等時(shí)傳輸,支持12Mbps全速和1.5Mbps低速通訊,可操作Hub。
2)???????? CH372:USB Device功能接口芯片,并口通訊,通用USB設(shè)備接口,可配置內(nèi)置固件模式(自動(dòng)處理端點(diǎn)0所有事務(wù))或者外置固件模式,支持控制、批量、中斷傳輸,支持12Mbps全速通訊。
3)???????? CH374:USB Host/Device功能接口芯片,并口/SPI通訊,支持控制、批量、中斷和同步傳輸,支持12Mbps全速和1.5Mbps低速通訊,內(nèi)置3端口Hub。
4)???????? CH375:USB Host/Device功能接口芯片,設(shè)備功能與CH372完全兼容,并口/UART通訊,支持動(dòng)態(tài)切換主機(jī)與設(shè)備方式,內(nèi)置Mass Storage專(zhuān)用通訊協(xié)議固件,支持控制、批量和中斷傳輸,兼容USB2.0 ,支持12Mbps全速和1.5Mbps低速通訊。
5)???????? CH376:USB 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)???????? CH378:USB Host/Device功能接口芯片,支持SPI/并口/串口通訊方式,主機(jī)功能專(zhuān)用于管理高速U盤(pán),SD卡。設(shè)備功能支持12Mbps全速和480Mbps高速USB通訊。
?
表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例程。
圖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)OUT或SETUP中斷到來(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文件。
圖2 CH375操作模擬鍵盤(pán)流程圖
圖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ù)。