阅读:2798回复:33
read10 出现timeout 或者 pending?
是怎么回事啊? read10 要求读4k字节时发生超时timeout 和pending情况,但是刚开始要求发送512字节时没问题。 有人知道什么原因嘛?
|
|
沙发#
发布于:2004-04-20 20:37
哪位大侠帮我解决了这个问题,上海的,北京的,南京的或者扬州的我都可以请吃饭!大家帮帮忙,u盘开发最后一步了。
|
|
板凳#
发布于:2004-04-20 21:56
你用什么mcu??
好好查查你的程序,肯定是你的发送程序有问题! |
|
地板#
发布于:2004-04-20 22:06
准确说:1。有可能是你没有发够所要求的数据
2。有可能是你没有发CSW。要在整个数据包的最后一块(512BYTE)第七次发送(如果按照64个BYTE发送一次,一块需要分8次发送。D12芯片是这样的)返回一个CSW,然后在整个数据包发完后再发CSW。 我估计是第二种情况可能性较大 |
|
地下室#
发布于:2004-04-20 22:51
有的时候发送到x0380,或者0x780时,就不再来transmit中断,然后host发reset中断,就重启了。一般情况下发送的数据不对或者时间不对,我的开发板上就会出现host reset。但是我觉得很奇怪,都发了那么多了,没问题,那么怎么程序会有问题呢? 而且第一个read10是要求发送0x200字节,没问题啊,发送成功了,在我打开盘符的时候,要求read10 读4k字节时才出现问题,我总是担心是因为我这边会不会因为传输的时间太长了,导致host认为超时了那?
|
|
5楼#
发布于:2004-04-20 22:54
To: lj1978
不是很明白你的意思。 我觉得应该是发完整个4k字节才发csw啊?你所说得是不是d12要求的啊? 我用的是arm的芯片. |
|
6楼#
发布于:2004-04-21 10:24
我是从ISR中激活相应的ist处理数据的。会不会丢中断呢?
|
|
7楼#
发布于:2004-04-21 12:55
这么说你的4K是一次发完的?你总得分几次发吧。那么就试试在倒数第二次后发个CSW,然后在发完最后一次后再发一次CSW。
我是应用D12的。BUFF只有64,所以得分八次传一个块。如果需要传8个块,那么就在最后一个块的第七次发完后发CSW,然后发完第8次再发CSW。 我觉得这并不是D12要求的。D12仅仅是负责传输的。有可能主机就是这么设置的。 |
|
8楼#
发布于:2004-04-21 13:17
我的端点fifo size是128bytes,但是最大packetsize为64,那就是在接收到read 4k命令后,每来一次transmit中断发送64字节,一共发送64次,最后发csw. 发512字节的时候我就是这么做的,而且我看到普通u盘的bushound数据就是连续DI 4k,最后一个csw. 你所说的块是什么意思?
|
|
9楼#
发布于:2004-04-21 13:19
哦,你所说的块是指flash的逻辑块把。
|
|
10楼#
发布于:2004-04-21 13:21
我不明白你说READ命令时候要用BYTE做为单位?
命令里面的长度就是按照块做单位。一块相当FLASH的一页。512个字节 |
|
11楼#
发布于:2004-04-21 13:22
是否你对命令长度理解有误?命令是要求你发40个块吧。也就是
40*512个字节。 |
|
12楼#
发布于:2004-04-21 13:25
bushound read10 数据如下,要求4k
14 CDB 28 00 00 00 - 00 00 00 00 - 08 00 READ10 187us 77.1.0 13 DO 55 53 42 43 - 08 d0 a7 fe - 00 10 00 00 - 80 00 0a 28 USBC...........( 1.7ms 78.1.0 00 00 00 00 - 00 00 00 08 - 00 00 00 00 - 00 00 00 ............... 78.1 |
|
13楼#
发布于:2004-04-21 13:31
呵呵。我也没招了。你真确认发了那么多数据了吗?
|
|
14楼#
发布于:2004-04-21 13:35
现在就是,发送不到4k,有时只到0x3d0,这个不确定,也有发送到0x780,0xd00时,总之还没有到0x1000,就收不到transmit中断,无法继续发送数据了,然后就收到host reset中断。
|
|
15楼#
发布于:2004-04-21 13:37
我以前也碰到RESET的问题。原因是D12芯片发送后没有清空。结果主机总认为里面还有数据要收,所以就又要求读。但是实际上我没有数据了。或者有数据,可是需要重新写入。可是D12会自动把里面的数据重发。结果HOST就人为不对了。所以就RESET。
供你参考 |
|
16楼#
发布于:2004-04-21 13:40
这么看来跟我碰到的类似。我以前也是不定的。反正就是会频繁RESET。你的USB需要发送完后晴空吗?反正D12就是这样。不晴空HOST就人为还有数据。就再要。结果D12自动重发。这样就乱了。
|
|
17楼#
发布于:2004-04-21 13:41
估计你用的是Windows自带驱动,肯定是超时问题,如果自己写驱动没有此问题。建议你一次传少点或自己写驱动读写。
|
|
18楼#
发布于:2004-04-21 13:42
更正一点。前面说的关于发的CSW的只是在响应WRITE10时候才需要。
READ10是不需要。开始没看清楚以为是写。 |
|
19楼#
发布于:2004-04-21 13:44
iamchine :
不会吧。我就是用XP的驱动。传多少都没问题呀。我看过命令最大要求传过80H个块。是8*16*512个BYTE |
|
上一页
下一页