zoukankan      html  css  js  c++  java
  • STM32 USB设备描述符、配置描述符、端点描述符含义

    查了一整天的资料,自己把不懂的全部试了一遍

    一下是程序以及注释

    /* USB设备描述符*/
    const uint8_t CustomHID_DeviceDescriptor[CUSTOMHID_SIZ_DEVICE_DESC] =
      {
        0x12,                       /*bLength 描述符的长度*/
        USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType  描述符的类型(设备描述符为0x01)*/
        0x00,                       /*bcdUSB USB协议的版本*/
        0x02,
            
        0x00,                       /*bDeviceClass 类代码*/
        0x00,                       /*bDeviceSubClass 子类代码*/
        0x00,                       /*bDeviceProtocol  设备所使用的协议*/
        0x40,                       /*bMaxPacketSize 端点0的最大包长*/
            /*idVendor  厂商ID*/
        LOBYTE(USB_VID),                       
        HIBYTE(USB_VID),
            /*idProduct 设备ID*/
        LOBYTE(USB_PID),                       
        HIBYTE(USB_PID),
            
        0x00,                       /*bcdDevice rel 设备版本号*/
        0x02,
             
        1,                          /*描述生产厂家的字符串描述符的索引*/
        2,                          /*描述产品的字符串描述符的索引*/
        3,                          /*产品序列号的字符串描述符的索引*/
        0x01                        /*bNumConfigurations  可能的配置数*/
      }
      ; /* CustomHID_DeviceDescriptor */
    
    
    /* USB配置描述符 */
    /*   All Descriptor s (Configuration, Interface, Endpoint, Class, Vendor */
    const uint8_t CustomHID_ConfigDescriptor[CUSTOMHID_SIZ_CONFIG_DESC] =
      {
            //以下为配置描述符
        0x09, /* bLength: 端点描述符长度*/
        USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: 描述符类型 (配置描述符为0x02)  */
            
        LOBYTE(CUSTOMHID_SIZ_CONFIG_DESC),/* wTotalLength: 配置描述符集合总长度 */
        HIBYTE(CUSTOMHID_SIZ_CONFIG_DESC),
            
        0x01,         /* bNumInterfaces: 该配置所支持的接口数*/
        0x01,         /* bConfigurationValue: 该配置的值*/
        0x00,         /* iConfiguration: 描述配置的字符串描述符的索引*/
        0xA0,         /* bmAttributes:该设备的属性(总线供电,支持远程唤醒)
                                            bit 4 ... 0: 保留(必须为0)
                                            bit 5: 1表示支持远程唤醒
                                            bit 6: 1表示设备是自供电 0表示是总线供电
                                            bit 7: 保留(必须为1)    */
            
        0xC8,         /* MaxPower 设备所需要的电流(单位为2mA)400 mA*/
            
            
            //以下为接口描述符
        0x09,         /* bLength: 接口描述符长度*/
        USB_INTERFACE_DESCRIPTOR_TYPE,/* bDescriptorType: 描述符类型 (接口描述符为0x04)*/
        0x00,         /* bInterfaceNumber: 该接口编号(从0开始) */
        0x00,         /* bAlternateSetting: 该接口的备用编号 */
        0x02,         /* bNumEndpoints 该接口所使用的端点数*/
        0x03,         /* bInterfaceClass: 该接口所使用的类*/
        0x00,         /* bInterfaceSubClass : 该接口所使用的子类 */
        0x00,         /* nInterfaceProtocol : 该接口所使用的协议 0 =无,1 =键盘,2 =鼠标*/
        0,            /* iInterface: 描述该接口的字符串描述符的索引 */
            
            //以下为HID描述符
        0x09,         /* bLength: HID描述符长度 */
        HID_DESCRIPTOR_TYPE, /* bDescriptorType: 描述符类型 (接口描述符为0x21) */
        0x10,         /* bcdHID: HID 协议版本号 */
        0x01,
        0x00,         /* bCountryCode: 国家代码 (美式键盘代码为0x21)*/
        0x01,         /* bNumDescriptors:下级描述符的数量*/
        0x22,         /* bDescriptorType 下级描述符的类型*/
        LOBYTE(CUSTOMHID_SIZ_REPORT_DESC),/* wItemLength: 下级描述符的长度*/
        HIBYTE(CUSTOMHID_SIZ_REPORT_DESC),
            
            //以下为端点描述符
        /******************** Descriptor of Custom HID endpoints ******************/
        0x07,          /* bLength:端点描述符长度 */
        USB_ENDPOINT_DESCRIPTOR_TYPE, /* 描述符类型 (端点描述符为0x05)*/
        0x81,          /* bEndpointAddress:端点地址
                           bit 3 ... 0:端点号
                           bit 6 ... 4:保留(设置为0)
                           bit 7:0(OUT),1(IN)*/
        0x03,          /* bmAttributes: 端点属性 
                                 bit 1 ... 0:表示该端点的传输类型
                                                                                0  控制传输
                                                                                1  等时传输
                                                                                2  批量传输
                                                                                3  中断传输
                                                     bit 7 ... 2:如果该端点是非等时传输 则bit 7 ~ 2 保留(设置为0)
                                                                                如果该端点是等时传输
                                                                                bit 3 ... 2:    表示同步类型
                                                                                                                  0 无同步
                                                                                                                    1    异步
                                                                                                                    2 适配
                                                                                                                    3 同步
                                                                                bit 5 ... 4:    表示用途
                                                                                                                  0 数据端点
                                                                                                                    1    反馈端点
                                                                                                                    2 暗含反馈的数据端点
                                                                                                                    3 保留
                                                                                bit 7 ... 6:    保留*/
        0x40,          /* wMaxPacketSize: 该端点支持的最大包长度 */
        0x00,
        0x0A,          /* bInterval:端口的查询时间*/
            
            //以下为输出端点1描述符
        0x07,    /*bLength:端点描述符大小 */
        USB_ENDPOINT_DESCRIPTOR_TYPE,    /* 端点描述符类型*/
        0x01,              /* bEndpointAddress:端点地址
                           bit 3 ... 0:端点号
                           bit 6 ... 4:保留
                           bit 7:0(OUT),1(IN)*/
        0x03,    /* bmAttributes: 中断端点 */
        0x40,    /* wMaxPacketSize: 最多64个字节  */
        0x00,
        0x0A,    /* bInterval: 轮询间隔(20毫秒)*/
      };
  • 相关阅读:
    linux驱动开发学习一:创建一个字符设备
    如何高效的对有序数组去重
    找到缺失的第一个正整数
    .NET不可变集合已经正式发布
    中国人唯一不认可的成功——就是家庭的和睦,人生的平淡【转】
    自己动手搭建 MongoDB 环境,并建立一个 .NET HelloWorld 程序测试
    ASP.NET MVC 中如何用自定义 Handler 来处理来自 AJAX 请求的 HttpRequestValidationException 错误
    自己动手搭建 Redis 环境,并建立一个 .NET HelloWorld 程序测试
    ServiceStack 介绍
    一步一步实战扩展 ASP.NET Route,实现小写 URL、个性化 URL
  • 原文地址:https://www.cnblogs.com/huanjun/p/9605872.html
Copyright © 2011-2022 走看看