打印

GD32 USB 复合设备文件描述符

[复制链接]
1902|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Bruing|  楼主 | 2019-1-31 10:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

使用GD32 两个接口,分别用于鼠标和上位机通信。

鼠标使用端点1 进行通信 (只用到EP1_IN)

上位机通信使用端点2  (EP2_IN、EP2_OUT)


沙发
Bruing|  楼主 | 2019-1-31 10:05 | 只看该作者
配置描述符如下:
/* USB HID device configuration descriptor set */
const uint8_t USBD_HID_CfgDesc[USB_HID_CONFIG_DESC_SIZE] =
{
    0x09,         /* bLength: configuration descriptor size */
    USB_DESCTYPE_CONFIGURATION, /* bDescriptorType: configuration descriptor type */
    USB_HID_CONFIG_DESC_SIZE,   /* wTotalLength: configuration descriptor set total length */
    0x00,
    0x02,         /* bNumInterfaces: 2 interface */
    0x01,         /* bConfigurationValue: configuration value */
    0x00,         /* iConfiguration: index of string descriptor describing the configuration */
    0xA0,         /* bmAttributes: device attributes (bus powered and support remote wakeup) */
    0x32,         /* bMaxPower 100 mA: this current is used for detecting Vbus */




   /*
    interface 0 for mouse.
    huohongpeng 2017-02-10
    */
    /************** interface descriptor  0****************/
    0x09,         /* bLength: interface descriptor size */
    USB_DESCTYPE_INTERFACE,/* bDescriptorType: interface descriptor type */
    0x00,         /* bInterfaceNumber: number of interface */
    0x00,         /* bAlternateSetting: alternate setting */
    0x01,         /* bNumEndpoints: just use 1 endpoint for Tx */
    0x03,         /* bInterfaceClass: HID class */
    0x01,         /* bInterfaceSubClass: 1 = BIOS boot, 0 = no boot */
    0x02,         /* nInterfaceProtocol: 0 = none, 1 = keyboard, 2 = mouse */
    0x00,         /* iInterface: index of interface string descriptor */


    /******************** HID descriptor  0********************/
    0x09,         /* bLength: HID descriptor size */
    HID_DESC_TYPE,/* bDescriptorType: HID */
    0x11,         /* bcdHID: HID class protocol(HID1.11) */
    0x01,
    0x00,         /* bCountryCode: device country code */
    0x01,         /* bNumDescriptors: number of HID class descriptors to follow */
    0x22,         /* bDescriptorType: followed class descriptor type(report descriptor) */
    USB_HID_REPORT_DESC0_SIZE, /* wDescriptorLength: total length of report descriptor */
    0x00,


    /******************** Mouse endpoint descriptor ********************/
    0x07,          /* bLength: Endpoint Descriptor size */
    USB_DESCTYPE_ENDPOINT, /* bDescriptorType: endpoint descriptor type */
    HID1_IN_EP,     /* bEndpointAddress: endpoint address (EP1_IN) */
    0x03,          /* bmAttributes: endpoint attribute(interrupt endpoint) */
    HID1_IN_PACKET, /* wMaxPacketSize: 4 bytes max */
    0x00,
    0x0A,          /* bInterval: polling interval (10 ms) */






    /*
    interface 1 for host communication to mcu.
    huohongpeng 2017-02-10
    */
    /************** interface descriptor  1****************/
    0x09,         /* bLength: interface descriptor size */
    USB_DESCTYPE_INTERFACE,/* bDescriptorType: interface descriptor type */
    0x01,         /* bInterfaceNumber: number of interface */
    0x00,         /* bAlternateSetting: alternate setting */
    0x02,         /* bNumEndpoints: use 2 endpoint for Tx and Rx*/
    0x03,         /* bInterfaceClass: HID class */
    0x00,         /* bInterfaceSubClass: 1 = BIOS boot, 0 = no boot */
    0x00,         /* nInterfaceProtocol: 0 = none, 1 = keyboard, 2 = mouse */
    0x00,         /* iInterface: index of interface string descriptor */


    /******************** HID descriptor  1********************/
    0x09,         /* bLength: HID descriptor size */
    HID_DESC_TYPE,/* bDescriptorType: HID */
    0x11,         /* bcdHID: HID class protocol(HID1.11) */
    0x01,
    0x00,         /* bCountryCode: device country code */
    0x01,         /* bNumDescriptors: number of HID class descriptors to follow */
    0x22,         /* bDescriptorType: followed class descriptor type(report descriptor) */
    USB_HID_REPORT_DESC1_SIZE, /* wDescriptorLength: total length of report descriptor */
    0x00,


    /****************host communication mcu Tx endpoint descriptor ***********/
    0x07,          /* bLength: Endpoint Descriptor size */
    USB_DESCTYPE_ENDPOINT, /* bDescriptorType: endpoint descriptor type */
    HID2_IN_EP,     /* bEndpointAddress: endpoint address (EP2_IN) */
    0x03,          /* bmAttributes: endpoint attribute(interrupt endpoint) */
    HID2_IN_PACKET, /* wMaxPacketSize: 64 bytes max */
    0x00,
    0x0A,          /* bInterval: polling interval (10 ms) */


    /************** host communication mcu Tx endpoint descriptor ************/
    0x07,          /* bLength: Endpoint Descriptor size */
    USB_DESCTYPE_ENDPOINT, /* bDescriptorType: endpoint descriptor type */
    HID2_OUT_EP,     /* bEndpointAddress: endpoint address (EP2_OUT) */
    0x03,          /* bmAttributes: endpoint attribute(interrupt endpoint) */
    HID2_OUT_PACKET, /* wMaxPacketSize: 64 bytes max */
    0x00,
    0x0A,          /* bInterval: polling interval (10 ms) */
};
---------------------

