tony_fu
驱动牛犊
驱动牛犊
  • 注册日期2001-09-06
  • 最后登录2001-11-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1933回复:6

哪位大虾能说一下D12 bulk 传输的过程

楼主#
更多 发布于:2001-09-25 15:02
在各位的帮助下,我的usb设备的initial已经完成,并且完成了control transmit。我的hardware and software基本借鉴了philips的例程及斑竹大人的zboard。Now,小弟在做bulk transmit时碰到了问题,请各位多多帮忙,让我在10。1之前完成,也可定定心心的出去玩。

1:在zboard程序中,为什么要用endpoint2做bulk端口,是否仅仅因为它有64k。如果我对大小无要求,是否用EP1效果一样。
2:请讲一下bulk的流程。
  我的理解如下:
   bulk读,host通过EP0发一个SETUP包,device收到后通过EP2返回data,若超过64byte,分为多次传。
   bulk写,host通过EP0发一个SETUP包,之后从EP2发数据。

我在USB。C中定义了二个Vendorrequest,在Vendor.c中写了它们的子程序。我用windriver调试,在EP0中写了SETUP包后,在EP2发data。然后在read,但总是回引起程序死掉。各位帮帮我吧。

最新喜欢:

Jkw_DevJkw_De...
tony_fu@citiz.net
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-09-29 10:34
[QUOTE]原本由 tony_fu 发表
[B]就是D12有3个EP,对应3块buffer,对于不同应用(in or out),建立不同的pipe,对吗?

应该说bulk方式(in or out)不需要setup包,setup包仅起通知mcu送数据到EP的作用。

并谢谢热心帮助的朋友。 [/B][/QUOTE]
不是对应3个buffer,而是对应6个buffer!因为每个ep都是双向的,每个in和out都有自己的buffer。
没错。其实也可以不要setup,比如让第一个bulk out通知device下面要干什么,接下来的bulk out/in就是数据。有一种usb mass storage的协议就是这样的。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
DK-boy
驱动中牛
驱动中牛
  • 注册日期2001-07-22
  • 最后登录2005-09-21
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-09-28 10:33
[QUOTE]原本由 tony_fu 发表
[B]就是D12有3个EP,对应3块buffer,对于不同应用(in or out),建立不同的pipe,对吗?

应该说bulk方式(in or out)不需要setup包,setup包仅起通知mcu送数据到EP的作用。

并谢谢热心帮助的朋友。 [/B][/QUOTE]
我不懂什么意思,
应该说每个EP都可以完成你想完成的功能。
只是说你想如何做!
不要被一个例程误导!!!
喜欢清静?享受人生
tony_fu
驱动牛犊
驱动牛犊
  • 注册日期2001-09-06
  • 最后登录2001-11-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-09-27 15:19
就是D12有3个EP,对应3块buffer,对于不同应用(in or out),建立不同的pipe,对吗?

应该说bulk方式(in or out)不需要setup包,setup包仅起通知mcu送数据到EP的作用。

并谢谢热心帮助的朋友。
tony_fu@citiz.net
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-09-27 11:50
[QUOTE]原本由 tony_fu 发表
[B]昨天晚上,我调了一下bulk方式。方法如下:
用windriver首先向EP4写了6bytes数据(我在device程序中将其保存在一个数组中)。其后,使EP5处于监听状态,向EP0写我自定义的SETUP包(在vendor.c中,我写了对应的函数,将先前保存的数据写到EP5中。)即可收到64bytes的数据,前6位是我写的。
该流程对吗?

斑竹提到的:
在driver中读数据的时候,device要先把数据放到buffer里面,driver再去读,否则driver就会在那里傻等。

此处buffer指什么?不是endpoint的地址空间吗?

谢谢rayyang大哥,这次俺能放心的到西安玩,就拜托你了。

 [/B][/QUOTE]
应该是对的。
buffer就是对应的每个ep的buffer,你叫它地址空间也可以。
另外,提醒你一点,其实d12只有3个ep,你所说的ep4,ep5之类的并不是实际的ep。准确的说,只是和host之间建立了不同的pipe而已.
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
tony_fu
驱动牛犊
驱动牛犊
  • 注册日期2001-09-06
  • 最后登录2001-11-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-09-26 10:54
昨天晚上,我调了一下bulk方式。方法如下:
用windriver首先向EP4写了6bytes数据(我在device程序中将其保存在一个数组中)。其后,使EP5处于监听状态,向EP0写我自定义的SETUP包(在vendor.c中,我写了对应的函数,将先前保存的数据写到EP5中。)即可收到64bytes的数据,前6位是我写的。
该流程对吗?

斑竹提到的:
在driver中读数据的时候,device要先把数据放到buffer里面,driver再去读,否则driver就会在那里傻等。

此处buffer指什么?不是endpoint的地址空间吗?

谢谢rayyang大哥,这次俺能放心的到西安玩,就拜托你了。

tony_fu@citiz.net
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2001-09-26 09:42
[QUOTE]原本由 tony_fu 发表
[B]在各位的帮助下,我的usb设备的initial已经完成,并且完成了control transmit。我的hardware and software基本借鉴了philips的例程及斑竹大人的zboard。Now,小弟在做bulk transmit时碰到了问题,请各位多多帮忙,让我在10。1之前完成,也可定定心心的出去玩。

1:在zboard程序中,为什么要用endpoint2做bulk端口,是否仅仅因为它有64k。如果我对大小无要求,是否用EP1效果一样。
2:请讲一下bulk的流程。
  我的理解如下:
   bulk读,host通过EP0发一个SETUP包,device收到后通过EP2返回data,若超过64byte,分为多次传。
   bulk写,host通过EP0发一个SETUP包,之后从EP2发数据。

我在USB。C中定义了二个Vendorrequest,在Vendor.c中写了它们的子程序。我用windriver调试,在EP0中写了SETUP包后,在EP2发data。然后在read,但总是回引起程序死掉。各位帮帮我吧。 [/B][/QUOTE]
1. yes.只是ep2有double buffer,速度快一点。
2. ep0的setup包是辅助通讯的,你也可以不用。
在driver中读数据的时候,device要先把数据放到buffer里面,driver再去读,否则driver就会在那里傻等。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
游客

返回顶部