阅读:1625回复:5
为什么我的scsi命令总是调不通????
我开发单片机读写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完全是靠时间延迟来区别的, 中间没有任何的任何特殊的地方? |
|
沙发#
发布于:2003-06-20 08:59
发完数据再发csw,区分csw是开始的55 52 42 43。一共发13bytes。
|
|
板凳#
发布于:2003-06-20 09:41
我用的是SAMSUNG的U盘,不论哪一个SCSI命令都不返回数据:
SCSI命令(ACK)--DATAIN(NAK)--???? 也就是SCSI命令发过去了,没有数据返回,IN后只有NAK应答。 这个问题一直在阻挡着我,这到底为什么???? |
|
地板#
发布于: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不就行了吗,不知道 这样行得通吗? |
|
地下室#
发布于:2003-06-20 11:57
在读写scsi命令时!ep的大小要按照开始设备描述符返回值来设定!
另外,有很多优盘不规范,对命令先后次序有要求! |
|
5楼#
发布于:2003-06-20 14:20
clementzhao兄,先谢谢你的回贴。 行不通的,这是协议规定的必须分开传!如果一次全传完了,第二个IN token的时候你传什么回去呢?这个时候肯定出错 |
|
|