阅读:2841回复:20
USB底层驱动(50分),高手帮忙!
向各位XDJM请教。
我这里用8951控制SL811HS读写U盘,U盘为BULK―ONLY和SCSI协议。前期的枚举已经通过,设置地址为1;我现在完全按照CBW、数据、CSW的顺序操作。当枚举后直接用READ10命令(或INQUIRY)读U盘可以成功;在U盘状态正常的情况下WRITE10命令也成功。但还有以下几个问题: (1)、程序不能够循环读(READ10),必须重新对U盘复位和枚举; (2)、我原以为基本解决的WRITE10命令还没有完全好,具体现象是,第一次写完后,读取CSW成功,即使重新对U盘复位和枚举,也不能对U盘再次操作(写),必须通过计算机写一次(还必须是同一个逻辑块)。我做了一个实验,收到CSW后,又直接用BULK-OUT再发一次数据(不发CBW和CSW),把U盘发到STALL状态,第二次重新插上U盘,写操作还是不能成功,但第三次就可以,现象是隔一次会成功一次。 (3)、有关零数据帧,我在写完整数个64字节后(如一个逻辑块512字节,我上面所有的操作都是这么多),发不发零数据帧现象相同。 关键时候,请大家拉兄弟一把。谢谢! |
|
沙发#
发布于:2002-12-10 14:42
SL811HS是不是HOST芯片?
|
|
板凳#
发布于:2002-12-10 14:47
YES。
|
|
地板#
发布于:2002-12-10 15:28
HOST端要做的事情很少,你的地址没有发错?
|
|
地下室#
发布于:2002-12-10 15:44
好象没有错。每次复位枚举后均能READ10成功,就是不能循环读。
写的时候,只要U盘状态正常也可以写成功,但不能循环,而且复位枚举都不起作用(复位枚举通过,写不行)。或者我故意再发一个命令(WRITE10),U盘回STALL。这样的话,隔一次会成功一次。 |
|
5楼#
发布于:2002-12-10 15:55
还有一个现象,大家讨论一下:
CBW采用DATA0发送31个字节,然后如果再用DATA0开始发512个字节(每帧64字节),那么第一个64字节不能够写入;数据从第二个64字节开始写入,CSW读不到。但前面提到的每个数据帧U盘都回ACK。如果从DATA1开始发512个字节(每帧64字节),才能够成功,包括读到正确的CSW。我如果在512字节后多发一个ZERO-LENGTH数据帧,效果相同。 我对此有两个疑问: 1、CSW和下面的数据的DATA0/DATA1是连续的吗?读是不是也这样,这才能解释我为什么循环读不行。(我还没试过) 2、ZERO-LENGTH数据帧有用没有,有用的话什么时候用? 抛砖引玉,大家指点。 |
|
6楼#
发布于:2002-12-11 08:14
自己顶一下。
我实在想不通,大家帮帮忙。 :( 死不瞑目。。。。。。。。。。。。。。 |
|
7楼#
发布于:2002-12-11 10:13
斑竹:救命啊!!!!!!!!
|
|
8楼#
发布于:2002-12-11 10:28
:D
抱歉!俺还没有用过它呢! |
|
|
9楼#
发布于:2002-12-11 10:37
那些玩过的同志呢?
.......................... |
|
10楼#
发布于:2002-12-11 13:49
那些玩过的同志呢? ???? |
|
11楼#
发布于:2002-12-11 13:55
9505104大佬:
再提点建议。 不辩不清啊。 |
|
12楼#
发布于:2002-12-11 14:00
9505104大佬: 你是在哪里?我在深圳。可能的话,电话交流更好,讲的比较清楚。 |
|
13楼#
发布于:2002-12-11 14:03
OK,OK,OK!
我在南京。025-3210548-8366 my name is qian yu. 你呢?如何联系。 [编辑 - 12/11/02 by qianyu123] |
|
14楼#
发布于:2002-12-11 14:07
现在上班。
我的邮箱:summer_xgp@hotmail.com |
|
15楼#
发布于:2002-12-11 14:27
我想到了,不能循环读的问题,我猜一定是你的data toggle切换错了。
零数据帧的问题看我给你回的email。 |
|
16楼#
发布于:2002-12-12 08:59
Bulk Data: 我想也是Toggle的问题,每次应该都是Data0开始的。。
顺便问一个问题:你怎么计算硬盘的容量的? |
|
17楼#
发布于:2002-12-12 09:31
每次不能从DATA0开始。
硬盘容量READ CAPACITY 里有定义。 |
|
18楼#
发布于:2002-12-12 10:27
硬盘容量READ CAPACITY 里,定义的是最后一个逻辑块地址,以及最后一个逻辑块的大小,按到里直接加上就是容量,那可差得远?我想我可能那儿错了。
BULK 传输不是规定了第一个Data必须用DATA0吗? |
|
19楼#
发布于:2002-12-12 15:23
大哥,是乘号!
|
|
上一页
下一页