LJ1978
驱动小牛
驱动小牛
  • 注册日期2004-02-25
  • 最后登录2011-06-08
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望24点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:1582回复:10

响应SCSI指令出现的奇怪问题

楼主#
更多 发布于:2004-03-29 17:56
INQUIRY-->INQUIRY-->设备列举-->READ FORMAT-->READ FORMAT
-->设备列举-->READ
CAPACITY-->READ CAPACITY-->设备列举-->READ10-->READ10


大家可以看到存在两个问题:
1.每个包HOST都发两次.我要响应两次(估计响应不对.但我不知道怎么才对)
2.响应两次后莫名其妙会重新列举.


望各位高手赐教.
LJ1978
驱动小牛
驱动小牛
  • 注册日期2004-02-25
  • 最后登录2011-06-08
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望24点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-03-31 16:33
现在我改过来了。发512。分8次
但似乎没有碰到你讲的需要在第7次发CSW的问题?
还有就是接下来的是MODE SENSE。但是不是5A而是1A。这是什么问题?
LJ1978
驱动小牛
驱动小牛
  • 注册日期2004-02-25
  • 最后登录2011-06-08
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望24点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-03-31 11:18
太谢谢各位了。包括那位说了等于没说的SUNSHANGXIN兄弟
因为你的话让我明白其实很多问题其实只是由于某些小问题引起的。

我明白原来READ10中的长度是指SECTOR。等我再试试成功了再给各位加分。谢谢。。。。。
dragon_hn
驱动中牛
驱动中牛
  • 注册日期2002-05-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分297分
  • 威望40点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-03-31 10:45
我的READ10是:
28    ;CODE
00  
00 00 00 00;LOGICAL BLOCK ADDRESS
00
00 01      ;LENGTH
00 00 00
就是让我传第0个BLOCK。长度是256个字节。
我分四次传了。后面还带CSW。
但是由于CBW的LENGTH是00 02,所以CSW的RESIDUL为00 01
你觉得对吗?为什么HOST要反复的发READ10


上述命令对应的操作是读一个扇区(512BYTE).你命令码的
BYTE[8-11]一般应该为00 02 00 00即表示512字节
  如果为00 01 00 00即你所说的256字节了.
BYTE[15]=28H
BYTE[16]=00H
BYTE[17-20]=00 00 00 00即扇区地址
BYTE[21]=00
BYTE[22-23]=00 01即扇区数

所以
(1)你应该检查一下到底是传256字节还是512字节
(2)如果是512字节,那你在传输完7次之后发送CSW再传输第8次
   如果是256字节,那你在传输完3次之后发送CSW再传输第4次
经我验证CSW的确应该在发送最后一个数据包之前发送.

www.dragon-2008.com 欢迎交流
SUNSHANGXIN
驱动老牛
驱动老牛
  • 注册日期2002-11-19
  • 最后登录2009-08-01
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望19点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-03-31 09:19
我咋不会遇到这么复杂的问题 呢
正是郁闷 大虾们
[b]苍白的,不是文字,是人的思想 虚伪的,不是网络,是人的灵魂 伤心的,不是爱情,是人的心灵 难忘的,不是容貌,是人的思诀 黎明的曙光早已不见了夕日的辉煌 东方的日出早就失去了往日的灿烂 而我也尽脱了昨日的笑容去迎接明天的枯涩 [/b]
shaoshengli
驱动小牛
驱动小牛
  • 注册日期2002-06-24
  • 最后登录2022-02-14
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望77点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2004-03-31 08:32
你分析的可能不对,CBW_READ10要从你的装置里读(00 01 00 00)BYTE,即80Sector。
LJ1978
驱动小牛
驱动小牛
  • 注册日期2004-02-25
  • 最后登录2011-06-08
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望24点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-03-30 14:31
我的READ10是:
28    ;CODE
00  
00 00 00 00;LOGICAL BLOCK ADDRESS
00
00 01      ;LENGTH
00 00 00
就是让我传第0个BLOCK。长度是256个字节。
我分四次传了。后面还带CSW。
但是由于CBW的LENGTH是00 02,所以CSW的RESIDUL为00 01
你觉得对吗?为什么HOST要反复的发READ10
dragon_hn
驱动中牛
驱动中牛
  • 注册日期2002-05-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分297分
  • 威望40点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-03-30 14:00
令人郁闷的是我偏偏不是用BUSHOUND查的。而是在开发机上跟踪的。
到了READ10后我也不知道该咋答了。反正就把BPB发过去。但是HOST
仍然使劲给我发READ10。。。。。

我也是在开发板上开发的,因为我在开发板上同时加了HOST和DEVICE,所以可以互相检查.
主机给你发什么命令其实你不用管,照着回答就行了,而且98/2000/xp各有不同,不能用INQUIRY-->INQUIRY-->设备列举-->READ FORMAT-->READ FORMAT-->设备列举-->READ一概而论.
第一个READ0也不能是强行返回BPB,你要看它是读那个扇区,应该是HOST读那个扇区你就返回那个扇区,什么BPB/MBR其实你都不用管.
如果机器老是重新枚举,你应该检查一下你返回的数据和你返回的CSW.估计有可能是CSW的问题.
www.dragon-2008.com 欢迎交流
LJ1978
驱动小牛
驱动小牛
  • 注册日期2004-02-25
  • 最后登录2011-06-08
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望24点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-03-29 21:22
令人郁闷的是我偏偏不是用BUSHOUND查的。而是在开发机上跟踪的。
到了READ10后我也不知道该咋答了。反正就把BPB发过去。但是HOST
仍然使劲给我发READ10。。。。。
flyhye
驱动小牛
驱动小牛
  • 注册日期2003-07-01
  • 最后登录2012-01-11
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-03-29 18:53
只会响应一遍。如果是用BusHound的话,应该在Devices项只选择一个设备看看,很有可能是重复选了,比如说,既有Hub、又有Mass store,又有什么disk什么的。去掉试试看
千载奇逢,无如好书良友 一生清福,只在碗茗炉烟
alilyf
驱动牛犊
驱动牛犊
  • 注册日期2004-01-18
  • 最后登录2004-04-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-03-29 18:42
如果你是在Bushound办
游客

返回顶部