USB協(xié)議(一)

內(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 classinterface class阻逮。具體的class值以及含義粱快,參考define class

  • class 包含
    1. class
    1. subclass
    1. 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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末漫雷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鳍咱,更是在濱河造成了極大的恐慌降盹,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谤辜,死亡現(xiàn)場離奇詭異澎现,居然都是意外死亡,警方通過查閱死者的電腦和手機每辟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來干旧,“玉大人渠欺,你說我怎么就攤上這事∽得校” “怎么了挠将?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長编整。 經(jīng)常有香客問我舔稀,道長,這世上最難降的妖魔是什么掌测? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任内贮,我火速辦了婚禮,結(jié)果婚禮上汞斧,老公的妹妹穿的比我還像新娘夜郁。我一直安慰自己,他們只是感情好粘勒,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布竞端。 她就那樣靜靜地躺著,像睡著了一般庙睡。 火紅的嫁衣襯著肌膚如雪事富。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天乘陪,我揣著相機與錄音统台,去河邊找鬼。 笑死暂刘,一個胖子當著我的面吹牛饺谬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼募寨,長吁一口氣:“原來是場噩夢啊……” “哼族展!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拔鹰,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤仪缸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后列肢,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恰画,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年瓷马,在試婚紗的時候發(fā)現(xiàn)自己被綠了拴还。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡欧聘,死狀恐怖片林,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情怀骤,我是刑警寧澤费封,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站蒋伦,受9級特大地震影響弓摘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜痕届,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一韧献、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧研叫,春花似錦势决、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至渤昌,卻和暖如春虽抄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背独柑。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工迈窟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人忌栅。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓车酣,卻偏偏與公主長得像曲稼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子湖员,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容