找回密码
 立即注册
查看: 72|回复: 5

请问能否修改USB描述符,自定义串口名称?

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-04-16 13:09:19
已绑定手机

2

主题

7

回帖

44

积分

新手上路

积分
44
发表于 2025-4-16 13:09:19 | 显示全部楼层 |阅读模式
能否修改USB描述符,自定义串口名称?
usb_desc.c里面的描述符,我尝试修改了下,但没有成功,串口识别的都是“USB 串行设备”
截图202504161309179237.jpg
回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-4-16 13:12:00 | 显示全部楼层
在嵌入式开发中,修改USB描述符以实现自定义串口名称是一个常见的需求。USB描述符是USB设备与主机通信时传递的关键信息,包括设备描述符、配置描述符、接口描述符、端点描述符等。通过修改这些描述符,可以自定义设备在主机上显示的名称、厂商信息、产品ID等。

1. USB描述符的基本结构
USB描述符通常以结构体的形式定义在固件代码中。以常见的USB CDC(Communication Device Class)设备为例,描述符通常包括以下几个部分:
设备描述符(Device Descriptor):描述设备的基本信息,如厂商ID、产品ID、设备版本等。
配置描述符(Configuration Descriptor):描述设备的配置信息,包括接口和端点的配置。
接口描述符(Interface Descriptor):描述设备的接口信息,如接口类、子类、协议等。
端点描述符(Endpoint Descriptor):描述设备的端点信息,如端点地址、传输类型、最大包大小等。
字符串描述符(String Descriptor):描述设备的字符串信息,如厂商名称、产品名称、序列号等。

2. 修改USB描述符的步骤
要修改USB描述符以实现自定义串口名称,通常需要以下几个步骤:

2.1 修改字符串描述符
字符串描述符是用于存储设备名称、厂商名称等字符串信息的部分。要自定义串口名称,首先需要修改字符串描述符中的相关字段。

例如,假设你希望在设备管理器中显示“My Custom Serial Port”作为串口名称,可以在字符串描述符中添加或修改相应的字符串。
  1. c
  2. // 示例:修改字符串描述符
  3. const uint8t CustomStringDescriptor[] = {
  4.     0x1E,  // 描述符长度
  5.     0x03,  // 字符串描述符类型
  6.     'M', 0x00, 'y', 0x00, ' ', 0x00, 'C', 0x00, 'u', 0x00, 's', 0x00, 't', 0x00, 'o', 0x00, 'm', 0x00,
  7.     ' ', 0x00, 'S', 0x00, 'e', 0x00, 'r', 0x00, 'i', 0x00, 'a', 0x00, 'l', 0x00, ' ', 0x00, 'P', 0x00,
  8.     'o', 0x00, 'r', 0x00, 't', 0x00
  9. };
复制代码

2.2 更新设备描述符
在设备描述符中,通常会引用字符串描述符的索引。确保设备描述符中的字符串索引指向你修改后的字符串描述符。
  1. c
  2. // 示例:更新设备描述符中的字符串索引
  3. const USBDeviceDescriptorTypeDef DeviceDescriptor = {
  4.     .bLength = sizeof(USBDeviceDescriptorTypeDef),
  5.     .bDescriptorType = USBDESCTYPEDEVICE,
  6.     .bcdUSB = 0x0200,
  7.     .bDeviceClass = 0x02,
  8.     .bDeviceSubClass = 0x00,
  9.     .bDeviceProtocol = 0x00,
  10.     .bMaxPacketSize0 = 64,
  11.     .idVendor = 0x1234,
  12.     .idProduct = 0x5678,
  13.     .bcdDevice = 0x0100,
  14.     .iManufacturer = 0x01,  // 厂商字符串索引
  15.     .iProduct = 0x02,       // 产品字符串索引
  16.     .iSerialNumber = 0x03,  // 序列号字符串索引
  17.     .bNumConfigurations = 0x01
  18. };
