USB序列号相同产生的问题及解决

最近做了一些关于USB的方案,发现了一个共通的问题。

由于Windows的设备驱动给每个设备一个设备标识(Device ID)。设计的初衷是用来区分每个设备的。
USB设备的DeviceID命名规则很简单。举例来说,如果一个USB设备的VID是0x1234、PID是0x5678、序列号是00001,则它的DeviceID为:
USB\VID_1234&PID_5678\00001
由于VID是USB厂商的唯一标识、PID是厂商定义的产品的唯一标识、序列号理论上应该是同类产品的唯一标识。因此理论上说这样的DeviceID可以区分所有USB设备。
如果没有序列号,Windows则将Device ID的序列号部分用HUB及其端口相关的一串文字来代替,也可以基本保证DeviceID的唯一性。这种Device ID形如:
USB\VID_1234&PID_5678\X&YYYYYYYY&Z
其中X是设备的层次、Z表示设备插到HUB的哪个端口、YYYYYYYY是与HUB有关的某常数。

因此,当USB的设备描述符中指出有序列号时,就必须保证每个产品有一个唯一的序列号。
但不幸的是,现实中序列号存在重号的情况。当一个USB产品的程序是在MaskROM内或写入OTP的话,由于MaskROM和OTP很难做到每个产品都有自己区别于其它相同产品的序列号。因此这种方案如果有序列号,则所有产品都是同一序列号。问题就发生了。

早期Windows驱动完全没有处理Device ID重名,遇到这种情况只能崩溃。例如一直没有更新的HID设备,一插即死。
稍后期的驱动似乎意识到这种情况的严重性(即便不是驱动本身的问题,驱动也不应该在这种情况下使系统崩溃),试图去解决它,但可惜不彻底。例如USBSTOR驱动,当同一个HUB上插多个相同序列号的U盘时,驱动会认为后来者没有序列号,以为这样就解决问题了。但它忘了HUB有层次性。当两个序列号相同的U盘插到不同HUB时(包括有插主机的RootHUB),驱动忘了给后来者改名了。系统还是崩溃。

难道就没有彻底的解决办法吗?有。
事实上,问题的症结不在Class层而在于USB本身,即EP0枚举的处理上。微软似乎已经认识以了这一点,因此并没有打算在Class层彻底解决问题。
解决办法是,在注册表[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\UsbFlags]中添加:
"GlobalDisableSerNumGen"=hex:01
"IgnoreHWSerNum12345678"=hex:01
其中的12345678就是指VID和PID。有多少有问题的VID、PID就要增加多少项。
作这样的处理之后,不管是HID、Mass Storage还是其它设备,都没有问题了。

但毕竟这个问题的根源不在驱动,而在于设备Firmware。因此在写Firmware的时候要留心。Flash方案可以随时升级,问题不大;如果是OTP方案,建议采用烧写时可改写序列号的芯片方案;是MaskROM方案,则建议不要用序列号。
  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
USB设备序列号修改工具是一种能够修改USB设备序列号的软件工具。USB设备序列号是由制造商为区分不同设备而赋予的唯一标识符。通过修改USB设备序列号,用户可以改变设备的身份和识别信息。 使用USB设备序列号修改工具可以为不同目的提供便利。首先,该工具可以用于设备调试和测试。在开发过程中,为了模拟不同的设备,调试人员可以使用该工具修改设备序列号以达到测试的目的,确认设备的稳定性和兼容性。其次,这也是一种应对设备复制和盗版的手段。通过修改设备序列号,能够防止非法复制和盗版行为,保护制造商和消费者的权益。另外,一些需要唯一标识的应用场景,如在线支付、加密狗等,也可以使用该工具为不同设备设置独一无二的序列号,以确保信息的安全性和设备的唯一性。 然而,需要注意的是,修改USB设备序列号可能涉及到违反制造商规定的行为。如果未经授权地修改设备序列号,可能会引起法律纠纷和设备无法正常使用的问题。因此,在使用USB设备序列号修改工具时,务必遵守法律法规和相关合规规定。 总之,USB设备序列号修改工具是一种功能强大的软件工具,能够修改USB设备序列号。使用该工具可以用于设备调试和测试、防止盗版行为以及满足某些特定应用场景的需求。然而,需要谨慎使用,遵守法律法规和相关规定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值