打印
[数据传输]

今儿遇到一个MSD通信非常奇怪的问题,该怎么理解?

[复制链接]
961|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 l_lin2003 于 2015-1-15 09:17 编辑

在msd通信时,遇到一个非常奇怪的问题:
第一步:第一包CBW中字段dCBWDataTransferLength值设置为0,bmCBWFlags字段值都默认为0(也就是方向为OUT);
第二步:这个时候设备给主机回复一个字节数据0x00,设备不再发送CSW,而是在第三步直接由主机发送CBW给设备;
第三步:发送第二包CBW,主机和设备能继续完整通信。
第四步:发送第三包CBW,设备再响应主机时出错Reset;
如下图所示:


第四步Reset的原因可能是设备响应的数据过长,应该跟第二步没关系。
奇怪的地方在这里,第二步我没有给主机回复CSW,按协议理解,主机应该在等待设备响应的CSW啊,直到超时,但主机没有等待CSW,直接发送第二包CBW了,很难理解啊,想不通~~~~~~~~~~~~~··
大家有遇到或知道原因的吗?谢谢了

相关帖子

沙发
insignal| | 2015-1-14 11:01 | 只看该作者
本帖最后由 insignal 于 2015-1-14 11:03 编辑

第2步就错了

使用特权

评论回复
板凳
l_lin2003|  楼主 | 2015-1-15 09:16 | 只看该作者
insignal 发表于 2015-1-14 11:01
第2步就错了

我知道第二步就错了,但是通信能继续发送CBW啊。
我这里探讨的时,为什么第二步错了,第三步还能继续发送CBW?

使用特权

评论回复
地板
insignal| | 2015-1-15 20:09 | 只看该作者
系统怎么响应无法得知,可能只是因为驱动发包排队原因导致这种情况
可能在linux或者mac下就不是这样了
还有可能在ohci和uhci也不一定完全一样

usb设备要做的只能是遵循规范

使用特权

评论回复
5
l_lin2003|  楼主 | 2015-1-16 08:42 | 只看该作者
insignal 发表于 2015-1-15 20:09
系统怎么响应无法得知,可能只是因为驱动发包排队原因导致这种情况
可能在linux或者mac下就不是这样了
还有 ...

很有可能跟主机USB驱动有关系

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

103

帖子

1

粉丝