基于USB接口的數(shù)據(jù)通信演示板的軟硬件實現(xiàn)方案
——
在開發(fā)USB設(shè)備時最難的就是固件和驅(qū)動程序的開發(fā),要想成功的開發(fā)這兩部分必須完全熟悉USB協(xié)議,而這至少需要五到六個月的時間。南京沁恒公司的CH371芯片是一塊屏蔽了USB協(xié)議的接口芯片,該芯片固化了設(shè)備驅(qū)動程序和單片機(jī)程序中的協(xié)議處理部分,因此不需要去了解復(fù)雜的設(shè)備驅(qū)動程序和USB協(xié)議,大大減少了開發(fā)周期,也降低了開發(fā)難度。本文介紹的演示板就是基于該公司的CH371和CH451芯片的一個簡單USB外設(shè),通過這塊演示板,不僅可以了解基于USB接口的基本結(jié)構(gòu),而且還可以熟悉基于這種接口的PC和單片機(jī)通信的單片機(jī)控制程序和計算機(jī)應(yīng)用程序的編寫。
芯片介紹
USB接口芯片CH371
CH371是一個USB 總線的通用接口芯片。在本地端,CH371 具有8位數(shù)據(jù)總線和讀、寫、片選控制線以及中斷輸出,可以方便地掛接到單片機(jī)、DSP、MCU 等控制器的系統(tǒng)總線上;在計算機(jī)系統(tǒng)中,CH371 的配套軟件提供了簡潔易用的操作接口,與本地端的單片機(jī)通訊就如同讀寫硬盤中的文件。CH371 屏蔽了USB 通訊中的所有協(xié)議,在計算機(jī)應(yīng)用層與本地端控制器之間提供端對端的連接?;贑H371,不需要了解任何USB 協(xié)議或者固件程序,甚至驅(qū)動程序,就可以輕松地將并口、串口的產(chǎn)品升級到USB 接口。
使用時,在本地端CH371具有8位數(shù)據(jù)總線和讀、寫、片選控制線以及中斷輸出,就像操作一般外設(shè)芯片一樣方便地掛接到DSP、MCU等控制器的系統(tǒng)總線上;在計算機(jī)端,CH371的配套軟件包括通用驅(qū)動程序以及應(yīng)用軟件包,提供了簡潔易用的操作接口。
根據(jù)不同的工作方式,芯片的接口類型可以有以下幾種:被動并行接口、I2C主接口、主控方式接口。按照芯片特點,CH371芯片通過被動并行接口與本地端控制器連接,通過USB接口與計算機(jī)連接,如圖1所示。
圖1 單片機(jī)、CH371芯片以及PC連接示意圖
鍵盤控制和數(shù)碼管驅(qū)動芯片CH451
CH451 是一個多功能外圍芯片,通過可以級聯(lián)的4 線串行接口與單片機(jī)、DSP、微處理器等控制器交換數(shù)據(jù)。CH451 包含三個功能:數(shù)碼管顯示驅(qū)動、鍵盤掃描控制、 P 監(jiān)控,三個功能之間相互獨立,控制器可以通過操作命令分別啟用、關(guān)閉、設(shè)定CH451 的任何一個功能。CH451 的串行接口是由硬件實現(xiàn)的,控制器可以頻繁地通過串行接口進(jìn)行高速操作。CH451主要功能包括動態(tài)掃描功能和鍵盤掃描功能。
在計算機(jī)應(yīng)用層,通過應(yīng)用程序來演示CH451的各種功能。應(yīng)用程序把控制命令通過CH371傳送給單片機(jī),單片機(jī)接收到命令后再來控制CH451。CH451通過四線串行接口與單片機(jī)連接,如圖2所示。
圖2 單片機(jī)、CH451芯片和鍵盤、數(shù)碼管的連接示意圖
USB設(shè)備配置和數(shù)據(jù)傳輸過程描述
USB即插即用的自動配置過程是由CH371 芯片和驅(qū)動程序共同完成的。將帶有CH371芯片的USB產(chǎn)品插入到計算機(jī)的USB插槽中,當(dāng)PC機(jī)檢測到USB 插入事件,操作系統(tǒng)有選擇地復(fù)位USB 產(chǎn)品,并讀取USB 產(chǎn)品的設(shè)備描述符,在CH371 芯片返回設(shè)備描述符后,操作系統(tǒng)根據(jù)設(shè)備描述符加載CH371 驅(qū)動程序;CH371 驅(qū)動程序讀取CH371 芯片的設(shè)備描述符和配置描述符;在CH371 芯片返回設(shè)備描述符和配置描述符之后,CH371 驅(qū)動程序根據(jù)配置描述符請求操作系統(tǒng)對CH371 芯片進(jìn)行配置。在完成配置后,PC機(jī)給CH371 芯片分配一個USB 設(shè)備地址,并指定一個USB 配置。以上是CH371 芯片的自動配置過程,在完成自動配置后,CH371 驅(qū)動程序向應(yīng)用層開放操作接口。
數(shù)據(jù)傳輸過程是USB 產(chǎn)品的應(yīng)用層軟件與USB 產(chǎn)品的控制器之間的數(shù)據(jù)進(jìn)行傳輸?shù)倪^程。首先計算機(jī)應(yīng)用層將數(shù)據(jù)請求發(fā)送給CH371 芯片,CH371 芯片以中斷方式通知本地端控制器,并使之進(jìn)入中斷程序,查看傳輸狀態(tài)信息寄存器中的數(shù)據(jù)傳輸方向標(biāo)志位,如果是上傳,則將上傳數(shù)據(jù)長度寄存器置為15,然后退出中斷程序;如果是下傳,則查看下傳數(shù)據(jù)長度寄存器,從數(shù)據(jù)下傳緩沖區(qū)中讀取數(shù)據(jù)塊,并分析接收到的數(shù)據(jù)塊,將應(yīng)答數(shù)據(jù)和應(yīng)答數(shù)據(jù)的長度分別寫入數(shù)據(jù)上傳緩沖區(qū)和上傳數(shù)據(jù)長度寄存器中,然后退出中斷程序。在退出中斷程序之后, CH371 芯片將應(yīng)答數(shù)據(jù)返回給計算機(jī),此時計算機(jī)應(yīng)用層將會接收到應(yīng)答數(shù)據(jù)。
演示板硬件電路設(shè)計
本演示板采用USB 總線接口芯片CH371、數(shù)碼管驅(qū)動和鍵盤控制芯片CH451和通用的MCS51 系列單片機(jī)構(gòu)成,用于演示CH371 的USB 數(shù)據(jù)通訊功能,CH451 的數(shù)碼管驅(qū)動/鍵盤掃描功能,以及CH371 與單片機(jī)的連接,CH451 與單片機(jī)的連接。演示板通過USB 接口與PC 機(jī)進(jìn)行通訊,并由PC 機(jī)控制它的執(zhí)行,演示板電路設(shè)計如圖所3示。
圖3中,元器件說明如下:
晶振X1 為標(biāo)準(zhǔn)的12MHz,晶振的金屬外殼應(yīng)該接地,以減少來自外界的干擾;振蕩電容C1、C2 的容量為20pF(可以在5pF 至30pF 之間選擇);另外,建議在CH371 的XI引腳(第14 腳)前串接一個阻值為1K 的電阻(可以在200 至3K 之間選擇),即X1與C2 相連接后通過1K 電阻連接到CH371 的XI 引腳。
阻抗匹配電阻R1、R2 為100 (可以在80 至150 之間選擇),如果CH371 的工作電壓略低于5V ,則R1、R2 的阻值可以適當(dāng)減少。
U4(單片機(jī)89C51)用于測試CH371 的USB 數(shù)據(jù)通信功能,本例中CH371 工作于復(fù)用地址方式,U4 的ALE 與CH371 的ALE 相連接,CH371 的INT#與U4 的INT0 相連接,U4通過CH371 的被動并行接口與CH371 進(jìn)行數(shù)據(jù)交換。
U3(EEPROM 器件24C02)作為I2C 接口的目標(biāo)設(shè)備,用于測試CH371 的I2C 接口功能,PC 機(jī)的應(yīng)用層程序可以直接對該器件進(jìn)行讀寫測試。
L1(發(fā)光二極管LED)用于測試CH371 的主控方式的功能,即使CH371 不連接任何單片機(jī)(例如在本例中取出單片機(jī)U4),PC 機(jī)的應(yīng)用層程序仍然可以直接控制CH371 的A3引腳輸出低電平或者高電平,從而點亮LED 或者熄滅LED。
圖3 CH371和CH451演示板硬件電路圖
跳線J1 用于測試CH371的片選線CS#的兩種用法,在本例中單片機(jī)沒有其它外圍器件,所以CS#引腳可以懸空,作為默認(rèn)選擇,如果單片機(jī)還有其它并行接口的外圍器件,則CS#應(yīng)該作為片選控制線,例如由單片機(jī)的地址線A15 驅(qū)動,從而將CH371 定位于單片機(jī)U4 的0000H-7FFFH 地址空間。
跳線J3 用于測試CH371 的USB 帶電下線功能,當(dāng)單片機(jī)U4 的P1.4 引腳輸出高電平時,可以控制CH371 模擬從USB 總線上斷開,當(dāng)單片機(jī)U4 的P1.4 引腳輸出低電平時,可以控制CH371 模擬連接到USB 總線。
跳線J2 用于選擇單片機(jī)U4 上電復(fù)位信號的來源,CH371 和CH451 都具有上電復(fù)位和看門狗功能,由J2 可以分別測試兩個芯片的上電復(fù)位功能。電阻R4 用于調(diào)節(jié)CH451的上電復(fù)位門限,阻值為200K 時上電復(fù)位門限約為4V,測試時請注意防止干擾。
電阻R5 為數(shù)碼管的限流電阻,阻值可以在60 至500 之間選擇,阻值為200 時限定段電流為13mA 左右;電阻R6 為按鍵掃描的限流電阻,阻值可以在1K 至10K 之間選擇,本例中為2K ,如果不使用CH451 的按鍵掃描功能,則電阻R6 可以省去。
CH451的SEG0~SEG7引腳和DIG0~ DIG7引腳相互配合,可以最大擴(kuò)展8個共陰數(shù)碼管和64個輕觸按鈕。這部分?jǐn)U展電路比較容易,由于版面所限,以上電路圖省去了這部分。 程序的軟件設(shè)計一般USB設(shè)備的開發(fā),USB接口程序設(shè)計包括三部分:單片機(jī)程序開發(fā),USB設(shè)備驅(qū)動程序開發(fā),主機(jī)應(yīng)用程序開發(fā)。由于CH371接口芯片固化了設(shè)備驅(qū)動程序和單片機(jī)程序中的協(xié)議處理部分,因此軟件設(shè)計僅僅包括兩部分,即單片機(jī)中的數(shù)據(jù)交換部分和主機(jī)的應(yīng)用程序。
單片機(jī)控制程序
應(yīng)用程序和單片機(jī)控制程序之間有這樣的協(xié)議約定:應(yīng)用程序發(fā)送給單片機(jī)的數(shù)據(jù)中的第一個字節(jié)是命令,單片機(jī)接收到PC發(fā)送過來的數(shù)據(jù)后,先對第一個字節(jié)做出響應(yīng),根據(jù)命令的不同進(jìn)入不同的子程序。例如:定義DEMOTESTDATA EQU 90H,這表示90H這個十六進(jìn)制數(shù)據(jù)代表測試命令,當(dāng)單片機(jī)接收到來自PC的數(shù)據(jù)的第一個字節(jié)是90H時,就會進(jìn)入將PC 發(fā)來的數(shù)據(jù)取反的子程序,并將取反后的數(shù)據(jù)返回。
在整個方案中單片機(jī)控制程序的作用主要有:(1)當(dāng)評估板上的按鍵按下時,CH451通過中斷通知單片機(jī),然后單片機(jī)從CH451的緩沖區(qū)中讀取鍵碼值,單片機(jī)再通過中斷通知PC機(jī),PC進(jìn)入相應(yīng)的中斷程序進(jìn)行處理;2)當(dāng)PC發(fā)送命令時,CH371通過中斷通知單片機(jī),單片機(jī)對該命令做出響應(yīng),或控制CH451,或返回應(yīng)答數(shù)據(jù),流程圖如圖4所示。
圖4 單片機(jī)控制程序流程圖
PC端應(yīng)用程序設(shè)計
為了檢驗硬件設(shè)計和單片機(jī)控制程序編寫的可行性,需要在PC端用VB編寫一個測試程序,用以測試硬件電路在數(shù)據(jù)通信方面是否暢通。程序用到了4個窗體,2個模塊。其中兩個模塊主要是定義一些全局變量、函數(shù),以及API函數(shù)的聲明(因為這些函數(shù)只有在聲明以后才能調(diào)用),設(shè)計4個窗體是為了更好地完成演示板的各項功能。
(1)主界面設(shè)計
演示主界面如圖5所示。
圖5 主界面
功能說明:在電路板上有三個按鍵,對應(yīng)這三個按鍵有三個不同的演示程序。根據(jù)該界面的提示,每按下一個按鍵就進(jìn)入相應(yīng)的演示程序,而演示完一個程序后可以退回該界面進(jìn)行另外演示程序的選擇。 2)同步可調(diào)實時時鐘演示程序
界面設(shè)計如圖6所示。
圖6 與真實時間同步的可調(diào)時鐘演示界面
功能說明:進(jìn)入該演示程序后,PC會通過命令使數(shù)碼管上顯示當(dāng)前時間,但時鐘不走動。
“啟動時鐘”:單擊該命令按鈕時鐘開始走動。
“校準(zhǔn)時鐘”:單擊該命令按鈕后,文本框下的六個命令按鈕會被激活,它們分別對應(yīng)六個數(shù)碼管。單擊修改時間對應(yīng)的按鈕,會彈出對話框,要求輸入要修改的時間。
“校時確定”:當(dāng)時間校準(zhǔn)好以后,單擊命令按鈕,這時會彈出對話框提示是否已經(jīng)校準(zhǔn)時間,否則可以繼續(xù)修改。若確定以后,時鐘又可以正常走動。
“返回主窗體”:單擊該命令按鈕回到窗體一,以便繼續(xù)進(jìn)行其他程序的演示。
(3)CH451各項功能演示程序
界面設(shè)計如圖7所示。
圖7 鍵盤控制和數(shù)碼管驅(qū)動芯片CH451各項功能演示界面
功能說明:當(dāng)進(jìn)入該演示程序后,會自動在數(shù)碼管上加在字?jǐn)?shù)據(jù)“HELPHELP”。
“右(左)移位”:單擊命令按鈕,數(shù)碼管上的字會向右(左)移動,左(右)邊移出的空位會加0。
“右(左)循環(huán)移位”:單擊命令按鈕會使數(shù)碼管的數(shù)據(jù)分別向右(左)循環(huán)移位。
“加載字?jǐn)?shù)據(jù)”:單擊該命令按鈕后,會彈出對話框提示“要加載字?jǐn)?shù)據(jù)請單擊相應(yīng)的文本框”。此時文本框會被激活,當(dāng)單擊文本框后,會再次彈出對話框,要求輸入要加載的字?jǐn)?shù)據(jù)。輸入完并確定后,數(shù)碼管上就會顯示加載的字?jǐn)?shù)據(jù)了。 “閃爍”:單擊該命令按鈕后,會彈出對話框提示“要是數(shù)碼管閃爍請單擊對應(yīng)的單選按鈕”,同時8個單選按鈕會被激活。每個單選按鈕對應(yīng)一個數(shù)碼管,選中相應(yīng)的單選按鈕后,對應(yīng)的數(shù)碼管就會閃爍。當(dāng)再選中另外的單選按鈕后,前一個就會停止閃爍。
“亮度控制按鈕”:單擊該命令按鈕后,彈出對話框提示“請單擊相應(yīng)的單選按鈕進(jìn)行亮度的選擇”,同時,十六個單選按鈕會被激活,它們對應(yīng)控制數(shù)碼管的十六級亮度顯示,當(dāng)選中第一個按鈕時,數(shù)碼管會變的最暗,當(dāng)依次選中其他的按鈕時,亮度會依次遞增。
“DEFAULT”:單擊該命令按鈕后,會回到默認(rèn)狀態(tài)。即:字?jǐn)?shù)據(jù)顯示為“HELPHELP”;閃爍的數(shù)碼管會停止閃爍;數(shù)碼管的亮度會變?yōu)?6級亮度。
“熄滅數(shù)碼管”:單擊該命令按鈕后,數(shù)碼管會熄滅。
“退出”:單擊該命令按鈕后,會返回主窗體。
批量數(shù)據(jù)傳輸演示程序
界面設(shè)計如圖8所示。
圖8 PC和AT89C51之間通過USB接口芯片CH371的數(shù)據(jù)塊傳輸界面
功能說明:
“發(fā)送數(shù)據(jù)”:單擊該命令按鈕后,會彈出對話框,首先要求輸入要發(fā)送的數(shù)據(jù)的個數(shù),然后會彈出對話框要求輸入要發(fā)送的數(shù)據(jù)。同時發(fā)送的數(shù)據(jù)會在文本框中顯示,以便和接收到的數(shù)據(jù)進(jìn)行比較,看單片機(jī)是否做出了正確的應(yīng)答。
“接收數(shù)據(jù)”:單擊該命令按鈕后,PC會首先發(fā)送一個命令給單片機(jī),要求單片機(jī)對剛才發(fā)送的命令做出響應(yīng)。單片機(jī)接收到此命令后會對接收到的數(shù)據(jù)按位取反,然后返回給計算機(jī)。當(dāng)計算機(jī)接收到返回的數(shù)據(jù)后會在文本框中顯示出來。
“退出”:單擊該按鈕后會返回主窗體。
程序調(diào)試的體會
該演示程序最關(guān)鍵的就是要使得PC和單片機(jī)之間能夠通過CH371接口芯片進(jìn)行通信,這必須用到該公司提供的API函數(shù)。調(diào)試時需要事先理解這些函數(shù)的作用以及各個參數(shù)的具體意義。PC的命令和數(shù)據(jù)能夠很容易就傳給單片機(jī),但單片機(jī)得到的按鍵值卻無法傳到PC機(jī)。后來筆者在查閱了一本關(guān)于在Visual Basic中調(diào)用API函數(shù)的書后終于找到了問題的原因所在,通過修改一下API函數(shù)的中的參數(shù),終于使得PC和單片機(jī)之間能夠進(jìn)行雙向的通信,這一步成功后其余的調(diào)試就比較容易進(jìn)行了。
數(shù)字通信相關(guān)文章:數(shù)字通信原理
通信相關(guān)文章:通信原理
晶振相關(guān)文章:晶振原理
評論