內(nèi)容原創(chuàng)续室,未經(jīng)本人同意請勿轉(zhuǎn)載。聯(lián)系本人:jianshu_kevin@126.com
初次接觸USB的同學,可能會被里面各種名詞給搞暈锋恬,沒關(guān)系我們下面就來梳理一下這些知識,希望能幫助大家理解USB编丘。
一与学,從最常見的名詞說起
1.1 什么是USB
這個我就不多解釋了,直譯就是通用串行總線嘉抓。再不明白的就百度索守。
1.2 USB協(xié)議版本
- USB 1.0/1.1(low/full speed),傳輸速率最大為12Mbps
- USB 2.0(high speed)抑片,傳輸速率最大480Mbps
- USB 3.0(super speed)卵佛,傳輸速率最大5Gbps
協(xié)議版本向下兼容
1.3 USB接口分類
- Type A,即使我們電腦上的那種接口敞斋。
- Type B截汪,不太常見,比較方正的T型接口植捎,有的嵌入式開發(fā)板會用衙解。
- Type C,現(xiàn)在開始流行起來了鸥跟,最大的好處就是可以盲插丢郊,而不用區(qū)分正反。
- Micro/mini医咨,手機上比較常見枫匾。
不管哪種接口,用的線都是4根拟淮,只是形狀不同而已干茉。
二. 協(xié)議相關(guān)的名詞解析
2.1 描述符(description)
談到USB描述符,不得不說USB最強悍的地方就在這里很泊。一個口可以插很多的設(shè)備角虫,可以插U盤沾谓、上網(wǎng)卡、音頻設(shè)備戳鹅、還有的是復合設(shè)備均驶,一個設(shè)備插上后可以虛擬出多個設(shè)備出來,太強了枫虏。
主設(shè)備之所以能區(qū)分不同的從設(shè)備妇穴,靠的就是描述符。 于是USB協(xié)議里就規(guī)定了各種不同的USB描述符隶债。讓我們先看一下USB協(xié)議里四大描述符之間的關(guān)系
+------設(shè)備描述符
+----------配置描述符1
+----------接口描述符1
+----------端點描述符1
+----------端點描述符2
+....
+----------接口描述符2
+----------端點描述符1
+....
+....
+----------配置描述符2
+----------接口描述符1
+----------端點描述符1
+----------端點描述符2
+....
+....
+....
2.1.1 設(shè)備描述(device description)
故名思意用來描述USB設(shè)備的腾它,一個設(shè)備只有一個設(shè)備描述符,包含了設(shè)備類型死讹、設(shè)備遵循的協(xié)議瞒滴、廠商ID、產(chǎn)品id赞警、序列號等妓忍,一個完整的設(shè)備描述符如下:
DEVICE DESCRIPTOR
bLength: 18
bDescriptorType: 0x01 (DEVICE)
bcdUSB: 0x0200
bDeviceClass: Vendor Specific (0xff)
bDeviceSubClass: 255
bDeviceProtocol: 255
bMaxPacketSize0: 64
idVendor: Marvell Semiconductor, Inc. (0x1286)
idProduct: Unknown (0x812a)
bcdDevice: 0x0000
iManufacturer: 3
iProduct: 2
iSerialNumber: 0
bNumConfigurations: 1
2.1.2 配置描述符(configrue description)
配置描述就是用來配置設(shè)備的,沒錯仅颇,就是這么簡單单默。但是要記住一點:一個設(shè)備同一時刻只能有一種配置生效,而且要區(qū)分配置和設(shè)置的區(qū)別忘瓦。還是來看一下配置描述符的內(nèi)容
CONFIGURATION DESCRIPTOR
bLength: 9
bDescriptorType: 0x02 (CONFIGURATION)
wTotalLength: 121
bNumInterfaces: 4
bConfigurationValue: 1
iConfiguration: 0
Configuration bmAttributes: 0xc0 SELF-POWERED NO REMOTE-WAKEUP
1... .... = Must be 1: Must be 1 for USB 1.1 and higher
.1.. .... = Self-Powered: This device is SELF-POWERED
..0. .... = Remote Wakeup: This device does NOT support remote wakeup
bMaxPower: 250 (500mA)
設(shè)置是什么搁廓,暫時不多解釋,后面再談耕皮。
2.1.3 接口描述符(interface description)
一個interface就代表一個設(shè)備境蜕。USB interface用來處理一類 USB 邏輯連接, 例如一個鼠標, 一個鍵盤, 或者一個音頻流. 一些 USB 設(shè)備有多個接口。也就是復合設(shè)備凌停,例如一個 USB 揚聲器可能有 2 個接口: 一個 USB 鍵盤給按鈕和一個 USB 音頻流粱年。
INTERFACE DESCRIPTOR (2.0): class Vendor Specific
bLength: 9
bDescriptorType: 0x04 (INTERFACE)
bInterfaceNumber: 2
bAlternateSetting: 0
bNumEndpoints: 2
bInterfaceClass: Vendor Specific (0xff)
bInterfaceSubClass: 0x00
bInterfaceProtocol: 0x00
iInterface: 8
**一個interface包含多個endpoint
2.1.4 端點描述符(endpoint description)
USB通信的基本物理單位,一個endpiont只能承載一個方向的數(shù)據(jù)罚拟。endpiont分為如下幾種:
- CONTROL
控制端點被用來允許對 USB 設(shè)備的不同部分存取. 通常用作配置設(shè)備, 獲取關(guān)于設(shè)備的信息, 發(fā)送命令到設(shè)備, 或者獲取關(guān)于設(shè)備的狀態(tài)報告. 這些端點在尺寸上常常較小. 每個 USB 設(shè)備有一個控制端點稱為"端點 0", 被 USB 核用來在插入時配置設(shè)備. 這些傳送由 USB 協(xié)議保證來總有足夠的帶寬使它到達設(shè)備.
- INTERRUPT
中斷端點傳送小量的數(shù)據(jù), 以固定的速率在每次 USB 主請求設(shè)備數(shù)據(jù)時. 這些端點對 USB 鍵盤和鼠標來說是主要的傳送方法. 它們還用來傳送數(shù)據(jù)到 USB 設(shè)備來控制設(shè)備, 但通常不用來傳送大量數(shù)據(jù). 這些傳送由 USB 協(xié)議保證來總有足夠的帶寬使它到達設(shè)備.
- BULK
塊端點傳送大量的數(shù)據(jù). 這些端點常常比中斷端點大(它們一次可持有更多的字符). 它們是普遍的, 對于需要傳送不能有任何數(shù)據(jù)丟失的數(shù)據(jù). 這些傳送不被 USB 協(xié)議保證來一直使它在特定時間范圍內(nèi)完成. 如果總線上沒有足夠的空間來發(fā)送整個 BULK 報文, 它被分為多次傳送到或者從設(shè)備. 這些端點普遍在打印機, 存儲器, 和網(wǎng)絡(luò)設(shè)備上.
- ISOCHRONOUS
同步端點也傳送大量數(shù)據(jù), 但是這個數(shù)據(jù)常常不被保證它完成. 這些端點用在可以處理數(shù)據(jù)丟失的設(shè)備中, 并且更多依賴于保持持續(xù)的數(shù)據(jù)流. 實時數(shù)據(jù)收集, 例如音頻和視頻設(shè)備, 一直都使用這些端點.
BULK端點描述符數(shù)據(jù)內(nèi)容如下:
ENDPOINT DESCRIPTOR
bLength: 7
bDescriptorType: 0x05 (ENDPOINT)
bEndpointAddress: 0x86 IN Endpoint:6
1... .... = Direction: IN Endpoint
.... 0110 = Endpoint Number: 0x6
bmAttributes: 0x02
.... ..10 = Transfertype: Bulk-Transfer (0x2)
wMaxPacketSize: 512
.... ..10 0000 0000 = Maximum Packet Size: 512
bInterval: 0
2.2 class
class用來描述設(shè)備屬于哪種設(shè)備台诗,例如音頻、鍵盤赐俗、U盤等拉队。設(shè)備通過class來確認和加載相應的驅(qū)動。class分為device class 和interface class阻逮。具體的class值以及含義粱快,參考define class。
- class 包含
- class
- subclass
- protocol
組合在一起,用來指出設(shè)備具體功能事哭。
device class舉例
DEVICE DESCRIPTOR
bLength: 18
bDescriptorType: 0x01 (DEVICE)
bcdUSB: 0x0200
bDeviceClass: Miscellaneous (0xef)
bDeviceSubClass: 2
bDeviceProtocol: 1 (Interface Association Descriptor)
bMaxPacketSize0: 64
idVendor: Marvell Semiconductor, Inc. (0x1286)
idProduct: Unknown (0x4e31)
bcdDevice: 0x0100
iManufacturer: 1
iProduct: 2
iSerialNumber: 3
bNumConfigurations: 1
interface class舉例
INTERFACE DESCRIPTOR (1.0): class CDC-Data
bLength: 9
bDescriptorType: 0x04 (INTERFACE)
bInterfaceNumber: 1
bAlternateSetting: 0
bNumEndpoints: 2
bInterfaceClass: CDC-Data (0x0a)
bInterfaceSubClass: 0x00
bInterfaceProtocol: No class specific protocol required (0x00)
iInterface: 5