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