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毫秒)*/
  };

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM