色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          USB描述符詳解

          作者: 時間:2016-12-15 來源:網(wǎng)絡 收藏
          一、基本概念  

            1、USB協(xié)議本身很復雜,但方便在提供了統(tǒng)一的接口方式,使得驅動程序在使用設備的時候,工作簡化到了類似操作串行接口。

          本文引用地址:http://cafeforensic.com/article/201612/330281.htm

            2、USB設備可以看作提供了多個串口的設備,依據(jù)USB的規(guī)范,我們將每個串口稱作端點(Endpoint),要和這個端點通信,我們就要打開到這個端點的連接,這個連接就是管道(Pipe)。

            3、打開端點之后,就可以像串口一樣進行數(shù)據(jù)傳輸了。USB有4種不同類型的傳輸方式:控制傳輸(Control Transfer),批量傳輸(Bulk Transfer),中斷傳輸(Interrupt Transfer)和實時傳輸(IsochTransfer)。

            4、由于一個設備可能要適應多種情況,端點的設置會有多套,以備使用。端點設置稱為接口(Interface)。USB設備展現(xiàn)給我們能夠找到的東西就是這些Interface,我們選擇要用的Interface,就可以找到Endpoint,再打開Endpoint,就可以傳輸數(shù)據(jù)了。所以,在驅動程序開始的時候,需要記錄下這些Interface。

            5、例如:OV511+的端點0是控制端點,用來設置參數(shù)以及起停設備;端點1是實時傳輸端點,用來傳輸視頻。端點1有8套不同的設置,主要區(qū)別就在于一次傳輸?shù)臄?shù)據(jù)幀的大小,所以在USBDeviceAttach的時候,要記錄這些設置到驅動程序中,后面才能夠選用。

          二、描述符介紹
            標準的USB設備有5種符:設備描述符,配置描述符,字符串描述符,接口描述符,端點描述符。下面詳解:

          1、設備描述符:一個設備只有一個設備描述符

          typedef struct _USB_DEVICE_DESCRIPTOR_
          {
          BYTEbLength,
          BYTEbDescriptorType,
          WORDbcdUSB,
          BYTEbDeviceClass,
          BTYEbDeviceSubClass,
          BYTEbDeviceProtol,
          BYTEbMaxPacketSize0,
          WORDidVenderI,
          WORDidProduct,
          WORDbcdDevice,
          BYTEiManufacturer,
          BYTEiProduct,
          BYTEiSerialNumber,
          BYTEiNumConfiguations
          }USB_DEVICE_DESCRIPTOR;

          bLength: 描述符大?。潭?x12.
          bDescriptorType: 設備描述符類型.固定為0x01.
          bcdUSB: USB 規(guī)范發(fā)布號.表示了本設備能適用于那種協(xié)議,如2.0=0200,1.1=0110等.

          bDeviceClass: 類型代碼(由USB指定)。當它的值是0時,表示所有接口在配置描述符里,并且所有接口是獨立的。當它的值是1到FEH時,表示不同的接口關聯(lián)的。當它的值是FFH時,它是廠商自己定義的.
          bDeviceSubClass: 子類型代碼(由USB分配).如果bDeviceClass值是0,一定要設置為0.其它情況就跟據(jù)USB-IF組織定義的編碼.
          bDeviceProtocol: 協(xié)議代碼(由USB分配).如果使用USB-IF組織定義的協(xié)議,就需要設置這里的值,否則直接設置為0。如果廠商自己定義的可以設置為FFH.
          bMaxPacketSize0: 端點0最大分組大?。ㄖ挥?,16,32,64有效).

          idVendor: 供應商ID(由USB分配).

          idProduct: 產(chǎn)品ID(由廠商分配).由供應商ID和產(chǎn)品ID,就可以讓操作系統(tǒng)加載不同的驅動程序.

          bcdDevice: 設備出產(chǎn)編碼.由廠家自行設置.

          iManufacturer: 廠商描述符字符串索引.索引到對應的字符串描述符. 為0則表示沒有.
          iProduct: :產(chǎn)品描述符字符串索引.同上.
          iSerialNumber: 設備序列號字符串索引.同上.
          bNumConfigurations: 可能的配置數(shù).指配置字符串的個數(shù)
          2、配置描述符:配置描述符定義了設備的配置信息,一個設備可以有多個配置描述符
          typedef struct _USB_CONFIGURATION_DESCRIPTOR_
          {
          BYTEbLength,
          BYTEbDescriptorType,
          WORDwTotalLength,
          BYTEbNumInterfaces,
          BYTEbConfigurationValue,
          BYTEiConfiguration,
          BYTEbmAttributes,
          BYTEMaxPower
          }USB_CONFIGURATION_DESCRIPTOR;

          bLength: 描述符大?。潭?x09.
          bDescriptorType: 配置描述符類型.固定為0x02.
          wTotalLength: 返回整個數(shù)據(jù)的長度.指此配置返回的配置描述符,接口描述符以及端點描述符的全部大?。?br />bNumInterfaces: 配置所支持的接口數(shù).指該配置配備的接口數(shù)量,也表示該配置下接口描述符數(shù)量.
          bConfigurationValue: 作為Set Configuration的一個參數(shù)選擇配置值.
          iConfiguration: 用于描述該配置字符串描述符的索引.
          bmAttributes: 供電模式選擇.Bit4-0保留,D7:總線供電,D6:自供電,D5:遠程喚醒.
          MaxPower: 總線供電的USB設備的最大消耗電流.以2mA為單位.
          3、接口描述符:接口描述符說明了接口所提供的配置,一個配置所擁有的接口數(shù)量通過配置描述符的bNumInterfaces決定
          typedef struct _USB_INTERFACE_DESCRIPTOR_
          {
          BYTEbLength,
          BYTEbDescriptorType,
          BYTEbInterfaceNumber,
          BYTEbAlternateSetting,
          BYTEbNumEndpoint,
          BYTEbInterfaceClass,
          BYTEbInterfaceSubClass,
          BYTEbInterfaceProtocol,
          BYTEiInterface
          }USB_INTERFACE_DESCRIPTOR;

          bLength: 描述符大?。潭?x09.
          bDescriptorType: 接口描述符類型.固定為0x04.
          bInterfaceNumber: 該接口的編號.
          bAlternateSetting: 用于為上一個字段選擇可供替換的位置.即備用的接口描述符標號.
          bNumEndpoint: 使用的端點數(shù)目.端點0除外.
          bInterfaceClass: 類型代碼(由USB分配).
          bInterfaceSunClass: 子類型代碼(由USB分配).
          bInterfaceProtocol: 協(xié)議代碼(由USB分配).
          iInterface: 字符串描述符的索引
          4、端點描述符:USB設備中的每個端點都有自己的端點描述符,由接口描述符中的bNumEndpoint決定其數(shù)量
          typedef struct _USB_ENDPOINT_DESCRIPTOR_
          {
          BYTEbLength,
          BYTEbDescriptorType,
          BYTEbEndpointAddress,
          BYTEbmAttributes,
          WORDwMaxPacketSize,
          BYTEbInterval
          }USB_ENDPOINT_DESCRIPTOR;

          bLength: 描述符大小.固定為0x07.
          bDescriptorType: 接口描述符類型.固定為0x05.
          bEndpointType: USB設備的端點地址.Bit7,方向,對于控制端點可以忽略,1/0:IN/OUT.Bit6-4,保留.BIt3-0:端點號.
          bmAttributes: 端點屬性.Bit7-2,保留.BIt1-0:00控制,01同步,02批量,03中斷.
          wMaxPacketSize: 本端點接收或發(fā)送的最大信息包大?。?br />bInterval: 輪訓數(shù)據(jù)傳送端點的時間間隔.對于批量傳送和控制傳送的端點忽略.對于同步傳送的端點,必須為1,對于中斷傳送的端點,范圍為1-255.
          5、字符串描述符:其中字符串描述符是可選的.如果不支持字符串描述符,其設備,配置,接口描述符內的所有字符串描述符索引都必須為0
          typedef struct _USB_STRING_DESCRIPTION_
          {
          BYTEbLength,
          BYTEbDescriptionType,
          BYTEbString[1];
          }USB_STRING_DESCRIPTION;

          bLength: 描述符大?。烧麄€字符串的長度加上bLength和bDescriptorType的長度決定.
          bDescriptorType: 接口描述符類型.固定為0x03.
          bString[1]: Unicode編碼字符串.


          關鍵詞: USB描述

          評論


          技術專區(qū)

          關閉