本文主要是介绍【CH32V305FBP6】USBD HS 描述符修改,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 前言
- 设备描述符
- 配置描述符
- 配置描述符
- 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, // bLength0x01, // bDescriptorType (Device)0x00, 0x02, // bcdUSB 2.000x00, // bDeviceClass0x00, // bDeviceSubClass0x00, // bDeviceProtocolDEF_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 0xFE0CDEF_IC_PRG_VER, 0x00, // bcdDevice 0.010x01, // 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 个端点
这篇关于【CH32V305FBP6】USBD HS 描述符修改的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!