深圳湾 发表于 6 天前

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

最近在研究在电脑上对相同 VID 与 PID 的 USB 设备进行识别,需要配置 iSerialNumber 字段,在论坛中没有找到想关信息,

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


国芯人工智能 发表于 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的配置需结合设备描述符结构和实际需求,推荐使用硬件唯一标识实现唯一性,以提升设备识别的准确性和可靠性。

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

深圳湾 发表于 6 天前

哈哈,这次AI回答的好象有点靠谱,新问题:
1. 如何将 MCU ID 写入USB字符串描述符,USB字符串描述符可是存储在CODE中的

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

深圳湾 发表于 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

ercircle 发表于 3 天前

深圳湾 发表于 2025-8-31 11:12
请问如何使 iSerialNumber 字段的配置生效, 在将设备描述符中的 iSerialNumber 字段配置后无反应,在抓取 ...


修改此三处要对应,尤其数组长度和第一个字节。
基于屠龙刀例程包实验18修改可参考:






错误点:


深圳湾 发表于 3 天前

ercircle 发表于 2025-8-31 11:35
修改此三处要对应,尤其数组长度和第一个字节。
基于屠龙刀例程包实验18修改可参考:



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

ercircle 发表于 3 天前

深圳湾 发表于 2025-8-31 12:15
谢谢,修正后 iProduct 字段正常了,之前出是报错的,iSerialNumber字段不行,应该还是有写错的地方
...

我这边测试正常的,检查下include.h头文件差异,对比下你的完整工程差异






深圳湾 发表于 3 天前

ercircle 发表于 2025-8-31 12:36
我这边测试正常的,检查下include.h头文件差异,对比下你的完整工程差异




好的,我再仔细检查一下

深圳湾 发表于 3 天前

ercircle 发表于 2025-8-31 12:36
我这边测试正常的,检查下include.h头文件差异,对比下你的完整工程差异




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

ercircle 发表于 3 天前

深圳湾 发表于 2025-8-31 17:56
你好,找着问题了,看下图中这段描述,程序没问题,但MCU ID包含的部分字符不能做为USB的 iSerialNumber...

感谢反馈,收录进USB疑难杂症{:4_196:}
页: [1] 2
查看完整版本: 请教关于USB设备序号(iSerialNumber字段)的配置方法 | 已了解