歡迎您光臨本站 登入註冊首頁

概述

   常用的主機與嵌入式外設的高速通信介面有LPT并行口、USB、1394及10/100M乙太網等介面。RS232不適合高速數據傳送,1394介面需要專門的適配器介面成本……

    常用的主機與嵌入式外設的高速通信介面有LPT 并行口、USB、1394 及10/100M 乙太網等介面。RS232 不適合高速數據傳送,1394 介面需要專門的適配器介面成本過高,一般較少使用,USB 介面被廣泛用於高、中、低不同速度設備與主機通信,USB2.0 的最高速度可達480Mb/s, 可傳送高清晰數字視頻碼流,完全可以替代1394 介面,USB 與乙太網介面相比,採用主從結構,有即插即用特性,驅動程序豐富,互操作性好等優點。
    USB(Universal Serial Bus,通用串列匯流排)介面是1994 年Intel、Microsoft 等多家公司聯合推出的計算機外設互連匯流排協議。USB 介面支持1.5Mb/s、12Mb/s 和480Mb/s 的數據傳輸速率,支持控制、中斷、批量與實時4 種數據傳輸模式,讓外圍設備可以有彈性的選擇。不管是交換少量或是大量的數據,還是有無時效的限制,都有合適的傳輸類型。USB的實時同步數據傳輸模式適合於高速實時音視頻數據流的傳送。
    基於ARM(Advanced RISC Machines)處理器的32 位嵌入系統具有極高運算速度和大容量的數據處理能力,常需要設計高速介面與其他設備通信,為此本文討論基於S3C44B0XARM7 處理器的嵌入式統擴展USB 介面(設備端)的技術方案。

1 USB 介面原理
    USB1.1 規範將USB 分為5 部分:控制器、控制器驅動程序、USB 晶元驅動程序、USB設備以及針對不同USB 設備的客戶端驅動程序。
(1) 控制器(Host Controller)主要負責執行由控制器驅動程序發出的命令。
(2) 控制器驅動程序(Host Controller Driver), 在控制器與USB 設備間建立通信管道(Pipe)。
(3) USB 驅動程序(USB Driver),提供對不同USB 設備及晶元的支持。
(4) USB 設備(USB Device), 有兩類USB 設備:一類稱為功能設備(Function),另一類是稱為USB 集線器(HUB),可以連接多個USB 設備。
(5) USB 設備驅動程序(Client Driver Software)及特定應用程序。
 
    主控制器的驅動軟體由操作系統支持,USB 設備開發人員一般只需編寫客戶驅動程序,實現特定功能,設備端所有功能軟體需要全面設計。
    USB 的四種數據傳輸模式分別是:控制型傳輸、中斷型傳輸、批量型傳輸、實時型傳輸。第一種在預設通道中傳輸USB 介面本身的配置等控制信息,後面三種用於功能部件傳輸數據。中斷型用於鍵盤等的非同步輸入輸出少量數據傳輸,批量傳輸主要用於象硬碟等塊設備的數據傳輸,在中斷和批量的傳輸過程中要傳遞交互握手信號,確保數據準確無誤。
    實時傳輸對帶寬有嚴格要求,但允許有一定誤碼,省去了交互握手信號的傳遞,常用於音視頻碼流數據傳輸。四種類型數據都按帶寬要求分配在1ms 一幀的數據幀內進行傳輸,USB1.0 實時傳輸可得到的最大帶寬10.24Mbps。

2 嵌入式系統USB 介面設計
    要滿足高性能ARM嵌入式系統的要求,擴展USB介面必須選擇高性能USB控制器晶元,Philips公司的PDISUBD12 USB器件,是與微處理器配合使用的高性能USB介面器件,性價比很高。PDIUSBD12主要特性有:
