- 選型
型號 |
接口 |
功能 |
備注 |
電源 |
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