根据USB规范的规定,所有的USB设备都有供应商ID(VID)和产品识别码(PID),主机通过不同的VID和PID来区别不同的设备,VID和PID都是两个字节长,其中,供应商ID(VID)由供应商向USB执行论坛申请,每个供应商的VID是唯一的,PID由供应商自行决定,理论上来说,不同的产品、相同产品的不同型号、相同型号的不同设计的产品最好采用不同的PID,以便区别相同厂家的不同设备。
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是一样的,基于上述原因通过VID和PID就不能准确识别USB设备的主控型号,这个问题大家在使用USB设备的过程中需要注意。
我在量产很多U盘之后发现,VID和PID可以人为随意修改!不管你是哪一个主控,换用另一个的主控,就会显示为另一个主控。。ChipGenius就是通过VID和PID来识别主控的。。所以,这个检测有时不可靠,特别是对山寨U盘!举个例子,比如你的U盘检测到时安国AU6983,VID=058F&&PID=1234,现在你量产时吧VID和PID都改了,改成VID=0C76&&PID=0005,那么量产完了,插上U盘,就会识别到主控为SSS6677
这是一些主控的VID&&PID
SSS6677:VID 0C76 PID 0005
MXT6208:VID 2000 PID 2008
MXT6208A:VID 2000 PID 2008
MXT8208:VID 2001 PID 2008
AU6983:VID 058F PID 1234
AU9382:VID 058F PID 9382
UT163:VID 1307 PID 0163
i5060:VID 1043 PID 8006
i5062:VID 1043 PID 8006
i5127:VID 1043 PID 8012
i5128:VID 1043 PID 8012
CBM1180:VID 0402 PID 1307
CCM3080:VID 02E3 PID 0702
CCM3110:VID 02E3 PID 0702
SM321:VID 090C PID 3000
CBM2091:VID 0420 PID 1307
CBM2092:VID 1976 PID2092
MW6208: VID 2008 PID 2018