(1) 符合USB 1.1 技術規範;
(2) USB控制器并行介面與處理器間的數據傳輸速度高達2M 位元組/秒;
(3) 在批量模式和同步模式下均可實現1M 位元組/秒的數據傳輸速率;
(4) 集成了FIFO存儲收發器,支持DMA 操作;
(5) 內置時鐘倍頻PLL電路,可編程時鐘頻率輸出;
(6) 多中斷模式實現批量和同步傳輸;
    採用PDIUSBD12 USB標準組件與S3C44B0X介面,減小了開發的時間、風險以及費用,是最快捷、最經濟的方法實現ARM嵌入式系統擴展USB的解決方案之一。PDIUSBD12與S3C44B0X ARM7處理器的電路圖見圖2。因ARM7用存儲器影射方法擴展I/O介面,一般按16bit方式定址,所以U2的A0連到U1的Addr1引腳, 片選信號nGCS1的基地址是0x0200_0000。
 

3 ARM 端USB 設備程序
    設備端程序主要完成:ARM BIOS 和ucLinux 的載入、啟動通信進程、USB 控制器初始化、響應主控制器標準PnP 及其他命令、建立USB 端點(End point)邏輯通道、數據傳輸操作等功能,圖3 是基於ARM 的USB 設備與PC 間音頻通信的程序功能結構圖。
 
操作USB 晶元的介面函數的宏定義為:
typedef unsigned short int U16 ;
#define pD12_CMD ( ( U16 *) 0x02000002 ) //指向D12 命令寄存器指針
#define pD12_DAT ( ( U16 *) 0x02000000 ) //指向D12 數據寄存器指針
#define D12WriteCmd( data ) (*p D12_CMD = (U16)(data) & 0xff )
#define D12WriteData( data ) (* pD12_DAT = (U16)(data) & 0xff )
#define D12ReadData() (* pD12_DAT & 0xff )

4 音頻碼流USB 設備驅動程序
    Windows2000 中各種USB 設備客戶驅動程序結構框架基本相同,可以從Windows2000DDK 中獲得USB 設備驅動程序範例代碼,對範例代碼作少量修改就可以滿足特定功能需要。圖1 顯示了驅動程序各層間的數據傳遞關係,底層USB 主控制器驅動程序(USB Host Driver)由操作系統提供支持,設備驅動程序只需要對USB Host Driver 上傳的I/O 數據包IRP 作出響應,並把要輸出數據以IRP 形式下傳給USB Host Driver 即可。
    在ISO(實時型)模式下傳輸音頻碼流,USB 客戶程序除了WDM(Windows Driver Model)驅動常規處理外,必須計算好帶寬,並為驅動程序在非分頁存儲區內分配好環行緩衝區(Ringbuffer),以便USB 主控制器可以不間斷輸出實時數據。RingBuffer 的大小按下式
計算:
每幀位元組數 × 每緩衝幀數 × 緩衝區數 ;
    每傳完一緩衝區,USB Host Driver 回調(CallBack)一次客戶驅動程序,USB 帶寬按每1ms 傳送1 幀數據來分配,要實現8kHz 採樣頻率、8bits 編碼的音頻PCM 碼流傳輸,幀數據包大小必須設為8Bytes,若設置4 個緩衝區交替工作,每緩衝區分20 幀傳送, 則RingBuffer 的大小為640Bytes,那麼USB 主控制器每20ms 的頻率中斷回調一次客戶驅動程序是合適的。
    驅動程序通過IoSetCompletionRoutine()函數給每個IRP 設置回調函數入口地址,每完成一個IRP 緩衝區數據傳送操作,回調一次該地址指向的函數,以便把下一緩衝包數據壓入到IRP 棧,直到全部數據流傳送完畢或人為終止傳送。

5 結束語
    擴展USB 介面,大幅提升了32 位ARM 嵌入式系統數據通信的吞吐能力,有即插即用特性和多種數據傳輸模式,方案適合於嵌入式系統的多種應用。文章具體闡述了方案硬體、軟體設計的關鍵問題,並討論了如何分配USB 匯流排帶寬,實現恆速音頻PCM 碼流傳送,實驗結果表明該方案能流暢地接收Windows2000 通過USB 介面輸出話音編碼信號,方案可行,具有較高參考價值。


[admin via 研發互助社區 ] 32 位ARM 嵌入式系統擴展USB 介面設計已經有2747次圍觀

http://cocdig.com/docs/show-post-42159.html