<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 模擬技術(shù) > 設計應用 > USB設備開(kāi)發(fā)實(shí)例

USB設備開(kāi)發(fā)實(shí)例

作者: 時(shí)間:2001-11-09 來(lái)源: 收藏

通用串行總線(xiàn)(Universal Serial Bus USB),是一種快速、靈活的總線(xiàn)接口。與其它通信接口比較,USB接口的最大特點(diǎn)是易于使用,這也是USB的主要設計目標。作為一種高速總線(xiàn)接口,USB適用于多種設備,比如數碼相機、MP3播放機、高速數據采集設備等。易于使用還表現在USB接口支持熱插拔,并且所有的配置過(guò)程都由系統自動(dòng)完成,無(wú)需用戶(hù)干預。

本文引用地址:http://dyxdggzs.com/article/2816.htm

從表1可知,數據傳輸速率高是USB接口的另一特點(diǎn)。USB接口支持1.5Mb/s(低速)、12Mb/s(全速)和高達480Mb/s(USB 2.0規范)的數據傳輸速率,扣除用于總線(xiàn)狀態(tài)、控制和錯誤監測等的數據傳輸,USB的最大理論傳輸速率仍達1.2Mb/s9.6Mb/s,遠高于一般的串行總線(xiàn)接口。

USB接口芯片價(jià)格低廉,一個(gè)支持USB 1.1規范的USB接口芯片價(jià)格大多在$12之間,跟一個(gè)232485接口芯片價(jià)格差不多,這也大大促進(jìn)USB設備的開(kāi)發(fā)與應用。

在進(jìn)行一個(gè)USB設備開(kāi)發(fā)之前,首先要根據具體使用要求選擇合適的USB控制器。目前,市場(chǎng)上供應的USB控制器主要有兩種:帶USB接口的單片機(MCU)或純粹的USB接口芯片。

USB接口的單片機從應用上又可以分成兩類(lèi),一類(lèi)是從底層設計專(zhuān)用于USB控制的單片機,比如Cypress公司的CY7C63513(低速)、CY7C64013(全速),但由于價(jià)格、開(kāi)發(fā)工具以及單片機性能有限等問(wèn)題,所以一般不推薦選用。另一類(lèi)是增加了USB接口的普通單片機,例如Intel公司的8X931(基于8051)、8X930(基于高速、增強的8051)、Cypress公司的EZUSB(基于8051),選擇這類(lèi)USB控制器的最大好處在于開(kāi)發(fā)者對系統結構和指令集非常熟悉,開(kāi)發(fā)工具簡(jiǎn)單,但對于簡(jiǎn)單或低成本系統,價(jià)格高將會(huì )是最大的障礙。一般來(lái)說(shuō),后者的價(jià)格是前者價(jià)格的10倍。

純粹的USB接口芯片僅處理USB通信,必須有一個(gè)外部微處理器來(lái)進(jìn)行協(xié)議處理和數據交換。典型產(chǎn)品有Philips公司的PDIUSBD11I2C接口)、PDIUSBD12(并行接口),NS公司的USBN9603/9604(并行接口),NetChip公司的NET2888等。USB接口芯片的主要特點(diǎn)是價(jià)格便宜、接口方便、可靠性高,尤其適合于產(chǎn)品的改型設計(硬件上僅需對并行總線(xiàn)和中斷進(jìn)行改動(dòng),軟件則需要增加微處理器的USB中斷處理和數據交換程序、PC機的USB接口通信程序,無(wú)需對原有產(chǎn)品系統結構作很大的改動(dòng))。

