打印
[USB驱动]

主机in事务,不发送应答

[复制链接]
1553|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
myxiaonia|  楼主 | 2013-8-7 13:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主机in事务,不发送应答(一般是发生传输错误),设备相应的in端点取消此处传输事务,那么请问怎么重试呢???

nak应答只需要当前事务重试就可以了,应用层不需要参与,那么以上没有应答的情况,是不是也只是需要重传此包即可,还是说需要应用程序层重启本次传输???

比如某次控制传输有多个in事务,其中一个in事务发生错误了,是需要重启完整的这次控制传输吗,这样的话也太傻了,多传很多次啊,而且已经分包成多个in事务了,互相之间应该说只有先后顺序没必要完整重启啊

相关帖子

沙发
myxiaonia|  楼主 | 2013-8-7 13:46 | 只看该作者
这个是参考的库中对于控制传输错误重试的注释
    /*
    After a halt condition is encountered or an error is detected by the
    host, a control endpoint is allowed to recover by accepting the next Setup
    PID; i.e., recovery actions via some other pipe are not required for control
    endpoints. For the Default Control Pipe, a device reset will ultimately be
    required to clear the halt or error condition if the next Setup PID is not
    accepted.
    */


看样子设备端点如果没收到下一个完整控制传输的话会保持禁止,除非复位
看来它还真的傻傻的重新开启这次传输了

使用特权

评论回复
板凳
yezhenqin| | 2013-8-9 17:30 | 只看该作者
很负责的告诉你,如果主机检测到控制传输出错(error/stall/超时,无论在IN/OUT事务那个阶段)均结束本次IN/OUT事务。是否发起发起重传是应用程决定。在LINUX的底驱可以看到,HOST端如果检测到控制传输出错,重新发起本次请求(setup 包),如果出错超过3次,直接挂起从机。

使用特权

评论回复
地板
myxiaonia|  楼主 | 2013-8-20 08:48 | 只看该作者
yezhenqin 发表于 2013-8-9 17:30
很负责的告诉你,如果主机检测到控制传输出错(error/stall/超时,无论在IN/OUT事务那个阶段)均结束本次IN ...

感谢你的回复,就是说需要重启的错误必须重新开始完整的一次控制传输
那么对于有些usb底层的错误,例如数据pid错误,是否就可以不需要完整的重启传输,按usb规范,这是个重同步的问题,nak是否也是这样的情况

使用特权

评论回复
5
yezhenqin| | 2013-8-24 22:48 | 只看该作者
pid一般有USB控制器发起,任何数据发起前都先发PID,一般是不会错的,如果PID错,控制器应该会检测到USB线上err或STALL信号,反映在寄存器位,一样需重传,NAK看情况,在控制传输中,如果主机一直检测到从的NAK,软件上认为出现超时错误,也需重传。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
myxiaonia + 2 很给力!
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

499

帖子

5

粉丝