lily~~
驱动牛犊
驱动牛犊
  • 注册日期2004-04-24
  • 最后登录2004-06-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1845回复:12

sl811问题请教…………

楼主#
更多 发布于:2004-05-23 09:56
    现在的情况是枚举过程已经完成。接下来就是发送SCSI命令了吧。第一个命令inquiry12之后,返回36字节的数据 00 08 02 02……………… 不懂前面的16字节什么意思,中间16字节是说明U盘大小的ASCII码,后面的4字节 32 …… 也不懂什么意思。。嗯,这36个字节传送完了以后,还有一个13字节的CSW返回。算是相当正常了,因为跟bus hound抓的在pc机上返回的一模一样。。

    按照跟第一个inquiry的方式继续送命令 23,28 ……之后不能正常返回数据。可以看到数据发送完成。但是任凭怎么努力都没再返回数据了。单独的发每条命令返回数据是正常的。合起来就不行了。郁闷。。

    不懂我有没讲清楚。各位大侠知道的指导下吧。。毕设来不及了。。谢谢!!
aasa2
驱动中牛
驱动中牛
  • 注册日期2004-04-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分525分
  • 威望339点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-05-23 15:19
好像是UFI命令吧!
技术交流:aasa2@21cn.com QQ群:10863699
jerry_yang
驱动牛犊
驱动牛犊
  • 注册日期2002-10-15
  • 最后登录2005-05-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-05-24 10:07
  这种情况有可能你发送的数据的触发位没有翻转.
  每次接受到ACK就翻转一次.
智者当借力而行
jerry_yang
驱动牛犊
驱动牛犊
  • 注册日期2002-10-15
  • 最后登录2005-05-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-05-24 10:14
  能把u盘使用的SCSI命令集的资料给我好吗?
  yixianwei@sict.ac.cn
  yixianwei@hotmail.com
智者当借力而行
lily~~
驱动牛犊
驱动牛犊
  • 注册日期2004-04-24
  • 最后登录2004-06-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-05-24 20:32
to jerry_yang:
这种情况有可能你发送的数据的触发位没有翻转.
                           ~~~~~~~~
                                指的是什么触发位呀。不懂哦
每次接受到ACK就翻转一次.

SCSI的命令集太大了邮件不能传输出去。。贴在这里了哈。

[编辑 -  5/25/04 by  lily~~]
附件名称/大小 下载次数 最后更新
2004-05-24_laiqing_SCSI PRIMARY Commands spc2 r20.pdf (5442KB)  47
jerry_yang
驱动牛犊
驱动牛犊
  • 注册日期2002-10-15
  • 最后登录2005-05-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-05-24 21:52

u盘的每个端点都有数据触发位,收到数据和收到CSW都应该将u盘对应端点的触发位翻转.
智者当借力而行
lily~~
驱动牛犊
驱动牛犊
  • 注册日期2004-04-24
  • 最后登录2004-06-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-05-25 00:20

请问你说的是DATA0和DATA1的转换么。
如果是这个的话从811的03H寄存器可以看到,OUT成功的时候是01H,也就是有ACK应答并且是DATA0;IN成功的话是09H,也就是有ACK应答并且是DATA1的。。这个好像是成功了以后自己返回的数据。。而且程序中在数据启动传输的时候,00H寄存器也相应的置了DATA0和DATA1的。。
jerry_yang
驱动牛犊
驱动牛犊
  • 注册日期2002-10-15
  • 最后登录2005-05-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-05-25 08:33
呵呵,我的意思是这样:
假设你的u盘刚开始的时候bulkIn endpoint和bulkOut endpoint开始时都是:data0,现在你发inquiryCBW
(1)发CBW,得到ACK,bulkOut endpoint->data1
(2)收数据,假设只收一个包,得到ACK bulkIn endpoint->data1
(3)收CSW,得到ACK bulkIn endpoint->data0

这时候你再发inquiryCBW.
(1)发CBW(这个包的必须得设为data1),得到ACK,bulkOut endpoint->data0

你是这样做的吗?
智者当借力而行
lily~~
驱动牛犊
驱动牛犊
  • 注册日期2004-04-24
  • 最后登录2004-06-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-05-25 13:11
这时候你再发inquiryCBW.
(1)发CBW(这个包的必须得设为data1),得到ACK,bulkOut endpoint->data0

你是这样做的吗?

我现在做的情况是:
发送第一个Inquiry:
(1)发CBW(这个包我设置的是data0),得到ACK, bulkOut endpoint->data0
(2)收数据和CSW同时进行(这个包设置的是data1),bulkIn endpoint->data1

另外,我想请问下,03H寄存器读出来的bit3的data0/data1标识的是当前传送完成的数据包,还是指下一次的数据包呀。。


jerry_yang
驱动牛犊
驱动牛犊
  • 注册日期2002-10-15
  • 最后登录2005-05-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-05-25 13:44
你对数据触发的理解有误.
u盘的每个端点都有相应的触发位.好像你这里你搞错了.
 你搜一下\"数据触发\"的帖子,应该有详尽的解答
智者当借力而行
jerry_yang
驱动牛犊
驱动牛犊
  • 注册日期2002-10-15
  • 最后登录2005-05-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-05-25 13:46
03h的bit3是指当前完成的.
智者当借力而行
zyyz1100
驱动牛犊
驱动牛犊
  • 注册日期2003-01-11
  • 最后登录2009-10-12
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望12点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-05-25 13:54
其实在系统枚举通过过后,host基本只用到bulk endpoint进行数据传输,除非是endpoint stall。
所以传输中完全按照usb spec定义来执行就ok了。
bulk write或者bulk write初始化一次传输时,都是data toggle bit=data0,而后成功后在data0,data1间切换。
lily~~
驱动牛犊
驱动牛犊
  • 注册日期2004-04-24
  • 最后登录2004-06-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-05-25 16:47
非常感谢 jerry_wang 。。
我搜索了数据触发下还真的是蛮多的呢。。呵呵。
明天过去再好好试试看!!
游客

返回顶部