USB 枚举时PID和VID是0怎么办
发布网友
发布时间:2022-05-05 13:48
我来回答
共1个回答
热心网友
时间:2022-06-27 14:12
USB通过两次总线列举(Enumeration
and
Renumertion)来实现设备识别以及驱动程序析加载。其具体过程为:USB设备连到主机后,主机依据USB规范在特定地址通过端口0(endpoint0)与外设通信,并将外设视为默认设备。外设与主机通信将其6设备标识(DID、PID、VID)发给主机进行第二次总线列举。主机根据设备标识,加载相应设备驱动程序,重新分配地址,并将控制权转交给外设固件(firmware),通过固件与设备驱动程序及主机应用程序的交互通信,来实现外设的功能。
VID和PID通常情况下有两种存储方式,第一种是主控生产商的VID和PID,存储在主控的bootcode中;第二种是设备生产商的VID和PID,该VID和PID存储在主控外部的非易失性存储设备中(EEPROM或Flash)的设备固件中,当USB设备连接主机时,如果固件中有设备生产商的VID和PID,会将该VID和PID报告给主机,而忽略主控生产商的VID和PID。所以理论上一个USB存储设备的VID应该是设备生产商的VID,而不是主控生产商的VID,这两个VID应该是不同的(主控生产商自己生产的设备除外)。
由于VID和PID重复并不会对产品的使用带来严重影响,很多USB设备生产商(山寨厂居多)为了方便,并不会向USB执行论坛申请自己的VID,而是依然沿用主控生产商的VID或随便向产品写入VID和PID;同时,正规厂家只需要申请VID,PID由厂家自行确定,所以存在相同型号的产品,可能采用了不同的主控,而他们的PID是一样的.