USB設(shè)備開發(fā)實例
通用串行總線(Universal Serial Bus USB),是一種快速、靈活的總線接口。與其它通信接口比較,USB接口的最大特點是易于使用,這也是USB的主要設(shè)計目標(biāo)。作為一種高速總線接口,USB適用于多種設(shè)備,比如數(shù)碼相機(jī)、MP3播放機(jī)、高速數(shù)據(jù)采集設(shè)備等。易于使用還表現(xiàn)在USB接口支持熱插拔,并且所有的配置過程都由系統(tǒng)自動完成,無需用戶干預(yù)。
本文引用地址:http://butianyuan.cn/article/2816.htm從表1可知,數(shù)據(jù)傳輸速率高是USB接口的另一特點。USB接口支持1.5Mb/s(低速)、12Mb/s(全速)和高達(dá)480Mb/s(USB 2.0規(guī)范)的數(shù)據(jù)傳輸速率,扣除用于總線狀態(tài)、控制和錯誤監(jiān)測等的數(shù)據(jù)傳輸,USB的最大理論傳輸速率仍達(dá)1.2Mb/s或9.6Mb/s,遠(yuǎn)高于一般的串行總線接口。
USB接口芯片價格低廉,一個支持USB 1.1規(guī)范的USB接口芯片價格大多在$1~2之間,跟一個232或485接口芯片價格差不多,這也大大促進(jìn)USB設(shè)備的開發(fā)與應(yīng)用。
在進(jìn)行一個USB設(shè)備開發(fā)之前,首先要根據(jù)具體使用要求選擇合適的USB控制器。目前,市場上供應(yīng)的USB控制器主要有兩種:帶USB接口的單片機(jī)(MCU)或純粹的USB接口芯片。
帶USB接口的單片機(jī)從應(yīng)用上又可以分成兩類,一類是從底層設(shè)計專用于USB控制的單片機(jī),比如Cypress公司的CY7C63513(低速)、CY7C64013(全速),但由于價格、開發(fā)工具以及單片機(jī)性能有限等問題,所以一般不推薦選用。另一類是增加了USB接口的普通單片機(jī),例如Intel公司的8X931(基于8051)、8X930(基于高速、增強(qiáng)的8051)、Cypress公司的EZ-USB(基于8051),選擇這類USB控制器的最大好處在于開發(fā)者對系統(tǒng)結(jié)構(gòu)和指令集非常熟悉,開發(fā)工具簡單,但對于簡單或低成本系統(tǒng),價格高將會是最大的障礙。一般來說,后者的價格是前者價格的10倍。
純粹的USB接口芯片僅處理USB通信,必須有一個外部微處理器來進(jìn)行協(xié)議處理和數(shù)據(jù)交換。典型產(chǎn)品有Philips公司的PDIUSBD11(I2C接口)、PDIUSBD12(并行接口),NS公司的USBN9603/9604(并行接口),NetChip公司的NET2888等。USB接口芯片的主要特點是價格便宜、接口方便、可靠性高,尤其適合于產(chǎn)品的改型設(shè)計(硬件上僅需對并行總線和中斷進(jìn)行改動,軟件則需要增加微處理器的USB中斷處理和數(shù)據(jù)交換程序、PC機(jī)的USB接口通信程序,無需對原有產(chǎn)品系統(tǒng)結(jié)構(gòu)作很大的改動)。
在選定USB控制器以后,如果是帶USB接口的單片機(jī),則是一般單片機(jī)應(yīng)用系統(tǒng)的開發(fā);反之,就是如何把USB接口芯片與單片機(jī)應(yīng)用系統(tǒng)融合的問題,一般USB接口芯片都支持多種并行總線結(jié)構(gòu)(復(fù)用/非復(fù)用),可以方便的與多種單片機(jī)接口。硬件設(shè)計中要注意的就是USB接口芯片的時鐘速度比較高,如果芯片內(nèi)部沒有PLL來倍頻,則外部晶體振蕩電路(多數(shù)在48MHz)的設(shè)計就應(yīng)該特別注意,包括晶體的選擇(負(fù)載電容大小)、匹配網(wǎng)絡(luò)的設(shè)計以及PCB布線。
USB設(shè)備的軟件設(shè)計主要包括兩部分:一是USB設(shè)備端的單片機(jī)軟件,主要完成USB協(xié)議處理與數(shù)據(jù)交換(多數(shù)情況下是一個中斷子程序)以及其它應(yīng)用功能程序(比如A/D轉(zhuǎn)換、MP3解碼等)。二是PC端的程序,由USB通信程序和用戶服務(wù)程序兩部分組成,用戶服務(wù)程序通過USB通信程序與系統(tǒng)USBDI(USB Device Interface)通信,由系統(tǒng)完成USB協(xié)議的處理與數(shù)據(jù)傳輸。PC端程序的開發(fā)難度比較大,程序員不僅要熟悉USB協(xié)議,還要熟悉Windows體系結(jié)構(gòu)并能熟練運用DDK工具。
USB接口軟件主要完成USB協(xié)議的處理和數(shù)據(jù)的交換,一定要嚴(yán)格遵循USB2.0規(guī)范第九章的規(guī)定(詳見 Universal Serial Bus Specification Revision 2.0 : Chapter 9.USB Device Framework www.usb.org)。
要快捷、成功的開發(fā)一個USB設(shè)備,正確、合理的調(diào)試方法是必不可少的環(huán)節(jié)。調(diào)試基本分三步進(jìn)行:首先對外部設(shè)備(單片機(jī)部分)借助PC調(diào)試軟件(芯片生產(chǎn)商提供或從網(wǎng)上下載WINRT-USB、Kernel Driver等調(diào)試軟件)將設(shè)備端的USB協(xié)議(主要有描述符請求、端口配置、地址設(shè)置以及基本數(shù)據(jù)交換)調(diào)通。然后,用調(diào)試好的USB設(shè)備接口來開發(fā)、調(diào)試PC軟件,這一步相對比較容易。最后,加上USB設(shè)備端的其它用戶程序,對整個完整的系統(tǒng)進(jìn)行系統(tǒng)調(diào)試。
下面從硬件、軟件兩方面具體介紹作者設(shè)計的一個便攜式USB數(shù)據(jù)采集設(shè)備,重點介紹USB接口部分。該數(shù)據(jù)采集系統(tǒng)以AD公司的帶8通道12位A/D、2路12位D/A的52內(nèi)核單片機(jī)ADuC812作為系統(tǒng)控制器,采用Philips公司的PDIUSBD12作為USB接口芯片。USB接口電路原理圖如圖1所示。由于系統(tǒng)中需要斷電后保存采集數(shù)據(jù),擴(kuò)展了兩片28F040,因此在這里把PDIUSBD12與CPU的接口采用了總線復(fù)用方式,通過ALE信號把數(shù)據(jù)分離出來,并把低64K RAM空間全留給PDIUSBD12(ADuC812的RAM空間有1M,分頁管理,每頁64K,共256頁,對應(yīng)DPP寄存器值0~255,PDIUSBD12占第0頁,即DPP=0),地址線A(P2.0)作為PDIUSBD12的指令/數(shù)據(jù)選擇線,則地址000100H寫指令、000000H讀寫數(shù)據(jù);單片機(jī)的P3.5口線提供PDIUSBD12的復(fù)位信號,接非門是保證單片機(jī)復(fù)位時PDIUSBD12也復(fù)位。PDIUSBD12與單片機(jī)的數(shù)據(jù)交換采用中斷方式(INT0),實際應(yīng)用中如果系統(tǒng)中斷資源不夠(特別是系統(tǒng)改型設(shè)計時),也可以接成查詢方式,只是注意查詢間隔不要超過USB接口的最大等待時間(最大500mS)。PDIUSBD12的GOOD-LINK指示燈(LED)在USB通信時會閃爍,常亮或一直不亮說明USB接口有問題,調(diào)試時非常有用。PDIUSBD12采用PLL倍頻產(chǎn)生系統(tǒng)時鐘,只需外接低頻晶體,PCB設(shè)計比較方便。
單片機(jī)軟件設(shè)計主要注意以下幾點:
* PDIUSBD12的中斷輸出引腳只要中斷寄存器不為0就保持低電平,所以單片機(jī)的對應(yīng)中斷(INT0)應(yīng)設(shè)置成電平觸發(fā);中斷處理后要用讀上次傳輸狀態(tài)寄存器清除中斷寄存器中對應(yīng)位(D0-D5)。
* PDIUSBD12靠軟件控制USB端口的連接,程序在系統(tǒng)初始化處理完后軟件設(shè)置連接到USB端口,然后開中斷。
* PDIUSBD12對內(nèi)部寄存器的讀寫沒有邊界限制,程序設(shè)計中一定不要讀寫超過端點深度的數(shù)據(jù)。特別對于描述符請求,由于其長度大于Control IN 深度(16 Bytes),要分幾個數(shù)據(jù)周期傳輸。
* 描述符一定要設(shè)置正確,并且注意USB協(xié)議中所有字?jǐn)?shù)據(jù)均定義為低字節(jié)在前傳輸(LSB),例如Phlips的ID為471H,應(yīng)在iDVendor中定義成71H、04H。
* 在接收到Setup包后,一定要用ACK Setup指令來重新使能Control IN 和Control OUT端點。向IN端點寫數(shù)據(jù)后,要用Validate Buffer指令使數(shù)據(jù)可以在下一個IN數(shù)據(jù)周期發(fā)送。從OUT端點讀數(shù)據(jù)后,要用Clear Buffer指令來清空緩沖區(qū),否則后面OUT周期傳輸?shù)臄?shù)據(jù)將被丟棄(返回NAK)。
*協(xié)議的處理一定要按USB規(guī)范要求進(jìn)行,對無效請求,用Set Endpoint Status指令將Control IN和Control OUT端點Stall即可。
PC機(jī)軟件作者用VC6.0開發(fā),分USB接口通信程序和應(yīng)用程序兩部分,其開發(fā)以及系統(tǒng)調(diào)試過程與前文所述相同,此處不再贅 述?!?/font>
參考文獻(xiàn)
1 Jan Axelson.USB Complete.Lakeview Research,1999
2 Don Anderson.Universal Serial Bus System Architecture.Addison Wesley Longman,Inc,2000
3 ANALOG DEVICES.ADuC812 User's Manual,2000
評論