USB協議(一)

內容原創,未經本人同意請勿轉載。聯系本人:jianshu_kevin@126.com

初次接觸USB的同學,可能會被里面各種名詞給搞暈,沒關系我們下面就來梳理一下這些知識,希望能幫助大家理解USB。

一,從最常見的名詞說起

1.1 什么是USB

這個我就不多解釋了,直譯就是通用串行總線。再不明白的就百度。

1.2 USB協議版本

  • USB 1.0/1.1(low/full speed),傳輸速率最大為12Mbps
  • USB 2.0(high speed),傳輸速率最大480Mbps
  • USB 3.0(super speed),傳輸速率最大5Gbps

協議版本向下兼容

1.3 USB接口分類

  • Type A,即使我們電腦上的那種接口。
  • Type B,不太常見,比較方正的T型接口,有的嵌入式開發板會用。
  • Type C,現在開始流行起來了,最大的好處就是可以盲插,而不用區分正反。
  • Micro/mini,手機上比較常見。

不管哪種接口,用的線都是4根,只是形狀不同而已。

二. 協議相關的名詞解析

2.1 描述符(description)

談到USB描述符,不得不說USB最強悍的地方就在這里。一個口可以插很多的設備,可以插U盤、上網卡、音頻設備、還有的是復合設備,一個設備插上后可以虛擬出多個設備出來,太強了。
主設備之所以能區分不同的從設備,靠的就是描述符。 于是USB協議里就規定了各種不同的USB描述符。讓我們先看一下USB協議里四大描述符之間的關系

+------設備描述符
        +----------配置描述符1
            +----------接口描述符1
                +----------端點描述符1
                +----------端點描述符2
                +....
            +----------接口描述符2
                +----------端點描述符1
                +....
            +....
        +----------配置描述符2
            +----------接口描述符1
                +----------端點描述符1
                +----------端點描述符2
                +....
            +....
        +....

2.1.1 設備描述(device description)

故名思意用來描述USB設備的,一個設備只有一個設備描述符,包含了設備類型、設備遵循的協議、廠商ID、產品id、序列號等,一個完整的設備描述符如下:

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)

配置描述就是用來配置設備的,沒錯,就是這么簡單。但是要記住一點:一個設備同一時刻只能有一種配置生效,而且要區分配置和設置的區別。還是來看一下配置描述符的內容

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)

設置是什么,暫時不多解釋,后面再談。

2.1.3 接口描述符(interface description)

一個interface就代表一個設備。USB interface用來處理一類 USB 邏輯連接, 例如一個鼠標, 一個鍵盤, 或者一個音頻流. 一些 USB 設備有多個接口。也就是復合設備,例如一個 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只能承載一個方向的數據。endpiont分為如下幾種:

  • CONTROL

控制端點被用來允許對 USB 設備的不同部分存取. 通常用作配置設備, 獲取關于設備的信息, 發送命令到設備, 或者獲取關于設備的狀態報告. 這些端點在尺寸上常常較小. 每個 USB 設備有一個控制端點稱為"端點 0", 被 USB 核用來在插入時配置設備. 這些傳送由 USB 協議保證來總有足夠的帶寬使它到達設備.

  • INTERRUPT

中斷端點傳送小量的數據, 以固定的速率在每次 USB 主請求設備數據時. 這些端點對 USB 鍵盤和鼠標來說是主要的傳送方法. 它們還用來傳送數據到 USB 設備來控制設備, 但通常不用來傳送大量數據. 這些傳送由 USB 協議保證來總有足夠的帶寬使它到達設備.

  • BULK

塊端點傳送大量的數據. 這些端點常常比中斷端點大(它們一次可持有更多的字符). 它們是普遍的, 對于需要傳送不能有任何數據丟失的數據. 這些傳送不被 USB 協議保證來一直使它在特定時間范圍內完成. 如果總線上沒有足夠的空間來發送整個 BULK 報文, 它被分為多次傳送到或者從設備. 這些端點普遍在打印機, 存儲器, 和網絡設備上.

  • ISOCHRONOUS

同步端點也傳送大量數據, 但是這個數據常常不被保證它完成. 這些端點用在可以處理數據丟失的設備中, 并且更多依賴于保持持續的數據流. 實時數據收集, 例如音頻和視頻設備, 一直都使用這些端點.

BULK端點描述符數據內容如下:

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用來描述設備屬于哪種設備,例如音頻、鍵盤、U盤等。設備通過class來確認和加載相應的驅動。class分為device classinterface class。具體的class值以及含義,參考define class

  • class 包含
    1. class
    1. subclass
    1. protocol

組合在一起,用來指出設備具體功能。

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容