<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于USB接口的數(shù)據(jù)通信演示板的軟硬件實(shí)現(xiàn)方案

          基于USB接口的數(shù)據(jù)通信演示板的軟硬件實(shí)現(xiàn)方案

          ——
          作者:武漢理工大學(xué)信息工程學(xué)院 王騏 何嘉斌 時(shí)間:2005-12-02 來源: 收藏
          前言

          在開發(fā)USB設(shè)備時(shí)最難的就是固件和驅(qū)動程序的開發(fā),要想成功的開發(fā)這兩部分必須完全熟悉USB協(xié)議,而這至少需要五到六個(gè)月的時(shí)間。南京沁恒公司的CH371芯片是一塊屏蔽了USB協(xié)議的接口芯片,該芯片固化了設(shè)備驅(qū)動程序和單片機(jī)程序中的協(xié)議處理部分,因此不需要去了解復(fù)雜的設(shè)備驅(qū)動程序和USB協(xié)議,大大減少了開發(fā)周期,也降低了開發(fā)難度。本文介紹的演示板就是基于該公司的CH371和CH451芯片的一個(gè)簡單USB外設(shè),通過這塊演示板,不僅可以了解基于USB接口的基本結(jié)構(gòu),而且還可以熟悉基于這種接口的PC和單片機(jī)通信的單片機(jī)控制程序和計(jì)算機(jī)應(yīng)用程序的編寫。 


          芯片介紹

          USB接口芯片CH371 

          CH371是一個(gè)USB 總線的通用接口芯片。在本地端,CH371 具有8位數(shù)據(jù)總線和讀、寫、片選控制線以及中斷輸出,可以方便地掛接到單片機(jī)、DSP、MCU 等控制器的系統(tǒng)總線上;在計(jì)算機(jī)系統(tǒng)中,CH371 的配套軟件提供了簡潔易用的操作接口,與本地端的單片機(jī)通訊就如同讀寫硬盤中的文件。CH371 屏蔽了USB 通訊中的所有協(xié)議,在計(jì)算機(jī)應(yīng)用層與本地端控制器之間提供端對端的連接?;贑H371,不需要了解任何USB 協(xié)議或者固件程序,甚至驅(qū)動程序,就可以輕松地將并口、串口的產(chǎn)品升級到USB 接口。

          使用時(shí),在本地端CH371具有8位數(shù)據(jù)總線和讀、寫、片選控制線以及中斷輸出,就像操作一般外設(shè)芯片一樣方便地掛接到DSP、MCU等控制器的系統(tǒng)總線上;在計(jì)算機(jī)端,CH371的配套軟件包括通用驅(qū)動程序以及應(yīng)用軟件包,提供了簡潔易用的操作接口。 

          根據(jù)不同的工作方式,芯片的接口類型可以有以下幾種:被動并行接口、I2C主接口、主控方式接口。按照芯片特點(diǎn),CH371芯片通過被動并行接口與本地端控制器連接,通過USB接口與計(jì)算機(jī)連接,如圖1所示。



          圖1 單片機(jī)、CH371芯片以及PC連接示意圖 

          鍵盤控制和數(shù)碼管驅(qū)動芯片CH451

          CH451 是一個(gè)多功能外圍芯片,通過可以級聯(lián)的4 線串行接口與單片機(jī)、DSP、微處理器等控制器交換數(shù)據(jù)。CH451 包含三個(gè)功能:數(shù)碼管顯示驅(qū)動、鍵盤掃描控制、 P 監(jiān)控,三個(gè)功能之間相互獨(dú)立,控制器可以通過操作命令分別啟用、關(guān)閉、設(shè)定CH451 的任何一個(gè)功能。CH451 的串行接口是由硬件實(shí)現(xiàn)的,控制器可以頻繁地通過串行接口進(jìn)行高速操作。CH451主要功能包括動態(tài)掃描功能和鍵盤掃描功能。

          在計(jì)算機(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ì)算機(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 芯片分配一個(gè)USB 設(shè)備地址,并指定一個(gè)USB 配置。以上是CH371 芯片的自動配置過程,在完成自動配置后,CH371 驅(qū)動程序向應(yīng)用層開放操作接口。

          數(shù)據(jù)傳輸過程是USB 產(chǎn)品的應(yīng)用層軟件與USB 產(chǎn)品的控制器之間的數(shù)據(jù)進(jìn)行傳輸?shù)倪^程。首先計(jì)算機(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ī),此時(shí)計(jì)算機(jī)應(yīng)用層將會接收到應(yīng)答數(shù)據(jù)。

          演示板硬件電路設(shè)計(jì)

          本演示板采用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è)計(jì)如圖所3示。


          圖3中,元器件說明如下:

          晶振X1 為標(biāo)準(zhǔn)的12MHz,晶振的金屬外殼應(yīng)該接地,以減少來自外界的干擾;振蕩電容C1、C2 的容量為20pF(可以在5pF 至30pF 之間選擇);另外,建議在CH371 的XI引腳(第14 腳)前串接一個(gè)阻值為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引腳輸出低電平或者高電平,從而點(diǎn)亮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 引腳輸出高電平時(shí),可以控制CH371 模擬從USB 總線上斷開,當(dāng)單片機(jī)U4 的P1.4 引腳輸出低電平時(shí),可以控制CH371 模擬連接到USB 總線。
          跳線J2 用于選擇單片機(jī)U4 上電復(fù)位信號的來源,CH371 和CH451 都具有上電復(fù)位和看門狗功能,由J2 可以分別測試兩個(gè)芯片的上電復(fù)位功能。電阻R4 用于調(diào)節(jié)CH451的上電復(fù)位門限,阻值為200K 時(shí)上電復(fù)位門限約為4V,測試時(shí)請注意防止干擾。

          電阻R5 為數(shù)碼管的限流電阻,阻值可以在60 至500 之間選擇,阻值為200 時(shí)限定段電流為13mA 左右;電阻R6 為按鍵掃描的限流電阻,阻值可以在1K 至10K 之間選擇,本例中為2K ,如果不使用CH451 的按鍵掃描功能,則電阻R6 可以省去。

          CH451的SEG0~SEG7引腳和DIG0~ DIG7引腳相互配合,可以最大擴(kuò)展8個(gè)共陰數(shù)碼管和64個(gè)輕觸按鈕。這部分?jǐn)U展電路比較容易,由于版面所限,以上電路圖省去了這部分。 程序的軟件設(shè)計(jì)一般USB設(shè)備的開發(fā),USB接口程序設(shè)計(jì)包括三部分:單片機(jī)程序開發(fā),USB設(shè)備驅(qū)動程序開發(fā),主機(jī)應(yīng)用程序開發(fā)。由于CH371接口芯片固化了設(shè)備驅(qū)動程序和單片機(jī)程序中的協(xié)議處理部分,因此軟件設(shè)計(jì)僅僅包括兩部分,即單片機(jī)中的數(shù)據(jù)交換部分和主機(jī)的應(yīng)用程序。


          單片機(jī)控制程序

          應(yīng)用程序和單片機(jī)控制程序之間有這樣的協(xié)議約定:應(yīng)用程序發(fā)送給單片機(jī)的數(shù)據(jù)中的第一個(gè)字節(jié)是命令,單片機(jī)接收到PC發(fā)送過來的數(shù)據(jù)后,先對第一個(gè)字節(jié)做出響應(yīng),根據(jù)命令的不同進(jìn)入不同的子程序。例如:定義DEMOTESTDATA EQU 90H,這表示90H這個(gè)十六進(jìn)制數(shù)據(jù)代表測試命令,當(dāng)單片機(jī)接收到來自PC的數(shù)據(jù)的第一個(gè)字節(jié)是90H時(shí),就會進(jìn)入將PC 發(fā)來的數(shù)據(jù)取反的子程序,并將取反后的數(shù)據(jù)返回。

          在整個(gè)方案中單片機(jī)控制程序的作用主要有:(1)當(dāng)評估板上的按鍵按下時(shí),CH451通過中斷通知單片機(jī),然后單片機(jī)從CH451的緩沖區(qū)中讀取鍵碼值,單片機(jī)再通過中斷通知PC機(jī),PC進(jìn)入相應(yīng)的中斷程序進(jìn)行處理;2)當(dāng)PC發(fā)送命令時(shí),CH371通過中斷通知單片機(jī),單片機(jī)對該命令做出響應(yīng),或控制CH451,或返回應(yīng)答數(shù)據(jù),流程圖如圖4所示。



          圖4 單片機(jī)控制程序流程圖 

          PC端應(yīng)用程序設(shè)計(jì)

          為了檢驗(yàn)硬件設(shè)計(jì)和單片機(jī)控制程序編寫的可行性,需要在PC端用VB編寫一個(gè)測試程序,用以測試硬件電路在數(shù)據(jù)通信方面是否暢通。程序用到了4個(gè)窗體,2個(gè)模塊。其中兩個(gè)模塊主要是定義一些全局變量、函數(shù),以及API函數(shù)的聲明(因?yàn)檫@些函數(shù)只有在聲明以后才能調(diào)用),設(shè)計(jì)4個(gè)窗體是為了更好地完成演示板的各項(xiàng)功能。

          (1)主界面設(shè)計(jì)

          演示主界面如圖5所示。



          圖5 主界面 

          功能說明:在電路板上有三個(gè)按鍵,對應(yīng)這三個(gè)按鍵有三個(gè)不同的演示程序。根據(jù)該界面的提示,每按下一個(gè)按鍵就進(jìn)入相應(yīng)的演示程序,而演示完一個(gè)程序后可以退回該界面進(jìn)行另外演示程序的選擇。 2)同步可調(diào)實(shí)時(shí)時(shí)鐘演示程序

          界面設(shè)計(jì)如圖6所示。



          圖6 與真實(shí)時(shí)間同步的可調(diào)時(shí)鐘演示界面 

          功能說明:進(jìn)入該演示程序后,PC會通過命令使數(shù)碼管上顯示當(dāng)前時(shí)間,但時(shí)鐘不走動。

          “啟動時(shí)鐘”:單擊該命令按鈕時(shí)鐘開始走動。

          “校準(zhǔn)時(shí)鐘”:單擊該命令按鈕后,文本框下的六個(gè)命令按鈕會被激活,它們分別對應(yīng)六個(gè)數(shù)碼管。單擊修改時(shí)間對應(yīng)的按鈕,會彈出對話框,要求輸入要修改的時(shí)間。 

          “校時(shí)確定”:當(dāng)時(shí)間校準(zhǔn)好以后,單擊命令按鈕,這時(shí)會彈出對話框提示是否已經(jīng)校準(zhǔn)時(shí)間,否則可以繼續(xù)修改。若確定以后,時(shí)鐘又可以正常走動。 

          “返回主窗體”:單擊該命令按鈕回到窗體一,以便繼續(xù)進(jìn)行其他程序的演示。 

          (3)CH451各項(xiàng)功能演示程序 
          界面設(shè)計(jì)如圖7所示。



          圖7 鍵盤控制和數(shù)碼管驅(qū)動芯片CH451各項(xiàng)功能演示界面 

          功能說明:當(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)的文本框”。此時(shí)文本框會被激活,當(dāng)單擊文本框后,會再次彈出對話框,要求輸入要加載的字?jǐn)?shù)據(jù)。輸入完并確定后,數(shù)碼管上就會顯示加載的字?jǐn)?shù)據(jù)了。 “閃爍”:單擊該命令按鈕后,會彈出對話框提示“要是數(shù)碼管閃爍請單擊對應(yīng)的單選按鈕”,同時(shí)8個(gè)單選按鈕會被激活。每個(gè)單選按鈕對應(yīng)一個(gè)數(shù)碼管,選中相應(yīng)的單選按鈕后,對應(yīng)的數(shù)碼管就會閃爍。當(dāng)再選中另外的單選按鈕后,前一個(gè)就會停止閃爍。

          “亮度控制按鈕”:單擊該命令按鈕后,彈出對話框提示“請單擊相應(yīng)的單選按鈕進(jìn)行亮度的選擇”,同時(shí),十六個(gè)單選按鈕會被激活,它們對應(yīng)控制數(shù)碼管的十六級亮度顯示,當(dāng)選中第一個(gè)按鈕時(shí),數(shù)碼管會變的最暗,當(dāng)依次選中其他的按鈕時(shí),亮度會依次遞增。

          “DEFAULT”:單擊該命令按鈕后,會回到默認(rèn)狀態(tài)。即:字?jǐn)?shù)據(jù)顯示為“HELPHELP”;閃爍的數(shù)碼管會停止閃爍;數(shù)碼管的亮度會變?yōu)?6級亮度。

          “熄滅數(shù)碼管”:單擊該命令按鈕后,數(shù)碼管會熄滅。

          “退出”:單擊該命令按鈕后,會返回主窗體。


          批量數(shù)據(jù)傳輸演示程序

          界面設(shè)計(jì)如圖8所示。



          圖8 PC和AT89C51之間通過USB接口芯片CH371的數(shù)據(jù)塊傳輸界面 

          功能說明:

          “發(fā)送數(shù)據(jù)”:單擊該命令按鈕后,會彈出對話框,首先要求輸入要發(fā)送的數(shù)據(jù)的個(gè)數(shù),然后會彈出對話框要求輸入要發(fā)送的數(shù)據(jù)。同時(shí)發(fā)送的數(shù)據(jù)會在文本框中顯示,以便和接收到的數(shù)據(jù)進(jìn)行比較,看單片機(jī)是否做出了正確的應(yīng)答。

          “接收數(shù)據(jù)”:單擊該命令按鈕后,PC會首先發(fā)送一個(gè)命令給單片機(jī),要求單片機(jī)對剛才發(fā)送的命令做出響應(yīng)。單片機(jī)接收到此命令后會對接收到的數(shù)據(jù)按位取反,然后返回給計(jì)算機(jī)。當(dāng)計(jì)算機(jī)接收到返回的數(shù)據(jù)后會在文本框中顯示出來。

          “退出”:單擊該按鈕后會返回主窗體。


          程序調(diào)試的體會

          該演示程序最關(guān)鍵的就是要使得PC和單片機(jī)之間能夠通過CH371接口芯片進(jìn)行通信,這必須用到該公司提供的API函數(shù)。調(diào)試時(shí)需要事先理解這些函數(shù)的作用以及各個(gè)參數(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)文章:晶振原理


          關(guān)鍵詞:

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();