文章目录
- 前言
- 设备描述符
- 完整描述符
- 配置描述符
- CDC 描述符
- 接口关联描述符
- 接口描述符
- 功能描述符
- 端点描述符
- 接口描述符
- 端点描述符
- HID 描述符
- 接口描述符
- 新增一个 HID 设备
前言
USB HS 复合设备,CDC+HID
功能:串口、DAP、CAN-HID、RS485
设备描述符
https://www.usbzh.com/article/detail-104.html
不需要修改
/* Device Descriptor */
const uint8_t MyDevDescr[ ] =
{
0x12, // bLength
0x01, // bDescriptorType (Device)
0x00, 0x02, // bcdUSB 2.00
0x00, // bDeviceClass
0x00, // bDeviceSubClass
0x00, // bDeviceProtocol
DEF_USBD_UEP0_SIZE, // bMaxPacketSize0 64
(uint8_t)DEF_USB_VID, (uint8_t)(DEF_USB_VID >> 8), // idVendor 0x1A86
(uint8_t)DEF_USB_PID, (uint8_t)(DEF_USB_PID >> 8), // idProduct 0xFE0C
DEF_IC_PRG_VER, 0x00, // bcdDevice 0.01
0x01, // iManufacturer (String Index)
0x02, // iProduct (String Index)
0x03, // iSerialNumber (String Index)
0x01, // bNumConfigurations 1
};
完整描述符
/* Configuration Descriptor (HS) */
const uint8_t MyCfgDescr_HS[ ] =
{
/* Configure descriptor */
0x09, 0x02, 0x6B, 0x00, 0x03, 0x01, 0x00, 0x80, 0x32,
/* IAD Descriptor(interface 0/1)*/
0x08, 0x0B, 0x00, 0x02, 0x02, 0x02, 0x01, 0x00,
/* Interface 0 (CDC) descriptor */
0x09, 0x04, 0x00, 0x00, 0x01, 0x02, 0x02, 0x01, 0x00,
/* Functional Descriptors */
0x05, 0x24, 0x00, 0x10, 0x01,
/* Length/management descriptor (data class interface 1) */
0x05, 0x24, 0x01, 0x00, 0x01,
0x04, 0x24, 0x02, 0x02,
0x05, 0x24, 0x06, 0x00, 0x01,
/* Interrupt upload endpoint descriptor */
0x07, 0x05, 0x83, 0x03, (uint8_t)DEF_USB_EP3_HS_SIZE, (uint8_t)( DEF_USB_EP3_HS_SIZE >> 8 ), 0x01,
/* Interface 1 (data interface) descriptor */
0x09, 0x04, 0x01, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x00,
/* Endpoint descriptor */
0x07, 0x05, 0x02, 0x02, (uint8_t)DEF_USB_EP2_HS_SIZE, (uint8_t)( DEF_USB_EP2_HS_SIZE >> 8 ), 0x00,
/* Endpoint descriptor */
0x07, 0x05, 0x82, 0x02, (uint8_t)DEF_USB_EP2_HS_SIZE, (uint8_t)( DEF_USB_EP2_HS_SIZE >> 8 ), 0x00,
/* interface 2 (HID interface) descriptor */
0x09, 0x04, 0x02, 0x00, 0x02, 0x03, 0x00, 0x00, 0x00,
/* interface 2 HID descriptor */
0x09, 0x21, 0x00, 0x01, 0x00, 0x01, 0x22, DEF_USBD_REPORT_DESC_LEN, 0x00,
/* interface 2 endpoint descriptor*/
0x07, 0x05, 0x84, 0x03, (uint8_t)DEF_USB_EP4_HS_SIZE, (uint8_t)( DEF_USB_EP4_HS_SIZE >> 8 ), 0x01,
/* interface 2 endpoint descriptor */
0x07, 0x05, 0x04, 0x03, (uint8_t)DEF_USB_EP4_HS_SIZE, (uint8_t)( DEF_USB_EP4_HS_SIZE >> 8 ), 0x01,
};
配置描述符
https://www.usbzh.com/article/detail-67.html
wTotalLength : 返回整个数据的长度.指此配置返回的配置描述符,接口描述符以及端点描述符的全部大小
bNumInterfaces : 配置所支持的接口数.指该配置配备的接口数量,也表示该配置下接口描述符数量
CDC 描述符
接口关联描述符
https://www.usbzh.com/article/detail-712.html
接口编号 0
接口描述符
https://www.usbzh.com/article/detail-64.html
接口编号 0,与IAD一致;描述符编号
功能描述符
https://www.usbzh.com/article/detail-1142.html
接口编号 1,接口编号 0,接口编号 1
端点描述符
https://www.usbzh.com/article/detail-56.html
端点,数据包大小,查询间隔
接口描述符
接口编号 1
端点描述符
HID 描述符
接口描述符
接口编号 2,有两个端点,HID设备
新增一个 HID 设备
#if 1
/* interface 3 (HID interface) descriptor */
0x09, 0x04, 0x03, 0x00, 0x02, 0x03, 0x00, 0x00, 0x00,
/* interface 3 HID descriptor */
0x09, 0x21, 0x00, 0x01, 0x00, 0x01, 0x22, DEF_USBD_REPORT_DESC_LEN, 0x00,
/* interface 3 endpoint descriptor*/
0x07, 0x05, 0x81, 0x03, (uint8_t)DEF_USB_EP4_HS_SIZE, (uint8_t)( DEF_USB_EP4_HS_SIZE >> 8 ), 0x01,
/* interface 3 endpoint descriptor */
0x07, 0x05, 0x01, 0x03, (uint8_t)DEF_USB_EP4_HS_SIZE, (uint8_t)( DEF_USB_EP4_HS_SIZE >> 8 ), 0x01,
#endif
顺序下来,此处该是接口 3
双向端点,用空闲的端点 1
新增 HID 设备描述符长度为 0x20(9+9+7+7),多占用一个端点
注意:CDC 占用两个端点,HID 占用 1 个端点