• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > USB 描述符及其間的關系

    USB 描述符及其間的關系

    作者: 時間:2016-12-12 來源:網絡 收藏
    USB是個通用的總線,端口都是統一的。但是USB設備卻各種各樣,
    例如USB鼠標,USB鍵盤,U盤等等,那么USB主機是如何識別出不同的
    設備的呢?這就要依賴于描述符了。
    USB的描述符主要有設備描述符,配置描述符,接口描述符,
    端點描述符,字符串描述符,HID描述符,報告描述符等等。
    關于報告描述符,請看我以前寫的:《USBHID報告及報告描述符簡介》
    http://group.ednchina.com/93/198.aspx。
    一個USB設備有一個設備描述符,設備描述符里面決定了該設備有多
    少種配置,每種配置描述符對應著配置描述符;而在配置描述符中又定義
    了該配置里面有多少個接口,每個接口有對應的接口描述符;在接口描
    述符里面又定義了該接口有多少個端點,每個端點對應一個端點描述符;
    端點描述符定義了端點的大小,類型等等。由此我們可以看出,USB的
    描述符之間的關系是一層一層的,最上一層是設備描述符,下面是配置
    描述符,再下面是接口描述符,再下面是端點描述符。在獲取描述符時,
    先獲取設備描述符,然后再獲取配置描述符,根據配置描述符中的配置
    集合長度,一次將配置描述符、接口描述符、端點描述符一起一次讀回。
    其中可能還會有獲取設備序列號,廠商字符串,產品字符串等。

    每種描述符都有自己獨立的編號,如下:


    #defineDEVICE_DESCRIPTOR0x01//設備描述符
    #defineCONFIGURATION_DESCRIPTOR0x02//配置描述符
    #defineSTRING_DESCRIPTOR0x03//字符串描述符
    #defineINTERFACE_DESCRIPTOR0x04//接口描述符
    #defineENDPOINT_DESCRIPTOR0x05//端點描述符


    下面分別詳細介紹一下各描述符。
    1.設備描述符

    本文引用地址:http://www.czjhyjcfj.com/article/201612/328715.htm

    //定義標準的設備描述符結構

    typedefstruct_DEVICE_DCESCRIPTOR_STRUCT
    {


    BYTEblength;//設備描述符的字節數大小
    BYTEbDescriptorType;//設備描述符類型編號
    WORDbcdUSB;//USB版本號
    BYTEbDeviceClass;//USB分配的設備類代碼
    BYTEbDeviceSubClass;//USB分配的子類代碼
    BYTEbDeviceProtocol;//USB分配的設備協議代碼
    BYTEbMaxPacketSize0;//端點0的最大包大小
    WORDidVendor;//廠商編號
    WORDidProduct;//產品編號
    WORDbcdDevice;//設備出廠編號
    BYTEiManufacturer;//設備廠商字符串的索引
    BYTEiProduct;//描述產品字符串的索引
    BYTEiSerialNumber;//描述設備序列號字符串的索引
    BYTEbNumConfigurations;//可能的配置數量


    }
    DEVICE_DESCRIPTOR_STRUCT,*pDEVICE_DESCRIPTOR_STRUCT;

    //實際的設備描述符示例
    codeDEVICE_DESCRIPTOR_STRUCTdevice_descriptor=//設備描述符
    {

    sizeof(DEVICE_DESCRIPTOR_STRUCT),//設備描述符的字節數大小,這里是18字節
    DEVICE_DESCRIPTOR,//設備描述符類型編號,設備描述符是01
    0x1001,//USB版本號,這里是USB01.10,即USB1.1。由于51是大端模式,所以高低字節交換
    0x00,//USB分配的設備類代碼,0表示類型在接口描述符中定義
    0x00,//USB分配的子類代碼,上面一項為0時,本項也要設置為0
    0x00,//USB分配的設備協議代碼,上面一項為0時,本項也要設置為0
    0x10,//端點0的最大包大小,這里為16字節
    0x7104,//廠商編號,這個是需要跟USB組織申請的ID號,表示廠商代號。
    0xf0ff,//該產品的編號,跟廠商編號一起配合使用,讓主機注冊該設備并加載相應的驅動程序
    0x0100,//設備出廠編號
    0x01,//設備廠商字符串的索引,在獲取字符串描述符時,使用該索引號來識別不同的字符串
    0x02,//描述產品字符串的索引,同上
    0x03,//描述設備序列號字符串的索引,同上
    0x01//可能的配置數為1,即該設備只有一個配置

    };


    2.配置描述符



    //定義標準的配置描述符結構

    typedefstruct_CONFIGURATION_DESCRIPTOR_STRUCT
    {
    BYTEbLength;//配置描述符的字節數大小
    BYTEbDescriptorType;//配置描述符類型編號
    WORDwTotalLength;//此配置返回的所有數據大小
    BYTEbNumInterfaces;//此配置所支持的接口數量
    BYTEbConfigurationValue;//Set_Configuration命令所需要的參數值
    BYTEiConfiguration;//描述該配置的字符串的索引值
    BYTEbmAttributes;//供電模式的選擇
    BYTEMaxPower;//設備從總線提取的最大電流
    }
    CONFIGURATION_DESCRIPTOR_STRUCT,*pCONFIGURATION_DESCRIPTOR_STRUCT;


    關鍵詞: USB描述

    評論


    技術專區

    關閉
    主站蜘蛛池模板: 马边| 金山区| 荥阳市| 资兴市| 濮阳市| 横峰县| 偃师市| 淄博市| 常德市| 伊吾县| 苗栗县| 民权县| 衡阳县| 来凤县| 清河县| 杭锦后旗| 皮山县| 佛坪县| 澄城县| 淮北市| 阜宁县| 尚志市| 汤原县| 蚌埠市| 嘉禾县| 鲜城| 五华县| 平陆县| 兖州市| 甘孜县| 华亭县| 乌鲁木齐县| 鹿泉市| 北辰区| 塔城市| 鹰潭市| 普宁市| 长海县| 新乡市| 庆云县| 海淀区|