阅读:1535回复:5
×××80分求解U盘读写操作××××
有以下几个问题:
1、CBW的dCBWDataTransferLength字段和UFI读写命令的Transfer Length字段到底是低字节在前还是高字节在前。还有是不是dCBWDataTransferLength=Transfer Length*Logical Block Size. 2、进行一次读写操作时,CBW的dCBWDataTransferLength字段是不是就是文件的大小? 3、UFI读写命令有Logical Block Address和Transfer Length两个字段,难道就是在Logical Block Address开头的地址连续读写Transfer Length个Logical Block吗?不是说文件的保存不是连续额吗? 先就这些吧,哪位大侠说说。 |
|
沙发#
发布于:2003-08-20 13:10
1.低字节在前的。
你说的dCBWDataTransferLength=Transfer Length*Logical Block Size.只是在命令是read,和write的时候是这样的 2。CBW的dCBWDataTransferLength是表明后面要发送或接受的数据长度。 3。就是在Logical Block Address开头的地址连续读写Transfer Length个Logical Block。文件的保存不一定是连续的,但是也不用每次就读一个Logical Block阿,一次可以连续读多个Logical Block的。 |
|
板凳#
发布于:2003-08-20 13:53
同意楼上的
|
|
|
地板#
发布于:2003-08-20 16:46
CDB 2a 00 00 00 - 00 a3 00 00 WRITE10
08 00 DO 55 53 42 43 - 00 95 9c 81 USBC.... 00 10 00 00 - 00 00 0a 2a .......* 00 00 00 00 - a3 00 00 08 ........ 00 00 00 00 - 00 00 00 ....... 1 这是我在往U盘里写一个文件的时候抓出来的,低位在前的话dCBWDataTransferLength=00 00 10 00,Transfer Length=00 08 00 00,按Logical Block Size=512的话乘起来就不等啊~~按高位在前就相等。还有我看的UFI资料命令都是12个字节,怎么抓出来的命令,有的是10个字节,有的是6个字节? 2 那CBW的dCBWDataTransferLength的值又谁决定? 3 主机怎么知道在Logical Block Address开头的一段地址是空的? 4 跟着上面那个DO后面的一个DO是不是就是文件实际内容?还是说有一定的格式? [编辑 - 8/20/03 by dayong] |
|
地下室#
发布于:2003-08-21 09:50
1。dCBWDataTransferLength=00 00 10 00,为4096,Transfer Length=00 08 ,按Logical Block Size=512的话乘起来512*8=4096。你的10字节的写命令格式看错了。lba是00 00 a3。你先确认你的u盘是用的ufi协议,好像ufi不都是10字节的吧。ufi我看得不多。这个不敢肯定。
2。你是做host还是做slave,如果是后者,就不用关心这些了。CBW的dCBWDataTransferLength的值意思是到底要发送或返回的数据的大小。 3。主机怎么知道在Logical Block Address开头的一段地址是空的? 这个什么意思?如果你是说lba是0000a3的话,主机写的就是这个地址。过程是lba 0读mbr,知道bpb地址,bpb后面就是fat,然后是root,然后是数据了。 4。对后面就是00 00 a3这个Logical Block的内容了 |
|
5楼#
发布于:2003-08-21 11:59
OK~~给分!
|
|