阅读:1333回复:1
关于多字节的数据传输?
我用pipe0进行控制传输的,该方式每次只能传输8个字节,那怎样才能实现多于8个字节的数据传输呢?难道应用程序要不断的发送数据传输的请求命令吗?
|
|
沙发#
发布于: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里面也有相应的函数。 |
|
|