在選定USB控制器以后,如果是帶USB接口的單片機,則是一般單片機應用系統的開(kāi)發(fā);反之,就是如何把USB接口芯片與單片機應用系統融合的問(wèn)題,一般USB接口芯片都支持多種并行總線(xiàn)結構(復用/非復用),可以方便的與多種單片機接口。硬件設計中要注意的就是USB接口芯片的時(shí)鐘速度比較高,如果芯片內部沒(méi)有PLL來(lái)倍頻,則外部晶體振蕩電路(多數在48MHz)的設計就應該特別注意,包括晶體的選擇(負載電容大?。?、匹配網(wǎng)絡(luò )的設計以及PCB布線(xiàn)。

USB設備的軟件設計主要包括兩部分:一是USB設備端的單片機軟件,主要完成USB協(xié)議處理與數據交換(多數情況下是一個(gè)中斷子程序)以及其它應用功能程序(比如A/D轉換、MP3解碼等)。二是PC端的程序,由USB通信程序和用戶(hù)服務(wù)程序兩部分組成,用戶(hù)服務(wù)程序通過(guò)USB通信程序與系統USBDI(USB Device Interface)通信,由系統完成USB協(xié)議的處理與數據傳輸。PC端程序的開(kāi)發(fā)難度比較大,程序員不僅要熟悉USB協(xié)議,還要熟悉Windows體系結構并能熟練運用DDK工具。

USB接口軟件主要完成USB協(xié)議的處理和數據的交換,一定要嚴格遵循USB2.0規范第九章的規定(詳見(jiàn) Universal Serial Bus Specification Revision 2.0 : Chapter 9.USB Device Framework www.usb.org)。

要快捷、成功的開(kāi)發(fā)一個(gè)USB設備,正確、合理的調試方法是必不可少的環(huán)節。調試基本分三步進(jìn)行:首先對外部設備(單片機部分)借助PC調試軟件(芯片生產(chǎn)商提供或從網(wǎng)上下載WINRTUSB、Kernel Driver等調試軟件)將設備端的USB協(xié)議(主要有描述符請求、端口配置、地址設置以及基本數據交換)調通。然后,用調試好的USB設備接口來(lái)開(kāi)發(fā)、調試PC軟件,這一步相對比較容易。最后,加上USB設備端的其它用戶(hù)程序,對整個(gè)完整的系統進(jìn)行系統調試。

下面從硬件、軟件兩方面具體介紹作者設計的一個(gè)便攜式USB數據采集設備,重點(diǎn)介紹USB接口部分。該數據采集系統以AD公司的帶8通道12A/D、212D/A52內核單片機ADuC812作為系統控制器,采用Philips公司的PDIUSBD12作為USB接口芯片。USB接口電路原理圖如圖1所示。由于系統中需要斷電后保存采集數據,擴展了兩片28F040,因此在這里把PDIUSBD12CPU的接口采用了總線(xiàn)復用方式,通過(guò)ALE信號把數據分離出來(lái),并把低64K RAM空間全留給PDIUSBD12(ADuC812RAM空間有1M,分頁(yè)管理,每頁(yè)64K,共256頁(yè),對應DPP寄存器值0255,PDIUSBD12占第0頁(yè),即DPP0),地址線(xiàn)A(P2.0)作為PDIUSBD12的指令/數據選擇線(xiàn),則地址000100H寫(xiě)指令、000000H讀寫(xiě)數據;單片機的P3.5口線(xiàn)提供PDIUSBD12的復位信號,接非門(mén)是保證單片機復位時(shí)PDIUSBD12也復位。PDIUSBD12與單片機的數據交換采用中斷方式(INT0),實(shí)際應用中如果系統中斷資源不夠(特別是系統改型設計時(shí)),也可以接成查詢(xún)方式,只是注意查詢(xún)間隔不要超過(guò)USB接口的最大等待時(shí)間(最大500mS)。PDIUSBD12GOOD-LINK指示燈(LED)USB通信時(shí)會(huì )閃爍,常亮或一直不亮說(shuō)明USB接口有問(wèn)題,調試時(shí)非常有用。PDIUSBD12采用PLL倍頻產(chǎn)生系統時(shí)鐘,只需外接低頻晶體,PCB設計比較方便。

單片機軟件設計主要注意以下幾點(diǎn):

* PDIUSBD12的中斷輸出引腳只要中斷寄存器不為0就保持低電平,所以單片機的對應中斷(INT0)應設置成電平觸發(fā);中斷處理后要用讀上次傳輸狀態(tài)寄存器清除中斷寄存器中對應位(D0-D5)。

* PDIUSBD12靠軟件控制USB端口的連接,程序在系統初始化處理完后軟件設置連接到USB端口,然后開(kāi)中斷。

* PDIUSBD12對內部寄存器的讀寫(xiě)沒(méi)有邊界限制,程序設計中一定不要讀寫(xiě)超過(guò)端點(diǎn)深度的數據。特別對于描述符請求,由于其長(cháng)度大于Control IN 深度(16 Bytes),要分幾個(gè)數據周期傳輸。

* 描述符一定要設置正確,并且注意USB協(xié)議中所有字數據均定義為低字節在前傳輸(LSB),例如Phlips的ID為471H,應在iDVendor中定義成71H、04H。

* 在接收到Setup包后,一定要用ACK Setup指令來(lái)重新使能Control IN 和Control OUT端點(diǎn)。向IN端點(diǎn)寫(xiě)數據后,要用Validate Buffer指令使數據可以在下一個(gè)IN數據周期發(fā)送。從OUT端點(diǎn)讀數據后,要用Clear Buffer指令來(lái)清空緩沖區,否則后面OUT周期傳輸的數據將被丟棄(返回NAK)。

*協(xié)議的處理一定要按USB規范要求進(jìn)行,對無(wú)效請求,用Set Endpoint Status指令將Control IN和Control OUT端點(diǎn)Stall即可。

PC機軟件作者用VC6.0開(kāi)發(fā),分USB接口通信程序和應用程序兩部分,其開(kāi)發(fā)以及系統調試過(guò)程與前文所述相同,此處不再贅 述?!?/font>

 

參考文獻

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



關(guān)鍵詞:

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>