• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            USB描述符詳解

            一、基本概念  

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

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

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

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

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

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

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

            typedef struct _USB_DEVICE_DESCRIPTOR_
            {
                BYTE        bLength,
                BYTE        bDescriptorType,
                WORD      bcdUSB,
                BYTE        bDeviceClass,
                BTYE        bDeviceSubClass,
                BYTE        bDeviceProtol,
                BYTE        bMaxPacketSize0,
                WORD      idVenderI,
                WORD      idProduct,
                WORD      bcdDevice,
                BYTE        iManufacturer,
                BYTE        iProduct,
                BYTE        iSerialNumber,
                BYTE        iNumConfiguations
            }USB_DEVICE_DESCRIPTOR;

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

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

            idProduct : 產品ID(由廠商分配).由供應商ID和產品ID,就可以讓操作系統加載不同的驅動程序.
            bcdDevice : 設備出產編碼.由廠家自行設置.

            iManufacturer : 廠商描述符字符串索引.索引到對應的字符串描述符. 為0則表示沒有.
            iProduct : :產品描述符字符串索引.同上.
            iSerialNumber : 設備序列號字符串索引.同上.
            bNumConfigurations : 可能的配置數.指配置字符串的個數
            2、配置描述符:配置描述符定義了設備的配置信息,一個設備可以有多個配置描述符
            typedef struct _USB_CONFIGURATION_DESCRIPTOR_
            {
                BYTE      bLength,
                BYTE      bDescriptorType,
                WORD    wTotalLength,
                BYTE      bNumInterfaces,
                BYTE      bConfigurationValue,
                BYTE      iConfiguration,
                BYTE      bmAttributes,
                BYTE      MaxPower
            }USB_CONFIGURATION_DESCRIPTOR;

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

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

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

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

            本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/alien75/archive/2009/09/30/4622319.aspx

            posted on 2010-11-18 11:30 wrh 閱讀(2050) 評論(0)  編輯 收藏 引用

            導航

            <2011年8月>
            31123456
            78910111213
            14151617181920
            21222324252627
            28293031123
            45678910

            統計

            常用鏈接

            留言簿(19)

            隨筆檔案

            文章檔案

            收藏夾

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            亚洲AV无码久久| 一级做a爰片久久毛片免费陪| 久久久久成人精品无码中文字幕| 无码精品久久久久久人妻中字| 国产成人久久精品区一区二区| 国产91久久综合| 无码八A片人妻少妇久久| 国产精品欧美久久久天天影视| 欧美久久综合九色综合| 久久婷婷五月综合97色| 女同久久| www久久久天天com| 久久99久国产麻精品66| 国产激情久久久久影院小草 | 无码国内精品久久人妻麻豆按摩 | 久久久久四虎国产精品| 久久综合鬼色88久久精品综合自在自线噜噜 | 亚洲美日韩Av中文字幕无码久久久妻妇| 久久久久久综合网天天| 99热成人精品免费久久| 久久精品无码专区免费东京热 | 久久国产免费观看精品| 色婷婷综合久久久久中文一区二区| 久久e热在这里只有国产中文精品99| 久久婷婷激情综合色综合俺也去| 久久久亚洲欧洲日产国码是AV| 久久99久久无码毛片一区二区| 久久免费视频观看| 久久久久综合网久久| 国产精品久久久久aaaa| 九九99精品久久久久久| 久久精品国产第一区二区三区| 久久伊人五月丁香狠狠色| 性做久久久久久免费观看| 亚洲国产成人久久一区WWW| 国内精品久久久久久久亚洲 | 亚洲综合久久久| 欧美亚洲国产精品久久高清 | 久久精品亚洲AV久久久无码| 久久这里的只有是精品23| 久久中文字幕人妻丝袜|