hustdj
驱动牛犊
驱动牛犊
  • 注册日期2003-06-06
  • 最后登录2008-07-02
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:1624回复:5

为什么我的scsi命令总是调不通????

楼主#
更多 发布于:2003-06-19 22:46
我开发单片机读写U盘(登科U盘,www.dengke.com)。

这几天,我先用bushound截取U盘的scsi命令,然后写入程序中
这样反复试了几个常用的scsi命令,唯一调试通过的命令是
test unit ready(00H),设备返回了一个csw,还是在一个
外接电源的USB设备上调试通过的,其它的命令完全没有正常
返回值。我查了一下报错代码,对应的英文如下:
The endpoint returned is less than MaximumPacketSize and
that amount was not sufficient to fill the specified buffer

结果不论我如何调节IN packet的大小,都出现上面的情况,
各位大侠,能不能给点建议呀。

最后问一个问题:
返回的数据和csw是不是一起返回,举例子说明:
我要求返回一个read capacity,返回值为8byte
我的in packet可不可以直接设为8+13=21byte?

如果不行,也就是非要用两个in packet,那么也就是说

不管U盘如何响应,针对主机端而言
in data packet和in csw packet完全是靠时间延迟来区别的,
中间没有任何的任何特殊的地方?





clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-20 08:59
发完数据再发csw,区分csw是开始的55 52 42 43。一共发13bytes。
mhxsoft
驱动牛犊
驱动牛犊
  • 注册日期2003-06-13
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望10点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-20 09:41
我用的是SAMSUNG的U盘,不论哪一个SCSI命令都不返回数据:
SCSI命令(ACK)--DATAIN(NAK)--????
也就是SCSI命令发过去了,没有数据返回,IN后只有NAK应答。
这个问题一直在阻挡着我,这到底为什么????
hustdj
驱动牛犊
驱动牛犊
  • 注册日期2003-06-06
  • 最后登录2008-07-02
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-06-20 10:22
clementzhao兄,先谢谢你的回贴。
不过我的问题不是这样的。

我的第二个问题是这样:
我在发出read capacity命令后,按照协议来,接下来,我一共
要in操作两次,第一次,in capacity的数据,第二次,in csw。

既然两次都是in操作,我何不干脆一次就in进来了。

in capacity 的数据量是8byte,in csw的数据量是13byte,
所以我就想,一次就 in 8+13=21 byte不就行了吗,不知道
这样行得通吗?
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-06-20 11:57
在读写scsi命令时!ep的大小要按照开始设备描述符返回值来设定!
另外,有很多优盘不规范,对命令先后次序有要求!
flycat0101
驱动小牛
驱动小牛
  • 注册日期2002-06-24
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2003-06-20 14:20
clementzhao兄,先谢谢你的回贴。
不过我的问题不是这样的。

我的第二个问题是这样:
我在发出read capacity命令后,按照协议来,接下来,我一共
要in操作两次,第一次,in capacity的数据,第二次,in csw。

既然两次都是in操作,我何不干脆一次就in进来了。

in capacity 的数据量是8byte,in csw的数据量是13byte,
所以我就想,一次就 in 8+13=21 byte不就行了吗,不知道
这样行得通吗?
 


行不通的,这是协议规定的必须分开传!如果一次全传完了,第二个IN token的时候你传什么回去呢?这个时候肯定出错
我思,故我在
游客

返回顶部