阅读:2439回复:6
关于U盘开发过程中的一个SCSI命令--INQUIRY的疑问。
我在2000下进行开发,当探测到INQUIRY命令到来,我发回主机一些设备信息,由于我的FIRMWARE处理的是RBC设备命令,所以我返回的INQUIRY数据中的Peripheral device type值就用0x0e返回,但是这时主机除了正确装载usbstor.sys外,还弹出一个对话框,说发现新硬件,要求我为这个新硬件查找并安装驱动程序。我想我告诉主机的是RBC设备(简易直接访问设备,最普遍的应用就是磁盘设备),它应该自己会找到2000自带的disk.sys驱动吧,可是我让它自动搜索或我手动指定,均告失败。而当我将这个值填为SBC设备类型时,就不会要求我手动指定新硬件的驱动程序,枚举也很正常,出现盘符并可以使用,但是这明明是错误的设备类型啊,请各位高手指点一下迷津!不胜感谢。
|
|
|
沙发#
发布于:2003-02-12 16:27
什么是RBC设备呀?
:D |
|
板凳#
发布于:2003-02-12 16:32
MS的W2K自带USB驱动还不支持RBC设备,它只有subclass=0x06和非06两类,且非06的实际上是UFI
|
|
地板#
发布于:2003-02-12 21:17
MS的W2K自带USB驱动还不支持RBC设备,它只有subclass=0x06和非06两类,且非06的实际上是UFI 说的很对,我以用51+D12+FLASH实现了U盘,主要处理下面的函数,然后就GOOD switch(RBC_OPERATIONCODE){ case 0x00:{CBW_TestUnitRead();break;} case 0x03:{CBW_RequestSense();break;} case 0x12:{CBW_Inquiry();break;} case 0x1a:{CBW_ModeSense();break;} case 0x23:{CBW_ReadLong();break;} case 0x25:{CBW_Capacity();break;} case 0x28:{CBW_Read10();break;} case 0x2a:{CBW_Write10();break;} default:CBW_Others(); } |
|
地下室#
发布于:2003-02-13 09:39
nter0,我和你的情况一模一样,也是只处理了这些命令,免驱U盘功能便在2K下实现了,我只是不太明白一些SCSI命令规范上讲到的东西,比如我现在使用的设备根据我送给INQUIRY命令的参数,应该是SBC设备,我查阅了所有从T10网站上下载的SCSI设备命令格式规范,0x23这条命令只有在UFI设备类中才有这条命令。而我其他的命令都是按SBC命令格式进行处理的(我送给接口描述符的subclass=0x06,也就是MASS STORAGE类协议中所说的SCSI Transparent command set,如果子类为0x04才是UFI命令集)。另外,Mode Sense和Mode Select这两条命令按命令规范所讲应该是成对出现,但是我发现只来了Mode Sense这条命令。等等疑惑,哪位大虾知道答案?
|
|
|
5楼#
发布于:2003-02-13 14:54
我在使用接口描述符的subclass=0x06时出现了一些问题,我使用的是接口描述符的subclass=0x01,对于Mode Sense和Mode Select详细的我也不知道,但是我也只收到Mode Sense。只要正确 处理这些函数就行了。我的U盘是 在我自己做的仿真器中实现的,并没有FLASH,请问你有读写 三星FLASH 的例子吗。我的 信箱是nter@163.net |
|
6楼#
发布于:2003-02-13 14:59
我的不是用三星的FLASH,而是SST的,在FLASH上实现不同于在仿真器上实现,需要有FAT文件系统的支持,所以,你首先需要实现FAT12或FAT16文件系统。
|
|
|