网站导航: 首页 > 设计参考 > 正文 文章搜索
USB入门系列之七 —— USB的描述符及各种描述符之间的依赖关系
 
文章编号:
081126112737
文章分类: 接口技术 USB
点 击:
...
关 键 词: 入门,描述符
文章来源:
EDN China(作者:computeroo)
摘 要:

3.接口描述符
 

 
  1. //定义标准的接口描述符结构   
  2.   
  3. typedef struct _INTERFACE_DESCRIPTOR_STRUCT   
  4. {   
  5.         BYTE bLength;                               //接口描述符的字节数大小   
  6.         BYTE bDescriptorType;                       //接口描述符的类型编号   
  7.         BYTE bInterfaceNumber;                      //该接口的编号   
  8.         BYTE bAlternateSetting;                     //备用的接口描述符编号   
  9.         BYTE bNumEndpoints;                         //该接口使用的端点数,不包括端点0   
  10.         BYTE bInterfaceClass;                       //接口类型   
  11.         BYTE bInterfaceSubClass;                    //接口子类型   
  12.         BYTE bInterfaceProtocol;                    //接口遵循的协议   
  13.         BYTE iInterface;                            //描述该接口的字符串索引值   
  14. }   
  15. INTERFACE_DESCRIPTOR_STRUCT, * pINTERFACE_DESCRIPTOR_STRUCT;   

4.端点描述符

 

 
  1. //定义标准的端点描述符结构   
  2.   
  3. typedef struct _ENDPOINT_DESCRIPTOR_STRUCT   
  4. {   
  5.         BYTE bLegth;                                //端点描述符字节数大小   
  6.         BYTE bDescriptorType;                       //端点描述符类型编号   
  7.         BYTE bEndpointAddress;                      //端点地址及输入输出属性   
  8.         BYTE bmAttributes;                          //端点的传输类型属性   
  9.         WORD wMaxPacketSize;                        //端点收、发的最大包大小   
  10.         BYTE bInterval;                             //主机查询端点的时间间隔   
  11. }   
  12. ENDPOINT_DESCRIPTOR_STRUCT, * pENDPOINT_DESCRIPTOR_STRUCT;   

下面是一个配置描述符集合的定义
 

 
  1. typedef struct _CON_INT_ENDP_DESCRIPTOR_STRUCT   
  2. {   
  3.         CONFIGURATION_DESCRIPTOR_STRUCT configuration_descriptor;   
  4.         INTERFACE_DESCRIPTOR_STRUCT  interface_descritor;   
  5.         ENDPOINT_DESCRIPTOR_STRUCT  endpoint_descriptor[ENDPOINT_NUMBER];   
  6. }CON_INT_ENDP_DESCRIPTOR_STRUCT;   


配置描述符集合的示例
 

 
  1. code CON_INT_ENDP_DESCRIPTOR_STRUCT con_int_endp_descriptor=  //配置描述符集合   
  2. {   
  3.         //configuration_descriptor                     //配置描述符   
  4.         {   
  5.                 sizeof(CONFIGURATION_DESCRIPTOR_STRUCT),      //配置描述符的字节数大小,这里为9   
  6.                         CONFIGURATION_DESCRIPTOR,                     //配置描述符类型编号,配置描述符为2   
  7.                         (sizeof(CONFIGURATION_DESCRIPTOR_STRUCT)+   
  8.                         sizeof(INTERFACE_DESCRIPTOR_STRUCT)+   
  9.                         sizeof(ENDPOINT_DESCRIPTOR_STRUCT)*ENDPOINT_NUMBER)*256+   
  10.                         (sizeof(CONFIGURATION_DESCRIPTOR_STRUCT)+   
  11.                         sizeof(INTERFACE_DESCRIPTOR_STRUCT)+   
  12.                         sizeof(ENDPOINT_DESCRIPTOR_STRUCT)*ENDPOINT_NUMBER)/256,   //配置描述符集合的总大小   
  13.                         0x01,                                  //只包含一个接口   
  14.                         0x01,                                  //该配置的编号   
  15.                         0x00,                                  //iConfiguration字段   
  16.                         0x80,                                  //采用总线供电,不支持远程唤醒   
  17.                         0xC8                                   //从总线获取最大电流400mA   
  18.         },   
  19.         //interface_descritor                   //接口描述符   
  20.         {   
  21.                         sizeof(INTERFACE_DESCRIPTOR_STRUCT),   //接口描述符的字节数大小,这里为9   
  22.                                 INTERFACE_DESCRIPTOR,                  //接口描述符类型编号,接口描述符为3   
  23.                                 0x00,                                  //接口编号为4   
  24.                                 0x00,                                  //该接口描述符的编号为0   
  25.                                 ENDPOINT_NUMBER,                       //非0端点数量为2,只使用端点主端点输入和输出   
  26.                                 0x08,                                  //定义为USB大容量存储设备   
  27.                                 0x06,                                  //使用的子类,为简化块命令   
  28.                                 0x50,                                  //使用的协议,这里使用单批量传输协议   
  29.                                 0x00                                   //接口描述符字符串索引,为0,表示没有字符串   
  30.          },   
  31.                    
  32.          //endpoint_descriptor[]   
  33.          {   
  34.                    {  主端点输入描述   
  35.                                 sizeof(ENDPOINT_DESCRIPTOR_STRUCT),  //端点描述符的字节数大小,这里为7   
  36.                                         ENDPOINT_DESCRIPTOR,                 //端点描述符类型编号,端点描述符为5   
  37.                                         MAIN_POINT_IN,                       //端点号,主输入端点   
  38.                                         ENDPOINT_TYPE_BULK,                  //使用的传输类型,批量传输   
  39.                                         0x4000,                              //该端点支持的最大包尺寸,64字节   
  40.                                         0x00                                 //中断扫描时间,对批量传输无效   
  41.                    },   
  42.                            
  43.                    {  //主端点输出描述   
  44.                                    sizeof(ENDPOINT_DESCRIPTOR_STRUCT),  //端点描述符的字节数大小,这里为7   
  45.                                            ENDPOINT_DESCRIPTOR,                 //端点描述符类型编号,端点描述符为5   
  46.                                            MAIN_POINT_OUT,                      //端点号,主输出端点   
  47.                                            ENDPOINT_TYPE_BULK,                  //使用的传输类型,批量传输   
  48.                                            0x4000,                              //该端点支持的最大包尺寸,64字节   
  49.                                            0x00                                 //中断扫描时间,对批量传输无效   
  50.                     }   
  51.           }   
  52. };   



其中关于端点的类型定义如下
 

 
  1. //定义的端点类型   
  2. #define ENDPOINT_TYPE_CONTROL           0x00  //控制传输   
  3. #define ENDPOINT_TYPE_ISOCHRONOUS       0x01  //同步传输   
  4. #define ENDPOINT_TYPE_BULK              0x02  //批量传输   
  5. #define ENDPOINT_TYPE_INTERRUPT         0x03  //中断传输   


端点号的定义如下
 

 
  1. #define MAIN_POINT_OUT           0x02   //2号输出端点   
  2. #define MAIN_POINT_IN            0x82   //2号输入端点   
  3.    

 

温馨提示:

  百合电子工作室有一个关于USB开发方面的开源项目-Easy USB 51 Programer,整个开发过程写得非常详细,不防参考一下,您还可以进入她的论坛参与此项目的讨论。

 
相关文章:

上一页 12
 
最新开源项目
 
 
  查看更多...  
 
本站相关产品   淘宝网店
 




 
  查看更多...  

 

本站程序由百合电子工作室开发和维护
Copyright @ baihe electric studio
渝ICP备09006681号-4