|
本帖最后由 wuwuzz 于 2024-11-21 20:25 编辑
不点大大谦虚了,我是一名小兵,大人不敢当,回复如下:
由于USB协议的复杂性,要回答您的问题,需先铺垫、交代一些背景知识,然后才能水到渠成,说清楚。
一、背景知识
1、三个关键固件参数:最大LBA(总扇区数,容量)、盘片/介质(media)属性、外设类型。
USB是主从结构,上电后开始枚举,主机端(UEFI/BIOS/OS USB驱动)发请求,设备端(U盘固件)应答。主机端只认U盘固件应答信息(参数)。主机端会以USB包封装SCSI Inquiry等命令发往U盘固件,获取前述3个固件参数值。格式:
MAX_LBA=0x?? ?? ?? ?? 最大LBA,从0开始计数的4字节值。总扇区数=MAX_LBA+1。
外设类型:0x00为Direct access block device,即DISK磁盘驱动器设备。
移动介质位(RMB):1=盘片可移动,0=盘片不可移动。
注:U盘在物理上,设备与盘片合体,但在逻辑上要分开。盘片/介质(Media)以Flash芯片为实际物理载体,在物理上是固定(Fixed)的,但其固件RMB默认出厂设置一般为可移动(没有理由)。当然,可通过量产工具重新修改RMB取值,把盘片属性设置为固定(前提是固件支持)。
2、中间过程-细分DISK磁盘设备。
0x00只是笼统地给了个磁盘驱动器类型。BIOS主要根据MAX_LBA、RMB取值,同时,不同厂家BIOS会再叠加其他不同因素,以不同算法,把DISK磁盘设备细分为USB-HDD/ZIP/KEY/LS120/FDD...等,显示在BIOS BOOT菜单里。(正因为算法不同,所以不同BIOS下,USB-HDD/ZIP/KEY/LS120/FDD...设定规律不同,混乱不堪)
3、BIOS最终设备设定。
无论是USB-HDD/ZIP/KEY/LS120/FDD...中的哪一种,它们只是中间过程。到最后,BIOS会再把它们设为2类:固定设备(BIOS盘号0X8?,DOS下C:>),移动设备(BIOS盘号0X00,DOS下A:>)
二、回答问题
(一)如果想更大概率获得固定设备,其影响因素为:
1、MAX_LBA,也就是让总扇区数(容量)尽可能地大,这很容易实现,因为现在的U盘容量都很大。
注:不同的BIOS,由于算法不同,对跨入固定设备的容量界限设定不同。建议容量为32GB以上,这是个经验值。(当然,BIOS内部不会用GB计算,而是用具体的总扇区数、LBA计算)。
2、RMB=0,盘片属性设为固定。通过量产工具进行调整。部分老版本AMI BIOS如果开启RMB编译选项,会把RMB=0的U盘,强制为USB-HDD,设为固定设备。
3、逻辑分区,含有MBR/分区表。仅对部分老版本AMI BIOS有效。该版BIOS会检查MBR/分区表,如果发现有分区表,会增大把U盘默认为USB-HDD,设为固定设备可能性。
(二)关于windows软驱
1、老windows对U盘只识别1分区,是因为老windows不支持移动(介质)盘分区。通过量产工具调整U盘的RMB取值,把U盘改为固定(介质)盘,就可以分区了。
2、Windows软驱算法,跟MAX_LBA有关。U盘固件总扇区数=windows软驱默认的总扇区数,就能得到Windows下的USB-FDD软驱(A/B盘)。
(三)关于读卡器。
读卡器固件返回的RMB一般取值为1,移动介质。因此,读卡器+TF卡要想识别为固定设备,增大MAX_LBA(容量)是最好途径,也就是TF卡的容量要尽可能地大。
(四)标准U盘。
由于USB存储设备固件/量产工具各不相同,试图改各种USB存储设备固件参数是不现实的。比较简单易行的办法是,选一种“标准”U盘测试即可。适合做“标准”U盘的,也很好选。就是SMI慧荣主控盘(USB2.0的3252/3255/3257;USB3.0的3267)。主要原因是:1、相对于其他U盘主控,固件更符合USB规范;2、改固件参数方便,尤其是被玩家发现debug彩蛋后。3、是市场主流U盘主控,简单易得,到处都是,价格不贵。
|
|