sunion
驱动牛犊
驱动牛犊
  • 注册日期2001-11-19
  • 最后登录2004-06-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1334回复:1

关于多字节的数据传输?

楼主#
更多 发布于:2002-10-28 10:19
我用pipe0进行控制传输的,该方式每次只能传输8个字节,那怎样才能实现多于8个字节的数据传输呢?难道应用程序要不断的发送数据传输的请求命令吗?
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-10-28 10:55
Nice to meet u!  :D 刚刚被zn抓来回答这个问题,呵呵... :D

其实做法非常easy。

device部分。如果没有记错的话,63001的寄存器里面有几个bit表示的是EP0传输的字节数,这个数字确实是不大于8的。但是,在每次传输结束以后,firmware都可以做一些动作来操作下面的8个byte。
如果是Control OUT,只要在把FIFO里面的数据处理完以后,设置寄存器相应的位置即可发送ACK,这样,当usb engine收到下面8个bytes的packet以后,就会把这8个byte放到EP0的FIFO里面,当然以前在FIFO里面的数据就都没有了。
如果是Control IN,每次传输好8byte以后,都会有一个End of Control IN Transfer的中断,你只要在这个中断里面继续传送下面的8个byte就行了。
整个这些工作一般都会另外弄个变量来记录实际传输的数据量。
这方面最好的例子,就是看枚举时候的那些Descriptor的传输,它们就是Control IN,有很多Descriptor都大于8个byte。

driver方面。如果你用DS,KUsbLowerDevice::BuildVendorRequest的第二个参数是ULONG TransferBufferLength,它就是实际传输的数据大小,这个数据大小并不是受到packet的大小(8 bytes)的限制,可以是比它大的数字。DDK里面也有相应的函数。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
游客

返回顶部