gglee
驱动牛犊
驱动牛犊
  • 注册日期2001-09-04
  • 最后登录2002-01-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2034回复:6

ISO传输为甚要在驱动程序开双缓冲

楼主#
更多 发布于:2001-09-30 15:05
ISO 传输中所要求的双缓冲应该是在主控制器硬件上和USB设备端
中设计的吧?为什么要在驱动程序中开双缓冲呢?
是不是一个用于接收USB总线上的数据,另一个用于将数据发往用户程序?但好像不能实现。因为如果要将数据返回到用户程序,那么这个IRP应当已经完成了,就不可能接受USB总线上的数据了。
不知道我的理解对不对,请各位大虾指点!
gglee
wuqix
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2008-06-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-10-01 13:54
用不着开双缓冲啊,
两个IRP/URB是必要的
gglee
驱动牛犊
驱动牛犊
  • 注册日期2001-09-04
  • 最后登录2002-01-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-10-02 21:17
在cypress给出的GPD中好像是这么说的,我也没看明白。
但为什么要保证两个irp呢?这和先发一个irp,然后在完成例程
再发一个irp有什么不同?

此外还有一点不清楚的是:irp 在完成之后,切换到用户态,应用
程序才能启动另一个I/O请求。那么在这两个请求之间的间隔内,HCD
是不会接受到ISO IRP 的,这是不是意味着在总线上的ISO TRANSACTON 不是连续的呢?至少有一帧不含ISO 包。
gglee
wuqix
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2008-06-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-10-03 13:48
我认为最关键的问题是时刻保证USBD的等时IRP队列中有至少一个IRP,“先发一个irp,然后在完成例程再发一个irp”经我实际测试,只有一个IRP/URB速度不够(我要作到7.x M),至少在BULK时是这样。所以两个IRP/URB是必要的。
从你的问题看,你的USB设备好象不是STREAM ISO。ISO的带宽一定,每一桢都有ISO包,只不过有没有有用数据不一定(由固件决定)。另一方面,主机程序运行速度足够快,比如用FOR在送读写请求,你用不着担心1ms送不下去一个IRP。
gglee
驱动牛犊
驱动牛犊
  • 注册日期2001-09-04
  • 最后登录2002-01-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-10-04 11:49
你的意思是同时给usbd发俩个irp?但是不是只有前一个irp完成后,io管理器才把控制权交给驱动程序,此后才能发送第二个irp呢?
也就是说usbd一次只能接受到一个irp。
小弟刚开始学驱动,功力尚浅,能否给个同时发多个irp 的例子先!

主机上的cpu 和 usb host controler 应该是并行运行的,因此当
host controler执行完一个irp而返回用户程序的过程中(由cpu 来
负责),host controller 肯定还是在发sof 的,但只不过该frame
中没有iso  packet.虽然主机速度快,但cpu 和host control是并行运行的,时钟不同步,肯定存在前几个frame包含iso token,而后几桢没有iso token,在后面几桢又有iso token的情形。
gglee
wuqix
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2008-06-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-10-04 12:24
详细说字太多,给个电话,只要你理解的不浅,两分钟就搞定。
singwoo
驱动牛犊
驱动牛犊
  • 注册日期2001-09-10
  • 最后登录2002-02-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2001-10-05 15:34
[QUOTE]原本由 gglee 发表
[B]你的意思是同时给usbd发俩个irp?但是不是只有前一个irp完成后,io管理器才把控制权交给驱动程序,此后才能发送第二个irp呢?
也就是说usbd一次只能接受到一个irp。
小弟刚开始学驱动,功力尚浅,能否给个同时发多个irp 的例子先!

主机上的cpu 和 usb host controler 应该是并行运行的,因此当
host controler执行完一个irp而返回用户程序的过程中(由cpu 来
负责),host controller 肯定还是在发sof 的,但只不过该frame
中没有iso  packet.虽然主机速度快,但cpu 和host control是并行运行的,时钟不同步,肯定存在前几个frame包含iso token,而后几桢没有iso token,在后面几桢又有iso token的情形。 [/B][/QUOTE]

irp 通过USBD 到HCD时已变成了TD,TD以链表的形式形式存在的。由于HOST CONTROLLER 的精巧设计,HCD 加入TD时不须要停掉HOST CONTROLLER的。CPU与HOST CONTROLLER 是并行运行的。所以,只要保证有足够的 irp 变为TD。就可以每个frame都包含iso token,当然
首先得有足够的带宽。


singwoo
游客

返回顶部