liuwan
驱动小牛
驱动小牛
  • 注册日期2001-10-15
  • 最后登录2004-04-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2032回复:15

60分贴,请教关于read 10命令的处理过程。

楼主#
更多 发布于:2002-08-07 11:18
各位大虾,请教一个问题,是不是第一个read 10命令过来时就是只读取了根扇区的内容?
其CDB如下:
28 00 00 00 00 00 00 00 01 00
我分析了一下,0x28是操作码,代表read 10命令。紧接着的0x00是保留字节,下面的0x00000000是指读到的逻辑块的开始地址,然后下面的0x00字节又是保留字节,然后的0x0001是此次读命令应该传送的逻辑块的数目,这里为1。最后一个0X00是Control字节。
    我现在不清楚的是:RBC协议里所讲的逻辑块和逻辑扇区是一个概念吗?这里的一个逻辑块大小是不是就是一个逻辑扇区的大小,还是一个簇的大小。我听说硬盘的读写操作是以簇为基本单位进行的,比如64M的三星FLASH,32个扇区组成一个簇,那么这里读就应该是读了32个扇区的内容而不是一个扇区的内容,对吗?也就是说,这里说的一个逻辑快,其实是指一个簇。到底哪种想法是正确的?恳请大侠们赐教。如能解答,一定加分。

最新喜欢:

wdy9927wdy992...
菜菜
panxz
驱动牛犊
驱动牛犊
  • 注册日期2002-04-04
  • 最后登录2007-04-12
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-08-07 16:35
本质上sector 是HDD 和 NAND flash 的最基本单位,read10() 是以sector 为单位的. 何况mobile disk 的block 随着FAT12/FAT16/FAT32 及FLASH 本身的大小而改变. samsung NAND flash 1block=32 page(sector), 其他的media 并不一定遵从这个约定.  至于FAT表以簇为单位是加快速度及减少FAT表本身大小.
edwin
驱动牛犊
驱动牛犊
  • 注册日期2002-03-21
  • 最后登录2003-02-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-08-07 17:19
read 10命令中的一个逻辑块是指一个sector,而在NAND FLASH中读和写操作的基本单位是BLOCK。SAMSUNG和TOSHIBA的NAND FLASH,如果是大于或等于16MB,则 1 BLOCK=32 SECTOR ,1 SECTOR=512Bytes.
liuwan
驱动小牛
驱动小牛
  • 注册日期2001-10-15
  • 最后登录2004-04-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-08-07 17:23
那read 10和write 10不就是读和写操作吗?
菜菜
liuwan
驱动小牛
驱动小牛
  • 注册日期2001-10-15
  • 最后登录2004-04-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-08-07 17:33
怎么没法继续给分了呀?
菜菜
hunterkiller
驱动牛犊
驱动牛犊
  • 注册日期2002-05-20
  • 最后登录2004-03-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-08-07 17:48
philips 的mass storage 驱动RBC_ReadCapacity()里指定了block的大小为512。
edwin
驱动牛犊
驱动牛犊
  • 注册日期2002-03-21
  • 最后登录2003-02-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-08-07 18:57
错!1 SECTOR = 512 BYTE
edwin
驱动牛犊
驱动牛犊
  • 注册日期2002-03-21
  • 最后登录2003-02-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-08-07 19:04
操作码28后面的00 00 00 00 是逻辑地址;而 01 是传输长度,代表为 1 SECTOR。就是读 512 BYTE 数据!!!
hunterkiller
驱动牛犊
驱动牛犊
  • 注册日期2002-05-20
  • 最后登录2004-03-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-08-07 19:12
RBC所有单位是逻辑块,logic block,大小指定为512bytes,因此你说是扇区也可以。
liuwan
驱动小牛
驱动小牛
  • 注册日期2001-10-15
  • 最后登录2004-04-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-08-07 19:26
有点明白了,就是那个所谓簇的概念是错误的了。
菜菜
edwin
驱动牛犊
驱动牛犊
  • 注册日期2002-03-21
  • 最后登录2003-02-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-08-08 11:37
为什么不给分???
ZONE 的概念不错!在大于或等于16MBFLASH,1 ZONE = 16 MB!
liuwan
驱动小牛
驱动小牛
  • 注册日期2001-10-15
  • 最后登录2004-04-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-08-08 11:46
为什么不能继续给分了?我也不知道
菜菜
liuyx
驱动牛犊
驱动牛犊
  • 注册日期2002-03-04
  • 最后登录2004-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-08-08 12:22
To liuwan

我不知道你有没有搞清楚read10的数据格式?其实这个问题应该从系统的方面来考虑就很清楚了,前面有人说得不错,是512个字节,但是这样的解释是不正确的,不知你有没有看过其它的通讯协议,比如TCP/IP等,一般化的系统架构。其实你把这个命令解析出来是好事,但是在包含这个命令的包里面还有其它的信息,而那些是属于传输协议部分的数据也是可以确定这个部分的大小的,为什么会是512字节,哪是因为首先系统要看到文件管理区的具体信息,而真正的操作过程中read10命令中的数据长度是可以任意变化的。希望你能更深入的理解这个问题,有什么新的心得,发出来看看:)
liuwan
驱动小牛
驱动小牛
  • 注册日期2001-10-15
  • 最后登录2004-04-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-08-08 13:58
哦,I SEE,就是说在真正读的操作过程中,读的长度是变化的,并不一定是一个扇区。
菜菜
edwin
驱动牛犊
驱动牛犊
  • 注册日期2002-03-21
  • 最后登录2003-02-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-08-08 18:41
对!读和写的长度是可以变化的!但它们的单位是SECTOR,而读几个SECTOR,是在read()命令格式中定义的!
liuwan
驱动小牛
驱动小牛
  • 注册日期2001-10-15
  • 最后登录2004-04-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-08-09 11:42
多谢了,你这么一解释,我明白了很多!
菜菜
游客

返回顶部