找回密码
 立即注册
查看: 89|回复: 12

请教关于USB设备序号(iSerialNumber字段)的配置方法 | 已了解

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:406
  • 最近打卡:2025-09-03 08:48:39

26

主题

77

回帖

2453

积分

金牌会员

积分
2453
发表于 6 天前 | 显示全部楼层 |阅读模式
最近在研究在电脑上对相同 VID 与 PID 的 USB 设备进行识别,需要配置 iSerialNumber 字段,在论坛中没有找到想关信息,

1. iSerialNumbe 要怎么配置
2. iSerialNumbe 如何生成
3. iSerialNumbe 如果可以与MCU ID进行绑定,这样不就能实现其唯一性了,该如何实现


回复

使用道具 举报 送花

3

主题

2001

回帖

850

积分

等待验证会员

积分
850
发表于 6 天前 | 显示全部楼层
关于USB设备中iSerialNumber字段的配置方法,以下是专业解答:

1. iSerialNumber字段的配置方式  
在USB设备的描述符中,iSerialNumber是一个可选字符串描述符,用于标识设备的序列号。该字段通常位于设备描述符(Device Descriptor)的iSerialNumber字段中,其值为指向字符串描述符的索引。  
要配置iSerialNumber,需在设备的USB描述符中设置对应的字符串描述符内容。例如,在USB设备的枚举过程中,主机将通过GETDESCRIPTOR请求获取字符串描述符,其中包含iSerialNumber所指向的字符串内容。

2. iSerialNumber的生成方式  
iSerialNumber可以是任意字符串,但为了确保唯一性和可识别性,通常采用以下方式生成:  
硬件唯一标识:如MCU的唯一ID、芯片序列号等,确保每个设备拥有唯一的序列号。  
软件生成:如基于时间戳、随机数或设备固件版本组合生成的字符串。  
用户自定义:根据实际需求设定特定格式的序列号,如“SN-001”、“SN-20240501”等。  

建议使用硬件级唯一标识(如MCU的唯一ID)作为iSerialNumber的来源,以保证设备的唯一性与可追溯性。

3. iSerialNumber与MCU ID绑定实现唯一性  
若希望将iSerialNumber与MCU的唯一ID进行绑定,可通过以下步骤实现:  
在设备初始化阶段读取MCU的唯一ID(如STM32的UID、ESP32的MAC地址等)。  
将该ID转换为字符串格式,并作为iSerialNumber的值写入USB字符串描述符。  
在设备枚举时,主机将读取该字符串并识别设备。  

此方法可有效实现设备的唯一标识,避免因相同VID/PID导致的设备混淆问题。需要注意的是,不同MCU平台的唯一ID获取方式可能不同,需参考具体芯片的文档进行实现。

综上所述,iSerialNumber的配置需结合设备描述符结构和实际需求,推荐使用硬件唯一标识实现唯一性,以提升设备识别的准确性和可靠性。

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:406
  • 最近打卡:2025-09-03 08:48:39

26

主题

77

回帖

2453

积分

金牌会员

积分
2453
发表于 6 天前 | 显示全部楼层
哈哈,这次AI回答的好象有点靠谱,新问题:
1. 如何将 MCU ID 写入USB字符串描述符,USB字符串描述符可是存储在CODE中的

2. 是不是要修改官方提供的USB代码,在设备枚举前将 MCU ID 写入到报文中
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:406
  • 最近打卡:2025-09-03 08:48:39

26

主题

77

回帖

2453

积分

金牌会员

积分
2453
发表于 3 天前 | 显示全部楼层
请问如何使 iSerialNumber 字段的配置生效, 在将设备描述符中的 iSerialNumber 字段配置后无反应,在抓取到的报文中没有该字段内容,经实验将 MCU ID 添加到报文中的程序 写到到 iProduct 字段的处理程序中是可以运行的,在电脑上也能抓取到报文中的 MCU ID ,附件中是USB部分的代码,其他项目代码不方便上传
1. 向报文中添加MCU ID的代码在此处:usb_req_std.c -- >  usb_get_descriptor() --> switch (Setup.wValueH) 的case DESC_STRING -->   switch (Setup.wValueL) 的 case 3  
2. usb_desc.c中改动以下2点:
        1. iSerialNumber(3);字段配置为0x03
        2. 序号字符串变量名为SERIALDESC

