USB應(yīng)用技術(shù)
通用串行總線(Universal Serial Bus,簡稱USB)從誕生后發(fā)展到今天,已將近十年。伴隨著計算機技術(shù)的迅猛發(fā)展,USB協(xié)議從1.1過渡到2.0,作為其最重要指標的設(shè)備傳輸速度也從1.5Mb/s的低速和12Mb/s的全速提高到如今的480Mb/s的高速。USB作為過去幾年里計算機和嵌入式系統(tǒng)領(lǐng)域中的熱點,推動了計算機外設(shè)的飛速發(fā)展。毫無疑問的是,USB已經(jīng)占領(lǐng)了PC和外設(shè)的市場;而在未來,USB又將以O(shè)TG再次引領(lǐng)計算機外設(shè)產(chǎn)業(yè)的發(fā)展方向,同時也將把計算機和嵌入式領(lǐng)域的學術(shù)研究帶入更為深入的層次。
圖1 帶有USB接口的PC外設(shè) USB設(shè)備開發(fā)技術(shù)
1994年11月,以Intel為首的7家公司推出了USB協(xié)議規(guī)范的第一個草案。自從1996年2月USB版本1.0發(fā)布后短短幾年內(nèi),USB不光成為了PC主板上的標準接口,而且成為了所有PC外部設(shè)備如鍵盤、鼠標、顯示器、打印機、數(shù)碼相機、掃描儀和游戲手柄等與PC相連的標準協(xié)議之一,迅速占領(lǐng)了計算機中低速外部設(shè)備的市場,大有取代串口和并口之勢。圖1展示了幾款帶有USB接口的PC外設(shè)、數(shù)碼家電和通信產(chǎn)品。
首先,我們總結(jié)出USB設(shè)備開發(fā)的基本內(nèi)容:
USB設(shè)備作為一個完整的硬件設(shè)備,是由硬件和固件兩部分來組成的。其中固件中包括了有關(guān)系統(tǒng)配置和CPU的一些設(shè)置模塊、USB協(xié)議棧模塊等幾部分。USB總線上的信息有兩種:一種是差模數(shù)據(jù)線上的包;另一種則是有特殊定義的數(shù)據(jù)線的信號,比如復(fù)位信號、遠程喚醒信號等等。因此,設(shè)備的USB棧就要能夠識別并處理這些不同的信息內(nèi)容。同時,在上層,這些信息又要被組成各種傳輸?shù)念愋蛠砑右蕴幚?。所以,整個協(xié)議棧的內(nèi)容是非常龐大的。
一般來說,USB設(shè)備在硬件上要由USB的芯片來實現(xiàn)。這個芯片的作用有:管理和實現(xiàn)USB物理層差模信號;提供給連接的端口;電源管理(主要指提供3.3V的電源);以寄存器的形式提供各種端點;提供各種配置和存儲寄存器。因此,固件就是以這些硬件資源為基礎(chǔ)來實現(xiàn)USB的功能。一般的USB芯片都會提供幾個標準的端點,每個端點都支持單一的總線傳輸方式。其中端點0必須支持控制傳輸,而其他的端點則可以支持同步傳輸、批量傳輸或中斷傳輸中的任意一種傳輸方式。管理和使用這些端點,就需要通過相應(yīng)的控制寄存器、狀態(tài)寄存器、中斷寄存器和數(shù)據(jù)寄存器來實現(xiàn)。其中,控制寄存器用于設(shè)置端點的工作模式、啟用端點的功能等;狀態(tài)寄存器用于查詢端點的當前狀態(tài);中斷寄存器則用于設(shè)置端點的中斷觸發(fā)和響應(yīng)功能;數(shù)據(jù)寄存器則是設(shè)備與主機交換數(shù)據(jù)用的緩沖區(qū)。合理和有效地使用這些寄存器,是編好USB協(xié)議棧的關(guān)鍵。
簡而言之,USB的協(xié)議棧以設(shè)備端點的使用和管理作為基礎(chǔ)和核心。而在端點的這些寄存器中,對中斷寄存器的管理尤其重要。也因此,編寫USB的中斷服務(wù)程序是整個設(shè)備端USB固件編寫的主要內(nèi)容??梢苑譃槿齻€步驟:
USB主機的嵌入式開發(fā)技術(shù)
USB主機嵌入式化的必要性
隨著USB應(yīng)用領(lǐng)域的逐漸擴大,人們希望USB能應(yīng)用在各種計算機領(lǐng)域中,尤其是在移動數(shù)據(jù)交換等沒有PC的領(lǐng)域中。
非PC應(yīng)用領(lǐng)域?這正是USB一個致命的弱點。USB的拓撲結(jié)構(gòu)中居于核心地位的是主機(Host),任何一次USB的數(shù)據(jù)傳輸都必須由主機來發(fā)起和控制,所有的USB設(shè)備都只能和主機建立連接,任何兩個外設(shè)之間或是兩個主機之間無法直接通信。而目前,大量的扮演主機角色的是個人電腦(PC)。因此,我們目前所買到和使用的USB移動設(shè)備,都是USB的設(shè)備,比如USB的移動硬盤、USB接口的數(shù)碼相機等等。所有這些設(shè)備都只能在PC上使用,只能通過PC來進行相互的文件和數(shù)據(jù)交換。沒有了PC,這些設(shè)備就“失靈”了(就數(shù)據(jù)交換的功能而言)。
因此,“如何將USB應(yīng)用到嵌入式領(lǐng)域?如何實現(xiàn)USB點對點的通信?”等問題,開始進入了USB開發(fā)者的討論議程。正是在這種新的需求之下,USB 主機的嵌入式應(yīng)用成了USB領(lǐng)域新的興奮點。
PC上USB主機的功能與工作原理
USB主機完成的主要功能包括以下5個方面:檢測USB設(shè)備的連接和斷開、管理主機和設(shè)備之間的標準控制管道、管理主機和設(shè)備之間的數(shù)據(jù)流、收集設(shè)備的狀態(tài)和統(tǒng)計總線的活動、控制和管理主機控制器與設(shè)備之間的電氣接口。
剖析PC上USB主機部分的結(jié)構(gòu),可以看到,PC主板上一般都有兩個USB端口,并由一個USB主機接口芯片控制;這個USB主機接口芯片又通過PCI總線,與CPU進行通信;此外,芯片附近還有一些電源管理的部分,用于對USB外設(shè)進行電源的供給和管理。這是其硬件部分。軟件部分,很顯然,就是PC的操作系統(tǒng)所能夠提供的各種驅(qū)動程序和應(yīng)用程序支持,具體來說,包括三部分:USB主控制器驅(qū)動程序,其負責CPU與USB主機接口芯片的通訊,處理底層USB包的發(fā)送與接收;USB核心驅(qū)動程序,這部分是USB底層與用戶程序之間的橋梁,負責解釋用戶程序中對USB的各種操作命令,并解碼后發(fā)送給底層驅(qū)動;USB用戶程序和類協(xié)議驅(qū)動程序,這部分就是上層的應(yīng)用層,主要包括操作系統(tǒng)提供給用戶的API、以及用戶自己定義的對USB設(shè)備的各種操作,比如讀取USB設(shè)備某幾個特定的數(shù)據(jù)等等。
嵌入式USB主機系統(tǒng)的設(shè)計內(nèi)容
毒俟copy;程,獲取USB設(shè)備的描述符并加以利用等。
移動USB——USB OTG的發(fā)展
USB On-The-Go,顧名思義,是USB應(yīng)用在便攜式移動設(shè)備領(lǐng)域中,因此,我們姑且將其翻譯為“便攜式USB”(或者“移動USB”),簡記成USB OTG。OTG 1.0作為USB 2.0的補充協(xié)議,基本上符合USB 2.0規(guī)范。但是,有所不同的是符合USB OTG的設(shè)備完全拋開了PC,既可以作為主機,也可以作為外設(shè),而與另一個OTG設(shè)備直接實現(xiàn)點對點(Pear to Pear)通訊。因此,這類OTG設(shè)備也被稱為是雙角色設(shè)備(Dual-Role Device,簡稱為DRD),并能夠根據(jù)接入設(shè)備的特性和數(shù)據(jù)傳輸過程中的情況,自動切換為主機或是設(shè)備。需要
評論