复制代码

2.3 更新配置描述符
在配置描述符中,确保接口描述符中的字符串索引指向你修改后的字符串描述符。
  1. c
  2. // 示例:更新配置描述符中的字符串索引
  3. const USBConfigDescriptorTypeDef ConfigDescriptor = {
  4.     .bLength = sizeof(USBConfigDescriptorTypeDef),
  5.     .bDescriptorType = USBDESCTYPECONFIGURATION,
  6.     .wTotalLength = sizeof(USBConfigDescriptorTypeDef),
  7.     .bNumInterfaces = 0x01,
  8.     .bConfigurationValue = 0x01,
  9.     .iConfiguration = 0x04,  // 配置字符串索引
  10.     .bmAttributes = 0x80,
  11.     .bMaxPower = 0x32,
  12.     .Interface = {
  13.         .bLength = sizeof(USBInterfaceDescriptorTypeDef),
  14.         .bDescriptorType = USBDESCTYPEINTERFACE,
  15.         .bInterfaceNumber = 0x00,
  16.         .bAlternateSetting = 0x00,
  17.         .bNumEndpoints = 0x02,
  18.         .bInterfaceClass = 0x02,
  19.         .bInterfaceSubClass = 0x02,
  20.         .bInterfaceProtocol = 0x01,
  21.         .iInterface = 0x05  // 接口字符串索引
  22.     },
  23.     .Endpoint = {
  24.         // 端点描述符
  25.     }
  26. };
复制代码

3. 验证修改
完成上述修改后,重新编译并烧录固件到设备中。连接设备到主机后,检查设备管理器中的串口名称是否已更新为自定义的名称。

4. 常见问题及解决方法
修改后名称未更新:确保字符串描述符的索引在设备描述符和配置描述符中正确引用。此外,检查字符串描述符的格式是否正确,特别是描述符长度和类型字段。
设备无法识别:如果设备无法被主机识别,可能是描述符结构或内容有误。建议使用USB分析工具(如USBlyzer、Wireshark等)捕获USB通信数据,检查描述符是否正确传递。

5. 总结
通过修改USB描述符中的字符串描述符,并确保设备描述符和配置描述符正确引用这些字符串,可以实现自定义串口名称。在实际操作中,建议仔细检查描述符的结构和内容,确保其符合USB规范。如果遇到问题,可以使用USB分析工具进行调试,以快速定位并解决问题。

希望以上内容能帮助你成功修改USB描述符并实现自定义串口名称。如有进一步问题,欢迎继续交流。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:162
  • 最近打卡:2025-05-01 06:56:44
已绑定手机

56

主题

1319

回帖

2938

积分

荣誉版主

无情的代码机器

积分
2938
发表于 2025-4-16 13:25:13 | 显示全部楼层

这里的串口名称应该是软件自定义显示的
截图202504161324467687.jpg
比如把
PID 01 显示为串口
PID 02 显示为CDC

修改PRODUCTDESC查看设备管理器里的设备描述字符串。可以在你自己的软件里用这个描述符做串口名称
截图202504161322287652.jpg
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-4-16 13:37:25 | 显示全部楼层
可以通过字符串描述符修改设备管理器中显示的

ISP软件中的是固定格式无法修改
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-04-16 13:09:19
已绑定手机

2

主题

7

回帖

44

积分

新手上路

积分
44
发表于 2025-4-16 22:24:18 | 显示全部楼层
erci*** 发表于 2025-4-16 13:25
这里的串口名称应该是软件自定义显示的

比如把

我尝试改过产品描述符了,“总线已报告设备描述”能自由修改,但串口调试软件上的名称还是改不了,我期望的是能修改这个名称


期望改这个

期望改这个

点评

这是别人的软件逻辑决定的改不了。  发表于 2025-4-16 22:30
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 01:54 , Processed in 0.196619 second(s), 82 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表