新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > USB的描述符及各種描述符之間的依賴關系

        USB的描述符及各種描述符之間的依賴關系

        作者: 時間:2016-12-15 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/201612/330287.htm

        2.接口描述符

        //定義標準的接口描述符結構

        typedef struct _INTERFACE_DESCRIPTOR_STRUCT
        {
        BYTE bLength;//接口描述符的字節數大小
        BYTE bDescriptorType;//接口描述符的類型編號
        BYTE bInterfaceNumber;//該接口的編號
        BYTE bAlternateSetting;//備用的接口描述符編號
        BYTE bNumEndpoints;//該接口使用的端點數,不包括端點0
        BYTE bInterfaceClass;//接口類型
        BYTE bInterfaceSubClass;//接口子類型
        BYTE bInterfaceProtocol;//接口遵循的協議
        BYTE iInterface;//描述該接口的字符串索引值
        }
        INTERFACE_DESCRIPTOR_STRUCT, * pINTERFACE_DESCRIPTOR_STRUCT;

        4.端點描述符

        //定義標準的端點描述符結構

        typedef struct _ENDPOINT_DESCRIPTOR_STRUCT
        {
        BYTE bLegth;//端點描述符字節數大小
        BYTE bDescriptorType;//端點描述符類型編號
        BYTE bEndpointAddress;//端點地址及輸入輸出屬性
        BYTE bmAttributes;//端點的傳輸類型屬性
        WORD wMaxPacketSize;//端點收、發的最大包大小
        BYTE bInterval;//主機查詢端點的時間間隔
        }
        ENDPOINT_DESCRIPTOR_STRUCT, * pENDPOINT_DESCRIPTOR_STRUCT;

        下面是一個配置描述符集合的定義
        typedef struct _CON_INT_ENDP_DESCRIPTOR_STRUCT
        {
        CONFIGURATION_DESCRIPTOR_STRUCT configuration_descriptor;
        INTERFACE_DESCRIPTOR_STRUCTinterface_descritor;
        ENDPOINT_DESCRIPTOR_STRUCTendpoint_descriptor[ENDPOINT_NUMBER];
        }CON_INT_ENDP_DESCRIPTOR_STRUCT;

        配置描述符集合的示例
        code CON_INT_ENDP_DESCRIPTOR_STRUCT con_int_endp_descriptor=//配置描述符集合
        {
        //configuration_descriptor//配置描述符
        {
        sizeof(CONFIGURATION_DESCRIPTOR_STRUCT),//配置描述符的字節數大小,這里為9
        CONFIGURATION_DESCRIPTOR,//配置描述符類型編號,配置描述符為2
        (sizeof(CONFIGURATION_DESCRIPTOR_STRUCT)+
        sizeof(INTERFACE_DESCRIPTOR_STRUCT)+
        sizeof(ENDPOINT_DESCRIPTOR_STRUCT)*ENDPOINT_NUMBER)*256+
        (sizeof(CONFIGURATION_DESCRIPTOR_STRUCT)+
        sizeof(INTERFACE_DESCRIPTOR_STRUCT)+
        sizeof(ENDPOINT_DESCRIPTOR_STRUCT)*ENDPOINT_NUMBER)/256,//配置描述符集合的總大小
        0x01,//只包含一個接口
        0x01,//該配置的編號
        0x00,//iConfiguration字段
        0x80,//采用總線供電,不支持遠程喚醒
        0xC8//從總線獲取最大電流400mA
        },
        //interface_descritor//接口描述符
        {
        sizeof(INTERFACE_DESCRIPTOR_STRUCT),//接口描述符的字節數大小,這里為9
        INTERFACE_DESCRIPTOR,//接口描述符類型編號,接口描述符為3
        0x00,//接口編號為4
        0x00,//該接口描述符的編號為0
        ENDPOINT_NUMBER,//非0端點數量為2,只使用端點主端點輸入和輸出
        0x08,//定義為USB大容量存儲設備
        0x06,//使用的子類,為簡化塊命令
        0x50,//使用的協議,這里使用單批量傳輸協議
        0x00//接口描述符字符串索引,為0,表示沒有字符串
        },

        //endpoint_descriptor[]
        {
        {//主端點輸入描述
        sizeof(ENDPOINT_DESCRIPTOR_STRUCT),//端點描述符的字節數大小,這里為7
        ENDPOINT_DESCRIPTOR,//端點描述符類型編號,端點描述符為5
        MAIN_POINT_IN,//端點號,主輸入端點
        ENDPOINT_TYPE_BULK,//使用的傳輸類型,批量傳輸
        0x4000,//該端點支持的最大包尺寸,64字節
        0x00//中斷掃描時間,對批量傳輸無效
        },

        {//主端點輸出描述
        sizeof(ENDPOINT_DESCRIPTOR_STRUCT),//端點描述符的字節數大小,這里為7
        ENDPOINT_DESCRIPTOR,//端點描述符類型編號,端點描述符為5
        MAIN_POINT_OUT,//端點號,主輸出端點
        ENDPOINT_TYPE_BULK,//使用的傳輸類型,批量傳輸
        0x4000,//該端點支持的最大包尺寸,64字節
        0x00//中斷掃描時間,對批量傳輸無效
        }
        }
        };

        其中關于端點的類型定義如下
        //定義的端點類型
        #define ENDPOINT_TYPE_CONTROL0x00//控制傳輸
        #define ENDPOINT_TYPE_ISOCHRONOUS0x01//同步傳輸
        #define ENDPOINT_TYPE_BULK0x02//批量傳輸
        #define ENDPOINT_TYPE_INTERRUPT0x03//中斷傳輸

        端點號的定義如下
        #define MAIN_POINT_OUT0x02//2號輸出端點
        #define MAIN_POINT_IN0x82//2號輸入端點


        上一頁 1 2 下一頁

        關鍵詞: USB描述符依賴關

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 石楼县| 武清区| 元氏县| 永安市| 河津市| 大冶市| 平利县| 巨鹿县| 玉林市| 马尔康县| 白水县| 科尔| 乌鲁木齐市| 巴塘县| 墨竹工卡县| 新宾| 克拉玛依市| 卓尼县| 若尔盖县| 安福县| 桐庐县| 天峻县| 三门县| 花莲县| 鹤山市| 松江区| 达日县| 土默特左旗| 桃园市| 谷城县| 容城县| 肇州县| 北海市| 泾川县| 锡林浩特市| 日照市| 武夷山市| 兴业县| 宁陵县| 南岸区| 渝中区|