所谓的不兼容只是程序中一般不加出错处理造成的,这本来就不符合规范。目前只有一种情况CH375似乎不大搞得定,就是读写端点是同一个时,可惜的是Win2000也不支持这种优盘,所以几乎不用考虑。 我现在使用CH375时是按照下面的流程走的,兼容性大概90%左右(一款清华紫光1G,一款是朗科早期的16M无法支持)。 1.发出DISK_INIT命令,等待成功中断 2.发出DISK_MAX_LUN命令,等待成功中断或STALL。 3.如果第二步成功,则读出当前优盘有几个逻辑单元,并保存。STALL则第四步。
从下面开始,如果出现0x1f中断状态,发出DISK_R_SENSE,并对出错进行处理,如果Sense key = 0x06, Additional Sense code = 0x28,则重复当前命令,否则无法处理此优盘。(请参考USB Mass Storage Class – UFI Command Specification)
4.发出DISK_INQUIRY命令,可能需要出错处理,直到成功。 5.发出DISK_SIZE命令,可能需要出错处理,直到成功。 6.读MBR/DBR,判断文件系统,如果不支持且逻辑单元未全部判断完成,则置为下一个逻辑单元,跳转到第4步,否则无法支持此优盘。(某些插到电脑上出现多个盘符的优盘)
几乎所有的金士顿优盘在第4步必定会出错。某些优盘支持在优盘使用时可以打开/关闭写保护,同样会使读扇区命令出错,也需要重复当前命令。
使用CH375也有半年了,希望这点东西能对要脱离库函数进行开发的人有点帮助。