USB總線(xiàn)接口芯片CH371及其應用
摘要:CH371是一種新型USB通用總線(xiàn)接口芯片。利用該芯片可在不了解任何USB協(xié)議或固件程序甚至驅動(dòng)程序的情況下,輕松地將并口或串口產(chǎn)品升級到USB接口。文中介紹了該接口芯片的主要特點(diǎn)和引腳功能,給出了CH371與其它總線(xiàn)進(jìn)行接口的幾種應用電路,同時(shí)給出了CH371與MCS-51單片機的接口程序。
關(guān)鍵詞:USB 總線(xiàn)接口芯片 CH371 單片機
1 引言
CH371是一種USB總線(xiàn)通用接口芯片。該芯片具有8位數據總線(xiàn)以及讀、寫(xiě)、片選控制線(xiàn)和中斷輸出,可以方便地掛接到單片機、DSP、MCU等控制器的系統總線(xiàn)上;在計算機系統中,通過(guò)CH371的配套軟件可提供簡(jiǎn)潔易用的操作接口,從而使其與本地端的單片機通訊就如同讀寫(xiě)硬盤(pán)中的文件一樣簡(jiǎn)單。由于CH371屏蔽了USB通訊中的所有協(xié)議,因而可在計算機應用層與本地端控制器之間提供端對端的連接。在不需要了解任何USB協(xié)議或者固件程序甚于驅動(dòng)程序的情況下,就可輕松地將并口、串口產(chǎn)品升級到USB接口。
CH371的主要特點(diǎn)如下:
●屏蔽了USB協(xié)議,可在計算機應用層與本地端之間實(shí)現端對端的連接。
●具有單向數據流和請求加應答兩種通訊模式,并支持偽中斷。
●可自動(dòng)完成USB配置過(guò)程,完全不需要本地端控制器作任何處理。
●采用標準的USB1.1接口,即插即用,D+引腳內置上接電阻。
●內置4個(gè)端點(diǎn),支持USB的控制傳輸、批量傳輸、中斷傳輸。
●帶有通用Windows驅動(dòng)程序,可提供設備級接口和應用層接口。
●具有通用本地8位數據總線(xiàn),可用4線(xiàn)控制讀選通、寫(xiě)選通、片選輸入和中斷輸出。
●占用16個(gè)地址,可選擇直接地址方式或者復用地址方式。
●內置輸入輸出緩沖區,能以中斷方式通知本地端控制器傳輸數據。
●內置I2C主接口,因而應用層可以直接讀寫(xiě)外掛的I2C從設備。
●在主控方式下可以提供16根據輸入信號線(xiàn)或12根獨立控制的輸出信號線(xiàn)。
●內置上電復位電路,可提供高電平有效復位輸出和低電平有效復位輸出。
●內含可選的看門(mén)狗電路Watch-Dog,能為本地端控制器提供監控。
●具有DIP28、SOP28、DIP24、CHIP等多種封裝形式。
2 引腳功能
CH371的引腳排列如圖1所示,表1所列是其引腳功能。
表1 CH371的引腳功能
28腳封裝 的引腳號 | 24腳封裝 的引腳號 | 引腳名稱(chēng) | 類(lèi) 型 | 引 腳 說(shuō) 明 |
28 | 24 | VCC | 電源 | 電源正端 |
12 | 9 | GND | 電源 | 接地 |
14 | 11 | XI | 輸入 | 晶體振蕩輸入端,帶偏置電阻 |
13 | 10 | XO | 輸出 | 晶體振蕩反相輸出端 |
10 | 7 | D+ | 雙向 | USB D+數據線(xiàn),內置上拉電阻可控 |
11 | 8 | D- | 雙向 | USB D-數據線(xiàn) |
9 | 6 | OFF | 輸入 | 用于關(guān)閉D+上位電阻,高有效,帶下拉 |
2215 | 1912 | D7D0 | 雙向 | 8位雙向數據總線(xiàn),帶上拉,可直接輸入和獨立控制輸出 |
4 | 4 | RD | 輸入 | 讀選通輸入,低有效,帶上拉,同時(shí)用于看門(mén)狗的清除輸入 |
3 | 3 | WR | 輸入 | 寫(xiě)選通輸入,低有效,帶上拉 |
27 | 23 | CS | 輸入 | 片選輸入,低有效,帶下拉 |
2 | 2 | ALE | 輸入 | 地址鎖存使能,高有效,帶上拉,在下降沿可鎖存數據總線(xiàn)的復用地址 |
1 | 1 | INT | 輸出 | 中斷輸出,傳輸成功,低有效 |
58 | 5部分支持 | A3A0 | 雙向 | 4位地址輸入線(xiàn),帶上拉,可直接輸入和獨立控制輸出 |
24 | 21 | SCL | 輸出 | I2C接口時(shí)鐘線(xiàn) |
23 | 20 | SDA | 雙向 | I2C接口數據線(xiàn),開(kāi)漏輸出,帶上拉 |
25 | 22 | RST | 輸出 | 上電復位和看門(mén)狗復位,高有效 |
26 | 不支持 | RST | 輸出 | 上電復位和看門(mén)狗復位,低有效 |
3 應用
3.1 與USB總線(xiàn)的連接
圖2是CH371與USB總線(xiàn)的接口連接電路,CH371芯片可以直接使用USB總線(xiàn)的5V電源。電容C3和C4用于電源退耦;將電阻R1和R2串接在CH371與USB總線(xiàn)之間可進(jìn)行阻抗匹配;晶振X1、電容C1和C2用于CH371芯片的時(shí)鐘振蕩電路。CH371芯片的SCL和SDA信號線(xiàn)可以直接連接I2C接口的從設備,如連接24COX器件以用來(lái)存儲系統斷電后不能丟失的重要數據,也可以存儲身份識別數據、記費數據等,由于24COX中的數據只有計算機應用層才能夠存取。
3.2 與單片機的接口電路
CH371芯片具有通用的被動(dòng)并行接口,可以直接連接多種單片機、DSP和MCU。圖3所示是CH371與MCS-51系列單片機的接口電路,CH371可通過(guò)D7~D0、RD、WR、CS、ALE直接掛接到AT89C51的系統總線(xiàn)上。連接ALE而不連接A3~A0則采用復用地址方式,連接A3~A0而不連接ALE則采用直接地址方式。當采用復用地址方式時(shí),CH371的A3~A0腳空閑,此時(shí)可以參考主控方式將A3~A0用于LED驅動(dòng)或狀態(tài)輸入等;當采用直接地址方式時(shí),應該將CH371芯片的ALE引腳懸空或者接高電平,然后通過(guò)A3~A0直接輸入地址。該電路中,CH371可向AT89C51提供上電復位信號RST。CH371的中斷輸出INT連接到U2的外部中斷INTO,反相器U5用于簡(jiǎn)單的地址譯碼,SRAM器件62256的地址為8000H-FFFFH,CH371的地址為0000H-7FFFH(實(shí)際只需要16個(gè)地址)。
圖4是CH371在主控方式下的應用電路。該電路實(shí)際是基于CH371的主控方式設計的8通道數據采集器??梢钥闯觯喊–H371在內,該電路只用到了三個(gè)集成電路,并且不需要任何單片機、DSP、MCU等控制器。CH371芯片的雙向引腳A3~A0應該設置為輸出,其中A3用于以低電平啟動(dòng)模數轉換,A2~A0用于選擇采集通道,雙向引腳D7~D0應該設置為輸入,用于輸入采集到的結果,CS、ALE用于輸入采集狀態(tài)。實(shí)際電路應該采用精確的參考電壓,并添加輔助電路(如電源退耦電容等)。另外,也可以用自帶多通道選擇器的模數轉換芯片來(lái)代替U6和U7,如8通道AD芯片MAX158等。
3.4 與單片機的接口程序
下面是U2(MCS-51單片機)與U1(CH371)的接口參考程序:
;* * * * * * * * * * * * * * * * * * * * *
;需要主程序定義的參數
;CH371_PAGE EQU 00H;CH371所在的頁(yè)面地址,地址譯碼后自動(dòng)片選
;CH371_SYSTEM EQU 02H;CH371系統功能設定寄存器的地址偏移
;CH371_CONFIG EQU 02H;CH371設備配置信息寄存器的地址偏移
;CH371_INT_SET EQU 06H;CH371中斷數據設定寄存器的地址偏移
;CH371_STATUS EQU 06H;CH371傳輸狀態(tài)信息寄存器的地址偏移
;CH371_LENGTH EQU 07H;CH371數據長(cháng)度寄存器的地址偏移
;CH371_BUFFER EQU 08H;CH371O數據緩沖區的起始地址偏移
;SAVE_STATUS DATA 29H;保存傳輸狀態(tài)信息,根據需要可選
;SAVE_LENGTH DATA 2AH;當前數據緩沖區中的長(cháng)度,用于保存下傳長(cháng)度
;SAVE_BUFFER DATA 30H;數據緩沖區,用于保存接收到的下傳數據
;* * * * * * * * * * * * * * * * * * * * *
;初始化子程序
;USE:ACC,DPTR
CH371_INIT:MOV DPH,#CH371_PAGE
;CH371所在的頁(yè)面地址,地址譯碼后自動(dòng)片選MOV DPL,#CH371_LENGTH;CH371數據長(cháng)度寄存器的地址偏移
圖3
MOVX @DPTR,A;置上傳數據長(cháng)度寄存器為15,暫時(shí)沒(méi)有數據上傳
CLR A;尚未有數據下傳
MOV SAVE_LENGTH,A;保存下傳數據長(cháng)度
SETB ITO;置外部信號為下降沿觸發(fā)
CLR IEO;清中斷標志
SETB PXO;置高優(yōu)先級
SETB EXO;允許中斷
RET
;上傳數據子程序
;ENTRY:RO指向存放了準備上傳數據的緩沖區,R7準備上傳的數據長(cháng)度0至8
;USE:ACC,B,R0,R7,DPTR
CH371_UPLOAD:MOV B,R7;將數據長(cháng)度暫存到B中
MOV DPH,#CH371_PAGE;CH371所在的頁(yè)面地址,地址譯碼后自動(dòng)片選
MOV DPL,#CH371_BUFFER;CH371數據緩沖區的起始地址偏移
MOV A,R7;上傳數據長(cháng)度
JZ CH371_UPLOAD_O;數據長(cháng)度為0則不必寫(xiě)入
CH371_UPLOAD_1:MOV A,@RO;讀取一字節的數據
INC RO;指向下一個(gè)數據的地址
MOVX @DPTR,A;寫(xiě)到CH371的上傳數據緩沖區
INC DPL
DJNZ R7,CH371_UPLOAD-1;繼續讀取上傳數據直至結束
CH371_UPLOAD_0:MOV DPL,#CH371_LENGTH;CH371數據長(cháng)度寄存器的地址偏移
MOV A,B
MOVX @DPTR,A;將本次數據的長(cháng)度置入上傳數據長(cháng)度寄存器
RET
;中斷服務(wù)子程序
;USE:堆棧6字節,工作寄存器組1的RO,R7
CH371_INTER:PUSH PSW;現場(chǎng)保護
CLR IEO;清中斷標志,防止重復執行,對應于INTO中斷
PUSH ACC
PUSH DPL
PUSH DPH
SETB RSO;PSW.3,切換至工作寄存器組1
MOV DPH,#CH371_PAGE;CH371所在的頁(yè)面地址,地址譯碼后自動(dòng)片選
MOV DPL,#CH371_STATUS;CH371傳輸狀態(tài)信息寄存器的地址偏移
MOVX A,@DPTR;讀取傳輸狀態(tài)信息寄存器
MOV SAVE-STATUS,A;保存傳輸狀態(tài)
MOV DPL,#CH371_LENGTH;CH371數據長(cháng)度寄存器的地址偏移
JB ACC.0,CH371_INT_UP;傳輸狀態(tài)信息寄存器位0為1,則指示上傳完成
;是數據下傳完成中斷
MOVX A,@DPTR;讀取下傳數據長(cháng)度寄存器
MOV SAVE_LENGTH,A;保持下傳數據長(cháng)度
JZ CH371_INT_RET ;下傳數據長(cháng)度為0,則直接退出中斷
MOV DPL,#CH371_BUFFER;CH371數據緩沖區的起始地址偏移
MOV RO,#SAVE-BUFFER;單片機內部的數據緩沖區,用于存放下傳數據
MOV R7,A ;用于讀取數據的計數
CH371_INT_DOWN:MOVX A,@DPTR;讀取一字節的下傳數據
INC DPL ;指向下一個(gè)數據的地址
MOV @RO,A;保存到數據緩沖區
INC RO
DJNZ R7,CH371_INT_DOWN;繼續讀取下傳數據直至結束
SJMP CH371_INT_RET ;接收完下傳數據,退出中斷
;是數據上傳完成中斷
CH371_INT_UP:MOV A,#0FH;15
MOVX @DPTR,A ;置上傳數據長(cháng)度寄存器為15,暫時(shí)沒(méi)有后續數據
CH371_INT_RET: ;中斷返回
POP DPH
POP DPL
POP ACC
POP PSW ;恢復寄存器并選擇工作寄存器組0
RETI ;中斷返回
;
;* * * * * * * * * * * * * * * * * * * * *
4 結束語(yǔ)
CH371芯片具有通用的被動(dòng)并行接口,可以直接連接多種單片機、DSP、MCU等??梢灶A見(jiàn),CH371將在USB產(chǎn)品設計中大顯身手。
評論