常用的主機與(yu) 嵌入式外設的高速通信接口有LPT 並行口、USB、1394 及10/100M 以太網等接口。RS232 不適合高速數據傳(chuan) 送,1394 接口需要專(zhuan) 門的適配器接口成本過高,一般較少使用,USB 接口被廣泛用於(yu) 高、中、低不同速度設備與(yu) 主機通信,USB2.0 的最高速度可達480Mb/s, 可傳(chuan) 送高清晰數字視頻碼流,完全可以替代1394 接口,USB 與(yu) 以太網接口相比,采用主從(cong) 結構,有即插即用特性,驅動程序豐(feng) 富,互操作性好等優(you) 點。
USB(Universal Serial Bus,通用串行總線)接口是1994 年Intel、Microsoft 等多家公司聯合推出的計算機外設互連總線協議。USB 接口支持1.5Mb/s、12Mb/s 和480Mb/s 的數據傳(chuan) 輸速率,支持控製、中斷、批量與(yu) 實時4 種數據傳(chuan) 輸模式,讓外圍設備可以有彈性的選擇。不管是交換少量或是大量的數據,還是有無時效的限製,都有合適的傳(chuan) 輸類型。USB的實時同步數據傳(chuan) 輸模式適合於(yu) 高速實時音視頻數據流的傳(chuan) 送。
基於(yu) ARM(Advanced RISC Machines)處理器的32 位嵌入係統具有極高運算速度和大容量的數據處理能力,常需要設計高速接口與(yu) 其他設備通信,為(wei) 此本文討論基於(yu) S3C44B0XARM7 處理器的嵌入式統擴展USB 接口(設備端)的技術方案。
1 USB 接口原理
USB1.1 規範將USB 分為(wei) 5 部分:控製器、控製器驅動程序、USB 芯片驅動程序、USB設備以及針對不同USB 設備的客戶端驅動程序。
(1) 控製器(Host Controller)主要負責執行由控製器驅動程序發出的命令。
(2) 控製器驅動程序(Host Controller Driver), 在控製器與(yu) USB 設備間建立通信管道(Pipe)。
(3) USB 驅動程序(USB Driver),提供對不同USB 設備及芯片的支持。
(4) USB 設備(USB Device), 有兩(liang) 類USB 設備:一類稱為(wei) 功能設備(Function),另一類是稱為(wei) USB 集線器(HUB),可以連接多個(ge) USB 設備。
(5) USB 設備驅動程序(Client Driver Software)及特定應用程序。
主控製器的驅動軟件由操作係統支持,USB 設備開發人員一般隻需編寫(xie) 客戶驅動程序,實現特定功能,設備端所有功能軟件需要全麵設計。
USB 的四種數據傳(chuan) 輸模式分別是:控製型傳(chuan) 輸、中斷型傳(chuan) 輸、批量型傳(chuan) 輸、實時型傳(chuan) 輸。第一種在缺省通道中傳(chuan) 輸USB 接口本身的配置等控製信息,後麵三種用於(yu) 功能部件傳(chuan) 輸數據。中斷型用於(yu) 鍵盤等的異步輸入輸出少量數據傳(chuan) 輸,批量傳(chuan) 輸主要用於(yu) 象硬盤等塊設備的數據傳(chuan) 輸,在中斷和批量的傳(chuan) 輸過程中要傳(chuan) 遞交互握手信號,確保數據準確無誤。
實時傳(chuan) 輸對帶寬有嚴(yan) 格要求,但允許有一定誤碼,省去了交互握手信號的傳(chuan) 遞,常用於(yu) 音視頻碼流數據傳(chuan) 輸。四種類型數據都按帶寬要求分配在1ms 一幀的數據幀內(nei) 進行傳(chuan) 輸,USB1.0 實時傳(chuan) 輸可得到的最大帶寬10.24Mbps。
2 嵌入式係統USB 接口設計
要滿足高性能ARM嵌入式係統的要求,擴展USB接口必須選擇高性能USB控製器芯片,Philips公司的PDISUBD12 USB器件,是與(yu) 微處理器配合使用的高性能USB接口器件,性價(jia) 比很高。PDIUSBD12主要特性有:
(1) 符合USB 1.1 技術規範;
(2) USB控製器並行接口與(yu) 處理器間的數據傳(chuan) 輸速度高達2M 字節/秒;
(3) 在批量模式和同步模式下均可實現1M 字節/秒的數據傳(chuan) 輸速率;
(4) 集成了FIFO存儲(chu) 收發器,支持DMA 操作;
(5) 內(nei) 置時鍾倍頻PLL電路,可編程時鍾頻率輸出;
(6) 多中斷模式實現批量和同步傳(chuan) 輸;
采用PDIUSBD12 USB標準組件與(yu) S3C44B0X接口,減小了開發的時間、風險以及費用,是最快捷、最經濟的方法實現ARM嵌入式係統擴展USB的解決(jue) 方案之一。PDIUSBD12與(yu) S3C44B0X ARM7處理器的電路圖見圖2。因ARM7用存儲(chu) 器影射方法擴展I/O接口,一般按16bit方式尋址,所以U2的A0連到U1的Addr1引腳, 片選信號nGCS1的基地址是0x0200_0000。
3 ARM 端USB 設備程序
設備端程序主要完成:ARM Bioses 和ucLinux 的加載、啟動通信進程、USB 控製器初始化、響應主控製器標準PnP 及其他命令、建立USB 端點(End point)邏輯通道、數據傳(chuan) 輸操作等功能,圖3 是基於(yu) ARM 的USB 設備與(yu) PC 間音頻通信的程序功能結構圖。
操作USB 芯片的接口函數的宏定義(yi) 為(wei) :
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 設備客戶驅動程序結構框架基本相同,可以從(cong) Windows2000DDK 中獲得USB 設備驅動程序範例代碼,對範例代碼作少量修改就可以滿足特定功能需要。圖1 顯示了驅動程序各層間的數據傳(chuan) 遞關(guan) 係,底層USB 主控製器驅動程序(USB Host Driver)由操作係統提供支持,設備驅動程序隻需要對USB Host Driver 上傳(chuan) 的I/O 數據包IRP 作出響應,並把要輸出數據以IRP 形式下傳(chuan) 給USB Host Driver 即可。
在ISO(實時型)模式下傳(chuan) 輸音頻碼流,USB 客戶程序除了WDM(Windows Driver Model)驅動常規處理外,必須計算好帶寬,並為(wei) 驅動程序在非分頁存儲(chu) 區內(nei) 分配好環行緩衝(chong) 區(Ringbuffer),以便USB 主控製器可以不間斷輸出實時數據。RingBuffer 的大小按下式
計算:
每幀字節數 × 每緩衝(chong) 幀數 × 緩衝(chong) 區數 ;
每傳(chuan) 完一緩衝(chong) 區,USB Host Driver 回調(CallBack)一次客戶驅動程序,USB 帶寬按每1ms 傳(chuan) 送1 幀數據來分配,要實現8kHz 采樣頻率、8bits 編碼的音頻PCM 碼流傳(chuan) 輸,幀數據包大小必須設為(wei) 8Bytes,若設置4 個(ge) 緩衝(chong) 區交替工作,每緩衝(chong) 區分20 幀傳(chuan) 送, 則RingBuffer 的大小為(wei) 640Bytes,那麽(me) USB 主控製器每20ms 的頻率中斷回調一次客戶驅動程序是合適的。
驅動程序通過iosesetCompletionRoutine()函數給每個(ge) IRP 設置回調函數入口地址,每完成一個(ge) IRP 緩衝(chong) 區數據傳(chuan) 送操作,回調一次該地址指向的函數,以便把下一緩衝(chong) 包數據壓入到IRP 棧,直到全部數據流傳(chuan) 送完畢或人為(wei) 終止傳(chuan) 送。
5 結束語
擴展USB 接口,大幅提升了32 位ARM 嵌入式係統數據通信的吞吐能力,有即插即用特性和多種數據傳(chuan) 輸模式,方案適合於(yu) 嵌入式係統的多種應用。文章具體(ti) 闡述了方案硬件、軟件設計的關(guan) 鍵問題,並討論了如何分配USB 總線帶寬,實現恒速音頻PCM 碼流傳(chuan) 送,實驗結果表明該方案能流暢地接收Windows2000 通過USB 接口輸出話音編碼信號,方案可行,具有較高參考價(jia) 值。