PC机如何知道USB设备已把数据准备好

[复制链接]
3275|10
 楼主| 阿多 发表于 2007-12-11 10:00 | 显示全部楼层 |阅读模式
USB协议中规定,任何数据传输都只能由主机来启动,那么当USB设备已经把要上传的数据放到端点中后,PC机又是如何知道的呢?是PC在不停查询这些端点吗?如果是,那么这个工作是由驱动自动完成的吧?
computer00 发表于 2007-12-11 10:06 | 显示全部楼层

那要看什么类型的端点了。

中断传输的会自动查询,你的描述符里面要设置一个查询间隔,单位为ms。<br /><br />其它端点的,需要应用软件自己去查询。
 楼主| 阿多 发表于 2007-12-11 10:14 | 显示全部楼层

是批量传输

但在应用程序中没发现去查询端点的程序,而是发送完一条命令后,等待驱动程序来告诉已经有数据返回了,然后到驱动程序那里去取的数据,奇怪
 楼主| 阿多 发表于 2007-12-11 10:29 | 显示全部楼层

URB是起什么作用的

在BUSHOUND软件中,看到每次DI之前,都有一个URB块,这个是起什么作用的?
computer00 发表于 2007-12-11 10:41 | 显示全部楼层

那就是驱动程序已经帮你完成了这个事。

  
armecos 发表于 2007-12-11 12:01 | 显示全部楼层

就是由PC应用程序不断轮询来了解数据是否准备好的

&nbsp;&nbsp;&nbsp;&nbsp;查询端点由驱动完成,中断传输也是要自己查询的,不会自动完成。
 楼主| 阿多 发表于 2007-12-11 14:58 | 显示全部楼层

谢谢几位大哥

非常感谢,还想请教一下,查询端点的操作是应用程序触发的,只查询指定的端点,还是驱动自己不停查询所有的端点?我用BUSHOUND软件抓取到的数据,有IRP和URB块,这两个都是驱动程序发送的,哪个块完成查询的操作呢,还是查询操作根本捕获不到?
armecos 发表于 2007-12-11 19:15 | 显示全部楼层

看看USB主机的WDM驱动就清楚了

应用程序用CreateFile(&quot;XXX/PIPE1&quot;,)打开某个管道,即对应一个端点。<br /><br />应用程序和驱动程序都要不停查询。<br /><br />应用程序<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1){查询是否收到数据}<br /><br />驱动程序<br />&nbsp;&nbsp;&nbsp;&nbsp;利用完成函数不断触发查询。<br /><br />IRP里包含请求,驱动会根据请求发送URB,URB被USB总线驱动异步处理,驱动程序也看不到具体的硬件操作。<br /><br />www.armecos.com
 楼主| 阿多 发表于 2007-12-12 22:54 | 显示全部楼层

非常感谢

明白了,非常感谢
zhiwei 发表于 2007-12-13 12:47 | 显示全部楼层

我以前搞USB

Buck传输模式的时候,写数据到NandFlash模仿U盘,PC速度太快了,我这不缓冲有限,大文件传输一阵就卡死,USB重新开始枚举,都不知道怎么解决。
armecos 发表于 2007-12-13 16:33 | 显示全部楼层

发NAK拒绝就可以了

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

56

主题

153

帖子

0

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