USB 超时及重试机制

[复制链接]
9364|10
 楼主| dragonyoo 发表于 2008-1-8 15:26 | 显示全部楼层 |阅读模式
当usb host和device传输失败时,譬如host out数据到device,device可能会超时或者返回nack,host会隔多长时间重试一次out?规范里有没有定义?
computer00 发表于 2008-1-8 16:36 | 显示全部楼层

这个好象没有定义。

  
平常人 发表于 2008-1-8 21:33 | 显示全部楼层

OUT数据到DEVICE,Device不回答是严重事故,回答NACK是正常现象

OUT数据到DEVICE,Device不回答是严重事故,一般MS-Windows会隔几个到十几个Frame再重试,重试3次不成功则认为设备失效,Windows将发Reset。<br /><br />OUT数据到DEVICE,Device回答NACK属正常现象,一般MS-Windows会马上重试,基本没有间隔,重试大约几十毫秒后认为设备失效,但我忘了Windows如何处理这种情况,好像也是发Reset。<br /><br />这种超时时限在协议里没有规定,由Host端软件自定义。
sz_kd 发表于 2008-1-8 21:44 | 显示全部楼层

学习了

  
wlsui 发表于 2008-1-8 21:47 | 显示全部楼层

re

OUT数据到DEVICE,Device一直NAK,实际上HOST控制器会自动重试,无需软件要求重试
 楼主| dragonyoo 发表于 2008-1-9 08:51 | 显示全部楼层

从硬件角度看

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OUT数据到DEVICE,Device一直NAK,这个重试只会3次。OUT数据到DEVICE,如果Device超时,这个重试也只会3次。这两种情况下的重试间隔有没有区别?我想NACK的重试间隔应该比timeout会快一些。<br />&nbsp;&nbsp;&nbsp;&nbsp;从硬件角度看,NACK的重试有没有可能会在一个微帧里3次?感觉在一个微帧里重试3次也太快了。
computer00 发表于 2008-1-9 09:54 | 显示全部楼层

不对吧?out数据到device,device返回NAK,主机不止重试3次吧

协议里面是有个超时限制(返回NAK的次数过多的超时,而不是无应答的超时),但是没有规定重试3次,从我实际使用来看,似乎远不止3次。<br /><br />如果超时后,就会reset,这个就会重试3次reset。
平常人 发表于 2008-1-9 14:40 | 显示全部楼层

NANK超时的间隔由PC驱动决定,超过18bit的时间即可

NACK超时重试的次数不限,但重试次数太多将严重影响系统效率,如果无止境地重试下去,USB总线会被堵死,所以Host软件必须控制重试次数,但USB协议没规定重试次数的上限。
CheneyPeng 发表于 2008-1-10 14:11 | 显示全部楼层

11

好像是重复三次之后就忽略改设备了,至于时间间隔好像没有规定是多少吧
 楼主| dragonyoo 发表于 2008-1-11 08:55 | 显示全部楼层

NCK超时

NCK超时是如何理解的?另外还有个问题,譬如host&nbsp;发出IN数据指令,device还没有准备好,这是可以发送NCK相应,另外我能不能发送一个数据长度为零的data应答?这两种响应对host的处理是否有区别?
computer00 发表于 2008-1-11 09:39 | 显示全部楼层

不是NCK,而是NAK。

你自己都说明白了,你返回NAK,就表示设备未准备好数据;而反回0长度的数据包,则表示设备已经准备好了数据,而数据长度为0。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

52

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部