USB.rar

19.56 KB, 下载次数: 5

点评

修改此三处要对应,尤其数组长度和第一个字节。 基于屠龙刀例程包实验18修改可参考: [attachimg]113354[/attachimg] [attachimg]113355[/attachimg] [attachimg]113356[/attachimg] [attachimg]113357[/attachimg  详情 回复 发表于 3 天前
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:286
  • 最近打卡:2025-09-02 08:51:54
已绑定手机

80

主题

3032

回帖

6441

积分

荣誉版主

无情的代码机器

积分
6441
发表于 3 天前 | 显示全部楼层
深*** 发表于 2025-8-31 11:12
请问如何使 iSerialNumber 字段的配置生效, 在将设备描述符中的 iSerialNumber 字段配置后无反应,在抓取 ...


修改此三处要对应,尤其数组长度和第一个字节。
基于屠龙刀例程包实验18修改可参考:
18-CDC(Communication Device Class)协议范例.zip (288.87 KB, 下载次数: 3)
截图202508311133533986.jpg
截图202508311134061316.jpg
截图202508311134163503.jpg
截图202508311134524091.jpg

错误点:

截图202508311133222875.jpg
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:406
  • 最近打卡:2025-09-03 08:48:39

26

主题

77

回帖

2453

积分

金牌会员

积分
2453
发表于 3 天前 | 显示全部楼层
erci*** 发表于 2025-8-31 11:35
修改此三处要对应,尤其数组长度和第一个字节。
基于屠龙刀例程包实验18修改可参考:

谢谢,修正后 iProduct 字段正常了,之前出是报错的,iSerialNumber字段不行,应该还是有写错的地方
截图202508311157587461.jpg

点评

我这边测试正常的,检查下include.h头文件差异,对比下你的完整工程差异 [attachimg]113360[/attachimg] [attachimg]113362[/attachimg] [attachimg]113363[/attachimg]  详情 回复 发表于 3 天前
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:286
  • 最近打卡:2025-09-02 08:51:54
已绑定手机

80

主题

3032

回帖

6441

积分

荣誉版主

无情的代码机器

积分
6441
发表于 3 天前 | 显示全部楼层
深*** 发表于 2025-8-31 12:15
谢谢,修正后 iProduct 字段正常了,之前出是报错的,iSerialNumber字段不行,应该还是有写错的地方
...

我这边测试正常的,检查下include.h头文件差异,对比下你的完整工程差异
18-CDC(Communication Device Class)协议范例 - 副本.zip (340.29 KB, 下载次数: 4)

截图202508311235335999.jpg

截图202508311236192143.jpg
截图202508311236337559.jpg
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:406
  • 最近打卡:2025-09-03 08:48:39

26

主题

77

回帖

2453

积分

金牌会员

积分
2453
发表于 3 天前 | 显示全部楼层
erci*** 发表于 2025-8-31 12:36
我这边测试正常的,检查下include.h头文件差异,对比下你的完整工程差异

好的,我再仔细检查一下
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:406
  • 最近打卡:2025-09-03 08:48:39

26

主题

77

回帖

2453

积分

金牌会员

积分
2453
发表于 3 天前 | 显示全部楼层
erci*** 发表于 2025-8-31 12:36
我这边测试正常的,检查下include.h头文件差异,对比下你的完整工程差异

你好,找着问题了,看下图中这段描述,程序没问题,但MCU ID包含的部分字符不能做为USB的 iSerialNumber 字段内容
截图202508311753424899.jpg

点评

感谢反馈,收录进USB疑难杂症  详情 回复 发表于 3 天前
1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:286
  • 最近打卡:2025-09-02 08:51:54
已绑定手机

80

主题

3032

回帖

6441

积分

荣誉版主

无情的代码机器

积分
6441
发表于 3 天前 | 显示全部楼层
深*** 发表于 2025-8-31 17:56
你好,找着问题了,看下图中这段描述,程序没问题,但MCU ID包含的部分字符不能做为USB的 iSerialNumber  ...

感谢反馈,收录进USB疑难杂症
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-9-3 08:55 , Processed in 0.174353 second(s), 101 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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