USB,即Universal Serial Bus(通用串行總線)的縮寫,是一個外部總線標準,用於規範電腦與外部設備的鏈接和通信。USB接口支持設備的即插即用和熱插拔功能。USB是在1994年末由英特爾、康柏、IBM等多家公司聯合提出的。USB版本經歷了多年的發展,現已經發展爲3.1版本,成爲當今PC中的標準擴展接口。當前主要採用USB2.0和USB3.0接口,USB各版本間能很好的兼容。編程
USB採用四線電纜,其中兩根是用來傳送數據的串行通道,另兩根爲設備提供電源,對於任何已經成功鏈接且相互識別的外設,將以雙方設備均可以支持的最高速率傳輸數據。USB總線會根據外設狀況在所兼容的傳輸模式中自動地由高速向低速動態轉換且匹配鎖定在合適的速率。USB是基於令牌的總線。相似於令牌環網絡或FDDI基於令牌的總線。USB主控制器廣播令牌,總線上設備檢測令牌中的地址是否與自身相符,經過接收或發送數據給主機來響應。USB經過支持掛起/恢復操做來管理USB總線電源。USB系統採用級聯星型拓撲,該拓撲由三個基本部分組成:主機(Host),集線器(Hub)和功能設備。網絡
USB是一種主從結構的系統。主機叫作Host,從機叫作Device;通常狀況下,PC做爲USB host端,手機等數碼設備做爲USB device,OTG(On the Go)則使設備便可以是USB device也能夠是USB host;一般,做爲USB device的設備被稱爲Gadget。架構
全部支持USB通信的設備端都有USB device程序,一般稱它們爲USB固件。在一些功能簡單的設備裏,用一些專用的可編程USB控制器就能夠完成USB device功能。而在一些運行了操做系統的複雜的嵌入式系統中,要完成USB device程序,就會要求你不只熟悉USB device控制器的操做,還要熟悉操做系統的驅動架構。函數
USB驅動架構如圖 2-1所示。spa
圖 2-1 USB主機端和設備端驅動架構操作系統
2.1.1 主機端接口
在主機端,有USB HCD和USBD兩個接口層。get
USB HCD的全稱爲主機控制器驅動(Host Controller Driver),它是對主機控制器硬件的一個抽象,提供與USB系統軟件之間的軟件接口。擴展
從客戶軟件的角度看,USBD控制全部的USB設備,所以客戶軟件對設備的控制和所要發送的數據只要交給USBD就能夠了。USBD爲客戶軟件提供命令機制和管道機制。客戶軟件經過命令機制能夠訪問全部設備的0號端點且與默認管道通訊,從而實現對設備的配置和其餘一些基本的控制工做。管道機制容許客戶和設備實現特定的通訊功能。該默認管道描述了一條USBD和USB設備間通訊的邏輯通道。軟件
主機端各層有如下功能:
1)檢測鏈接和移去的USB設備。
2)管理主機和USB設備間的數據流。
3)鏈接USB狀態和活動統計。
4)控制主控制器和USB設備間的電氣接口,包括能量供應。
2.1.2 設備端
在設備端,Gadget API定義了一個通用的Gadget Driver的接口,Gadget Driver經過Gadget API與底層USB Device Controller Driver通訊。其中Gadget API層屏蔽了底層硬件的不一樣,使Gadget Driver注重功能的實現,儘可能與硬件無關。
USB主機端驅動架構如圖 2-2所示。
圖 2-2 USB主機端驅動架構
USB核心(USBD)是整個USB驅動的核心部分,從圖 22可知,一方面USBD對從USB主機控制器接收到的數據進行處理,並傳遞給上層的設備端驅動軟件;同時也接收來自上層的非USB格式數據流,進行相應的數據處理後傳遞給USB主機控制器驅動。
設備端控制器基本架構如圖 2-3所示。
圖 2-3 設備端控制器基本架構
USB設備控制器驅動主要實現Gadget API定義的函數和中斷服務函數,可按功能劃分爲:API函數實現模塊和中斷處理模塊。
API函數主要實現Gadget API定義的函數功能,如結構體usb_ep_ops和usb_gadget_ops中的函數、usb_gadget_register_driver函數。這些函數提供給Gadget Driver調用。
中斷處理模塊主要處理設備控制器產生的各類中斷,包括端點中斷、復位、掛起等中斷。
無