阅读:1554回复:5
关于usb协议
按照usb协议的描述,当主机向usb外设发出IN块数据传输请求时,若此时外设还没有准备好数据,则外设发出NAK信号给主机,然后总线进入闲置状态。
我的问题是:如果过了一段时间外设准备好了数据,那么是否不需要主机再次发送请求就能直接将数据传送到主机。 看了协议,一直没有找到这个问题的答案。 请达人指点。 |
|
沙发#
发布于:2005-02-27 20:30
没人理我,5555
|
|
板凳#
发布于:2005-02-27 21:52
按照usb协议的描述,当主机向usb外设发出IN块数据传输请求时,若此时外设还没有准备好数据,则外设发出NAK信号给主机,然后总线进入闲置状态。 俺以前自己看过usb协议。。。。记得不是很清楚了。。 但我理解的是主机应该是周期的发传送数据的请求的。。 就是说。。一次不成功,,过一段时间会接着发请求。。 我记得设备还可以返回一个什么来着??表示设备出错了,,无法传输数据。。。。这样的话,,主机就不在发请求给这个设备了,, 如果返回的是设备没有准备好(返回NAK),,那么过一段时间应该还是会发请求给设备的。。。。 规范里有的,,你仔细看看吧。。 |
|
|
地板#
发布于:2005-02-27 23:13
用nak回host是会retry的,用stall回host就不会retry了
|
|
地下室#
发布于:2005-03-01 13:03
用nak回host是会retry的,用stall回host就不会retry了 非常感谢你的回答。 我还有一个问题不明白,请指教! 我的应用程序利用Createfile()和DeviceIoControl()来和驱动进行通信,并且利用两个线程来分别完成数据的IN和OUT传输。这样在主机利用DeviceIoControl()进行IN数据传输的请求时,如果外设没有数据则返回NAK,而驱动程序中该IRP一直未完成,所以应用程序就会一直等待。现在我利用多线程程序,在遇到这种情况时就将线程悬挂。但是我不知道如果后来外设有了数据后,驱动程序是否能自动将收到的数据传到DeviceIoControl()函数所定义的用于存放数据的内存中? |
|
5楼#
发布于:2005-03-02 15:36
顶啊顶
|
|