USB 總線介紹
USB發展史:
USB(Universal Serial Bus ),通用串行總線,是一種外部總線标準,用于規範電腦與外部裝置的連接配接和通訊。USB是在1994年底由英特爾、康柏、IBM、Microsoft等多家公司聯合提出的,自1996年推出後,已成功替代序列槽和并口,成為當今個人電腦和大量智能裝置的必配接口之一。
- USB 1.0出現在1996年的,速度隻有1.5Mb/s。
- 1998年更新為USB 1.1,速度也提升到12Mb/s,稱之為 “full speed”。
- USB2.0規範是由USB1.1規範演變而來的。它的傳輸速率達到了 480Mbps ,稱之為“high speed”。
- USB3.0提供了十倍于USB 2.0的傳輸速度和更高的節能效率,被稱為“super speed”。
各種型号USB接口的圖檔:(來源網際網路)
USB信号線:
USB接口有4根線,兩根電源線,兩根信号線。USB接口的輸出電壓和電流是:+5V 500mA
USB電源: 标有VCC、Power、5V、5VSB字樣
USB資料線:(正)DATA+、USBD+、PD+、USBDT+
USB資料線:(負)DATA-、USBD-、PD-、USBDT-
地線: GND、Ground
系統拓撲結構:
對于每個USB系統來說,都有一個稱為主機控制器的裝置,該控制器和一個 根 Hub 作為一個整體。這個根Hub下可以接多級的Hub,每個子Hub又可以接子Hub。每個USB裝置作為一個節點接在不同級别的Hub上。 每條USB總線上最多可以接127個裝置。
常見的USB主要制器規格:
OHCI:主要是非PC系統上的USB晶片
UHCI:大多是 Intel 和 Via 主機闆上的 USB 控制器晶片。他們都是由USB1.1規格的。
EHCI:由 Intel 等幾個廠商研發,相容 OHCI 和 UHCI ,遵循USB2.0規範。
USB 協定分析
USB裝置邏輯結構:
在USB裝置的邏輯組織中,包含 裝置、配置、接口 和 端點 4個層次。裝置通常有一個或多個配置,配置通常有一個或多個接口,接口有零或多個端點。
每個USB裝置都可以包含一個或多個配置,不同的配置使裝置表現出不同的功能組合,配置由多個接口組成。在USB協定中,接口代表一個基本的功能,一個功能複雜的USB裝置可以具有多個接口,而接口是端點的彙集。
舉例說明:
一個USB播放器帶有音頻,視訊功能,還有旋鈕和按鈕。
配置1:音頻(接口)+旋鈕(接口)
配置2:視訊(接口)+旋鈕(接口)
配置3:音頻(接口)+視訊(接口)+按鈕(接口)
音頻接口,視訊接口,按鈕接口,旋鈕接口均需要一個驅動程式。
USB裝置中的唯一可尋址的部分是裝置端點,端點的作用類似于寄存器。每個端點在裝置内部有唯一的端點号,這個端點号是在裝置設計時給定的。主機和裝置的通信最終都作用于裝置上的各個端點。每個端點所支援的操作都是單向的,要麼隻讀,要麼隻寫。
USB描述符:
在每一個USB裝置内部,包含了固定格式的資料,通過這些資料,USB主機就可以擷取USB裝置的類型、生産廠商等資訊。這些固定格式的資料,我們就稱之為USB描述符。
标準的USB裝置有 5種 USB描述符: 裝置描述符,配置描述符,接口描述符,端點描述符,字元串描述符。
1、裝置描述符:
一個USB裝置隻有一個裝置描述符,裝置描述符長度為18個位元組,參考《USB specification : Table-9.8》。
2、配置描述符:
USB配置描述符長度為8個位元組,格式參考《USB specification :Table-9.10》。
3、接口描述符:
USB接口描述符長度為8個位元組,參考《USB specification Table-9.12》。
4、端點描述符:
USB端點描述符長度為7個位元組,參考《USB specification :Table-9.13》。
USB資料通訊
1、USB的資料通訊首先是基于傳輸(Transfer)的,傳輸的類型有:中斷傳輸、批量傳輸、同步傳輸、控制傳輸。
2、一次傳輸由一個或多個事務(transaction)構成,事務可分為:In事務,Out事務,Setup事務。
3、一個事務由一個或多個包(packet)構成,包可分為:令牌包(setup)、資料包(data)、握手包(ACK)和 特殊包 。
4、一個包由多個域構成,域可分為:同步域(SYNC),辨別域(PID),位址域(ADDR),端點域(ENDP),幀号域(FRAM),資料域(DATA),校驗域(CRC)。
USB裝置枚舉
USB裝置在正常工作以前,第一件要做的事就是枚舉。枚舉是讓主機認得這個USB裝置,并且為該裝置準備資源,建立好主機和裝置之間的資料傳遞通道。
枚舉的過程:
Linux USB 系統架構
開發闆既可以作為USB主機使用,也可以作為USB裝置來使用。
開發闆作為USB主機使用:
在啟動了開發闆的Linux系統之後,可以将U盤插入開發闆上的USB口上,這樣開發闆就可以作為主機使用。可以使用MassStorage驅動。
MassStorage驅動
核心驅動設定:
1、主要制器驅動設定
2、裝置驅動
3、其他配置
在開發闆上挂載使用U盤
在U盤插入開發闆之後,執行指令:
mount /dev/uba /mnt/
挂載U盤,然後通過 ls /mnt/ 指令就可以檢視U盤的檔案
開發闆作為USB裝置使用:
在開發闆連接配接到電腦時,就可以作為USB裝置來使用,可以使用 Gadget驅動,該驅動可以把開發闆作為網口、序列槽等裝置來使用。
RNDIS驅動(Gadget驅動的一種)
1、控制器驅動
2、Gadget驅動
在上圖的例子中,将USB裝置作為一個網口來使用。将編譯之後的核心子產品 .ko 檔案拷貝到開發闆中,加載子產品。
執行 如下指令:
在計算機的裝置管理器中會發現多了一個裝置:
右擊選擇更新驅動裝置,選擇從計算機的裝置驅動程式清單中安裝,裝置類型選擇網絡擴充卡,廠商做如下選擇:
在安裝了驅動之後,就可以在計算機的網絡中發現開發闆的連接配接,多了一個網卡。RNDIS驅動在計算機上将USB口模拟成網口,同時RNDIS驅動在開發闆上也将USB口模拟成網口,這樣就實作了計算機與開發闆通過USB的網口連接配接。
設定計算機的IP位址,在開發闆上執行ping指令,就可以ping通計算機。