使用特权

评论回复
板凳
Bruing|  楼主 | 2019-1-31 10:06 | 只看该作者
鼠标报告描述符如下:
/*
for mcu and host communication HID report descriptor 
huohongpeng 2017-02-10
create tools: HID Description Tool
*/
const uint8_t HID_ReportDesc1[USB_HID_REPORT_DESC1_SIZE] =
{
    0x05,   0x40,   /* USAGE_PAGE (HDWB Page)    */ 
    0x09,   0x01,   /* USAGE (host commnication) */
    0xa1,   0x01,   /* COLLECTION (Application)  */


    /* The Input Report */
    0x09,   0x03,   /* USAGE (Vendor defined)    */
    0x15,   0x00,   /* LOGICAL_MINIMUM (0)       */
    0x25,   0xff,   /* LOGICAL_MAXIMUM (255)     */
    0x75,   0x08,   /* REPORT_SIZE (8)           */
    0x95,   0x40,   /* REPORT_COUNT (64)         */
    0x81,   0x02,   /* INPUT (Data, Var, Abs)    */


    /* The Output Report */
    0x09,   0x04,   /* USAGE (Vendor defined)    */
    0x15,   0x00,   /* LOGICAL_MINIMUM (0)       */
    0x25,   0xff,   /* LOGICAL_MAXIMUM (1)       */
    0x75,   0x08,   /* REPORT_SIZE (8)           */
    0x95,   0x40,   /* REPORT_COUNT (64)         */
    0x91,   0x02,   /* OUTPUT (Data, Var, Abs)   */
    0xc0            /* END_COLLECT               */
};
---------------------

使用特权

评论回复
地板
磨砂| | 2019-2-9 10:26 | 只看该作者
鼠标报告符是什么意思啊

使用特权

评论回复
5
lvben5d| | 2019-2-13 09:06 | 只看该作者
本帖最后由 lvben5d 于 2019-2-13 09:12 编辑

楼主 EP2_IN,EP2_OUT  可以同时 使能? 我对这个双向端点理解还是不行。
  • 一个具体的端点只能工作在一种传输模式下。通常我们把工作在什么模式下的端点,叫做什么端点。如控制端点、批量端点、同步端点、中断端点。

使用特权

评论回复
6
angerbird| | 2019-2-19 21:33 | 只看该作者
这个的看相关的寄存器的设置的

使用特权

评论回复
7
tongbu2015| | 2019-2-27 23:42 | 只看该作者
这个跟I2C总线的类似的哈

使用特权

评论回复
8
不明所以| | 2019-11-1 10:39 | 只看该作者
楼主,你好,我新增加了一个输入端点,但是触发不了端点号,端点初始化我也加过了
请问楼主知道问题吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

71

主题

308

帖子

1

粉丝