阅读:1933回复:6
哪位大虾能说一下D12 bulk 传输的过程
在各位的帮助下,我的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,但总是回引起程序死掉。各位帮帮我吧。 |
|
最新喜欢:![]()
|
沙发#
发布于: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的协议就是这样的。 |
|
|
板凳#
发布于: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都可以完成你想完成的功能。 只是说你想如何做! 不要被一个例程误导!!! |
|
|
地板#
发布于:2001-09-27 15:19
就是D12有3个EP,对应3块buffer,对于不同应用(in or out),建立不同的pipe,对吗?
应该说bulk方式(in or out)不需要setup包,setup包仅起通知mcu送数据到EP的作用。 并谢谢热心帮助的朋友。 |
|
|
地下室#
发布于: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而已. |
|
|
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大哥,这次俺能放心的到西安玩,就拜托你了。 |
|
|
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就会在那里傻等。 |
|
|