【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 个端点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1451460.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

健身小程序:智能化助力个人健身旅程

一、智能化功能的核心 健身小程序的智能化功能主要体现在以下几个方面: 智能健身计划推荐:小程序内置了先进的算法,能够根据用户的身体状况、健身目标和时间安排,智能推荐个性化的健身计划。这些计划不仅科学合理,而且…

零基础入门学用Arduino 第二部分(二)

重要的内容写在前面: 该系列是以up主太极创客的零基础入门学用Arduino教程为基础制作的学习笔记。个人把这个教程学完之后,整体感觉是很好的,如果有条件的可以先学习一些相关课程,学起来会更加轻松,相关课程有数字电路…

Pytorch环境配置的方法

Pytorch虚拟环境配置全流程 以安装pytorch1.9.1为例 1. 创建虚拟环境 安装Anaconda3,打开 PowerShell 创建虚拟环境并进入: conda create -n torch1.9.1 python3.8 conda activate torch1.9.1 conda create -n torch1.9.1 python3.8 conda activate to…

Flowable-决策表设计器

✨✨✨ 最好用的Flowable决策表设计器 ✨✨✨ 最好用的Flowable流程设计器 本文中内容和案例出自贺波老师的书《深入Activiti流程引擎:核心原理与高阶实战》,书中的介绍更全面、详细,推荐给大家。 深入Activiti流程引擎

3dsMax怎样让渲染效果更逼真出色?三套低中高参数设置

渲染是将精心构建的3D模型转化为逼真图像的关键步骤。但要获得令人惊叹的渲染效果,仅仅依赖默认设置是不够的。 实现在追求极致画面效果的同时,兼顾渲染速度和时间还需要进行一些调节设置,如何让渲染效果更加逼真? 一、全局照明与…

【递归、搜索与回溯】综合练习一

综合练习一 1.找出所有子集的异或总和再求和2.全排列 II3.电话号码的字母组合4.括号生成 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃😃 1.找…

sku与spu的区别!!!

一个 SPU 可以有多个 SKU。

深度学习(六)——神经网络的基本骨架:nn.Module的使用

一、torch.nn简介 官网地址: torch.nn — PyTorch 2.0 documentation 1. torch.nn中的函数简介 Containers:神经网络的骨架 Convolution Layers:卷积层 Pooling layers:池化层 Padding Layers:Padding Non-linear …

Linux多线程编程中的同步与互斥

文章目录 一、线程同步与互斥1、理解线程同步2、互斥的概念3、小结 二、互斥锁(Mutex)1、互斥锁的定义和作用2、pthread库中的互斥锁3、互斥锁的实现原理4、示例代码演示互斥锁的基本用法 三、条件变量(Condition Variable)1、条件…

RK3566调试VI5301

VI5301是南京芯视界推出的一款直接飞行时间(dToF)传感器,与ST的VL53L0x兼容。 一、开发平台 系统:linux 4.19(buidroot) 二、驱动移植 解压厂家提供的驱动文件:VI5301_Linux_General_M40_V202,目录结构…

QML学习及实战

QML学习及实战(更多内容) 创建项目 3. 剩下的就是一路下一步即可 添加静态资源——图片 添加之后完成之后的路径 案列 || demo 可以参考的资料:https://github.com/gongjianbo/MyTestCode/blob/master/README.md 1. 文本省略号 Text {wi…

Python中关于电商商品数据的采集【taobao/JD/商品详情数据返回】

在Python中采集电商商品数据(如淘宝、京东等)通常涉及到网络爬虫(web scraping)或称为网络数据抓取(web data scraping)。由于电商平台通常会有反爬虫机制,因此直接抓取数据可能会遇到各种挑战&…

CV每日论文--2024.6.14

1、ICE-G: Image Conditional Editing of 3D Gaussian Splats 中文标题:ICE-G:3D 高斯斑点的图像条件编辑 简介:近年来,出现了许多技术来创建高质量的3D资产和场景。然而,当涉及到这些3D对象的编辑时,现有方法要么速度慢、要么牺牲质量,要么…

【ai】blender4.1 安装插件

开源软件,所以资料充足插件及配置 下载插件插件是python开发的 编辑中的偏好设置 点击选中 点击一键切换中文英文 切换主题 插件源码

搭建 Redis 集群【Windows】

Redis 集群是一个分布式存储解决方案,它将数据分布在多个Redis节点上,以提高系统的可伸缩性、可靠性和性能。 1. 集群概念与特点 集群概念:Redis集群是由多个相互独立的 Redis 节点组成,这些节点通过高速网络互联,并作…

数据采集项目2-业务数据同步

全量同步 每天都将业务数据库中的全部数据同步一份到数据仓库 全量同步采用DataX datax datax使用 执行 python /opt/module/datax/bin/datax.py /opt/module/datax/job/job.json 更多job.json配置文件在: 生成的DataX配置文件 java -jar datax-config-genera…

Go Module详解

文章目录 基本介绍相关环境变量Go Module的使用初始化项目(go mod init)管理依赖项(go mod edit)获取依赖项(go mod download)整理依赖项(go mod tidy)导入vendor目录(go…

优思学院|做质量没有前途?10年质量人想对大家说...

你是否也有过这样的困惑?做质量工作究竟有没有前途?是不是感觉每天都在重复一样的事情,看不到未来的希望? 今天,优思学院分享一个任职于五百强企业、有着10年经验的质量人、六西格玛黑带学生徐某的文章,和…

【VS】尚未配置为Web项目XXXX指定的本地IIS URL HTTP://localhost

报错原因: 我们在Web项目的属性配置中勾选了“使用本地IIS Web服务器”; 本来嘛,这也没啥,问题是当我们的电脑IP改变时,将会导致程序找不到原来的IP地址了,那么当然会报错啦。 解决办法: 其实…

新一代大核卷积反超ViT和ConvNet!同参数量下性能、精度、速度完胜

大核卷积网络是CNN的一种变体,也是深度学习领域的一种重要技术,它使用较大的卷积核来处理图像数据,以提高模型对视觉信息的理解和处理能力。 这种类型的网络能够捕捉到更多的空间信息,因为它的大步长和大感受野可以一次性覆盖图像…