seu_zhufeng
驱动牛犊
驱动牛犊
  • 注册日期2004-01-02
  • 最后登录2006-07-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2798回复:33

read10 出现timeout 或者 pending?

楼主#
更多 发布于:2004-04-20 20:25
是怎么回事啊? read10 要求读4k字节时发生超时timeout 和pending情况,但是刚开始要求发送512字节时没问题。 有人知道什么原因嘛?
seu_zhufeng
驱动牛犊
驱动牛犊
  • 注册日期2004-01-02
  • 最后登录2006-07-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-04-20 20:37
哪位大侠帮我解决了这个问题,上海的,北京的,南京的或者扬州的我都可以请吃饭!大家帮帮忙,u盘开发最后一步了。
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-04-20 21:56
你用什么mcu??
好好查查你的程序,肯定是你的发送程序有问题!
LJ1978
驱动小牛
驱动小牛
  • 注册日期2004-02-25
  • 最后登录2011-06-08
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望24点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-04-20 22:06
准确说:1。有可能是你没有发够所要求的数据
        2。有可能是你没有发CSW。要在整个数据包的最后一块(512BYTE)第七次发送(如果按照64个BYTE发送一次,一块需要分8次发送。D12芯片是这样的)返回一个CSW,然后在整个数据包发完后再发CSW。
我估计是第二种情况可能性较大
seu_zhufeng
驱动牛犊
驱动牛犊
  • 注册日期2004-01-02
  • 最后登录2006-07-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-04-20 22:51
有的时候发送到x0380,或者0x780时,就不再来transmit中断,然后host发reset中断,就重启了。一般情况下发送的数据不对或者时间不对,我的开发板上就会出现host reset。但是我觉得很奇怪,都发了那么多了,没问题,那么怎么程序会有问题呢? 而且第一个read10是要求发送0x200字节,没问题啊,发送成功了,在我打开盘符的时候,要求read10 读4k字节时才出现问题,我总是担心是因为我这边会不会因为传输的时间太长了,导致host认为超时了那?
seu_zhufeng
驱动牛犊
驱动牛犊
  • 注册日期2004-01-02
  • 最后登录2006-07-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-04-20 22:54
To: lj1978

不是很明白你的意思。
我觉得应该是发完整个4k字节才发csw啊?你所说得是不是d12要求的啊? 我用的是arm的芯片.
seu_zhufeng
驱动牛犊
驱动牛犊
  • 注册日期2004-01-02
  • 最后登录2006-07-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-04-21 10:24
我是从ISR中激活相应的ist处理数据的。会不会丢中断呢?
LJ1978
驱动小牛
驱动小牛
  • 注册日期2004-02-25
  • 最后登录2011-06-08
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望24点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-04-21 12:55
这么说你的4K是一次发完的?你总得分几次发吧。那么就试试在倒数第二次后发个CSW,然后在发完最后一次后再发一次CSW。
我是应用D12的。BUFF只有64,所以得分八次传一个块。如果需要传8个块,那么就在最后一个块的第七次发完后发CSW,然后发完第8次再发CSW。
我觉得这并不是D12要求的。D12仅仅是负责传输的。有可能主机就是这么设置的。
seu_zhufeng
驱动牛犊
驱动牛犊
  • 注册日期2004-01-02
  • 最后登录2006-07-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-04-21 13:17
我的端点fifo size是128bytes,但是最大packetsize为64,那就是在接收到read 4k命令后,每来一次transmit中断发送64字节,一共发送64次,最后发csw. 发512字节的时候我就是这么做的,而且我看到普通u盘的bushound数据就是连续DI 4k,最后一个csw. 你所说的块是什么意思?
seu_zhufeng
驱动牛犊
驱动牛犊
  • 注册日期2004-01-02
  • 最后登录2006-07-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-04-21 13:19
哦,你所说的块是指flash的逻辑块把。
LJ1978
驱动小牛
驱动小牛
  • 注册日期2004-02-25
  • 最后登录2011-06-08
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望24点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-04-21 13:21
我不明白你说READ命令时候要用BYTE做为单位?
命令里面的长度就是按照块做单位。一块相当FLASH的一页。512个字节
LJ1978
驱动小牛
驱动小牛
  • 注册日期2004-02-25
  • 最后登录2011-06-08
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望24点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-04-21 13:22
是否你对命令长度理解有误?命令是要求你发40个块吧。也就是
40*512个字节。
seu_zhufeng
驱动牛犊
驱动牛犊
  • 注册日期2004-01-02
  • 最后登录2006-07-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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
LJ1978
驱动小牛
驱动小牛
  • 注册日期2004-02-25
  • 最后登录2011-06-08
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望24点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-04-21 13:31
呵呵。我也没招了。你真确认发了那么多数据了吗?
seu_zhufeng
驱动牛犊
驱动牛犊
  • 注册日期2004-01-02
  • 最后登录2006-07-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-04-21 13:35
现在就是,发送不到4k,有时只到0x3d0,这个不确定,也有发送到0x780,0xd00时,总之还没有到0x1000,就收不到transmit中断,无法继续发送数据了,然后就收到host reset中断。
LJ1978
驱动小牛
驱动小牛
  • 注册日期2004-02-25
  • 最后登录2011-06-08
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望24点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-04-21 13:37
我以前也碰到RESET的问题。原因是D12芯片发送后没有清空。结果主机总认为里面还有数据要收,所以就又要求读。但是实际上我没有数据了。或者有数据,可是需要重新写入。可是D12会自动把里面的数据重发。结果HOST就人为不对了。所以就RESET。
供你参考
LJ1978
驱动小牛
驱动小牛
  • 注册日期2004-02-25
  • 最后登录2011-06-08
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望24点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-04-21 13:40
这么看来跟我碰到的类似。我以前也是不定的。反正就是会频繁RESET。你的USB需要发送完后晴空吗?反正D12就是这样。不晴空HOST就人为还有数据。就再要。结果D12自动重发。这样就乱了。
iamchine
驱动小牛
驱动小牛
  • 注册日期2002-11-18
  • 最后登录2005-11-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-04-21 13:41
估计你用的是Windows自带驱动,肯定是超时问题,如果自己写驱动没有此问题。建议你一次传少点或自己写驱动读写。
LJ1978
驱动小牛
驱动小牛
  • 注册日期2004-02-25
  • 最后登录2011-06-08
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望24点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-04-21 13:42
更正一点。前面说的关于发的CSW的只是在响应WRITE10时候才需要。
READ10是不需要。开始没看清楚以为是写。
LJ1978
驱动小牛
驱动小牛
  • 注册日期2004-02-25
  • 最后登录2011-06-08
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望24点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2004-04-21 13:44
iamchine :
不会吧。我就是用XP的驱动。传多少都没问题呀。我看过命令最大要求传过80H个块。是8*16*512个BYTE
上一页
游客

返回顶部