dayong
驱动牛犊
驱动牛犊
  • 注册日期2003-06-15
  • 最后登录2004-08-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1534回复:5

×××80分求解U盘读写操作××××

楼主#
更多 发布于:2003-08-20 12:28
有以下几个问题:
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吗?不是说文件的保存不是连续额吗?
先就这些吧,哪位大侠说说。
bjzps
驱动小牛
驱动小牛
  • 注册日期2003-03-06
  • 最后登录2009-04-13
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望22点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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的。
leihui1981
驱动小牛
驱动小牛
  • 注册日期2003-07-10
  • 最后登录2004-08-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-08-20 13:53
同意楼上的
轻轻我来了,轻轻我又走了.
dayong
驱动牛犊
驱动牛犊
  • 注册日期2003-06-15
  • 最后登录2004-08-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于: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]
bjzps
驱动小牛
驱动小牛
  • 注册日期2003-03-06
  • 最后登录2009-04-13
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望22点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地下室#
发布于: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的内容了

dayong
驱动牛犊
驱动牛犊
  • 注册日期2003-06-15
  • 最后登录2004-08-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-08-21 11:59
OK~~给分!
游客

返回顶部