【CH32V305FBP6】USBD HS 描述符修改

2024-06-14 21:36

本文主要是介绍【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 描述符修改的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1061566

相关文章

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

Oracle修改端口号之后无法启动的解决方案

《Oracle修改端口号之后无法启动的解决方案》Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见,但并非必然发生,这一问题通常源于​​配置错误或环境冲突​​,而非端口修改本身,以下是系... 目录一、问题根源分析​​​二、保姆级解决方案​​​​步骤1:修正监听器配置文件 (listener.

Linux中修改Apache HTTP Server(httpd)默认端口的完整指南

《Linux中修改ApacheHTTPServer(httpd)默认端口的完整指南》ApacheHTTPServer(简称httpd)是Linux系统中最常用的Web服务器之一,本文将详细介绍如何... 目录一、修改 httpd 默认端口的步骤1. 查找 httpd 配置文件路径2. 编辑配置文件3. 保存

Nginx 413修改上传文件大小限制的方法详解

《Nginx413修改上传文件大小限制的方法详解》在使用Nginx作为Web服务器时,有时会遇到客户端尝试上传大文件时返回​​413RequestEntityTooLarge​​... 目录1. 理解 ​​413 Request Entity Too Large​​ 错误2. 修改 Nginx 配置2.1

Python对PDF书签进行添加,修改提取和删除操作

《Python对PDF书签进行添加,修改提取和删除操作》PDF书签是PDF文件中的导航工具,通常包含一个标题和一个跳转位置,本教程将详细介绍如何使用Python对PDF文件中的书签进行操作... 目录简介使用工具python 向 PDF 添加书签添加书签添加嵌套书签Python 修改 PDF 书签Pytho

Docker镜像修改hosts及dockerfile修改hosts文件的实现方式

《Docker镜像修改hosts及dockerfile修改hosts文件的实现方式》:本文主要介绍Docker镜像修改hosts及dockerfile修改hosts文件的实现方式,具有很好的参考价... 目录docker镜像修改hosts及dockerfile修改hosts文件准备 dockerfile 文

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

Linux修改pip和conda缓存路径的几种方法

《Linux修改pip和conda缓存路径的几种方法》在Python生态中,pip和conda是两种常见的软件包管理工具,它们在安装、更新和卸载软件包时都会使用缓存来提高效率,适当地修改它们的缓存路径... 目录一、pip 和 conda 的缓存机制1. pip 的缓存机制默认缓存路径2. conda 的缓

Linux修改pip临时目录方法的详解

《Linux修改pip临时目录方法的详解》在Linux系统中,pip在安装Python包时会使用临时目录(TMPDIR),但默认的临时目录可能会受到存储空间不足或权限问题的影响,所以本文将详细介绍如何... 目录引言一、为什么要修改 pip 的临时目录?1. 解决存储空间不足的问题2. 解决权限问题3. 提

Linux文件名修改方法大全

《Linux文件名修改方法大全》在Linux系统中,文件名修改是一个常见且重要的操作,文件名修改可以更好地管理文件和文件夹,使其更具可读性和有序性,本文将介绍三种在Linux系统下常用的文件名修改方法... 目录一、引言二、使用mv命令修改文件名三、使用rename命令修改文件名四、mv命令和rename命