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

          新聞中心

          EEPW首頁 > 模擬技術 > 設計應用 > USB設備開發實例

          USB設備開發實例

          作者:時間:2001-11-09來源:收藏

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

          本文引用地址:http://www.ex-cimer.com/article/2816.htm

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

          USB接口芯片價格低廉,一個支持USB 1.1規范的USB接口芯片價格大多在$12之間,跟一個232485接口芯片價格差不多,這也大大促進USB設備的開發與應用。

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

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

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

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

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

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

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

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

          單片機軟件設計主要注意以下幾點:

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

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

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

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

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

          *協議的處理一定要按USB規范要求進行,對無效請求,用Set Endpoint Status指令將Control IN和Control OUT端點Stall即可。

          PC機軟件作者用VC6.0開發,分USB接口通信程序和應用程序兩部分,其開發以及系統調試過程與前文所述相同,此處不再贅 述?!?/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



          關鍵詞:

          評論


          相關推薦

          技術專區

          關閉
          看屁屁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); })();