阅读:2044回复:12
该死的D12,批量传输中的每帧16个包怎么实现的啊?
各位大侠,我用D12做批量数据传输的时候,速度总是上不去,有两个问题想请教一下:
1、我怎么知道我到底用的是批量传输啊,是不是只要在配置的时候,给endpoint4、5设成bulk,然后使用他们,就是bulk方式吗?bulk方式到底是由固件决定还是由应用层决定啊,因为应用层也有InterruptIn和readpipe两个函数,但是我觉得它们实际差不多,读写数据都是用readfile()和writefile()调用底层函数! 2、资料上说,USB的传输都是按帧计算的,中断方式是帧/MS,但每帧只有一个数据包,而bulk方式也是帧/MS,但每帧是16个数据包,也就是速度可以达到16*64字节/ms,请问我怎么样才能在每帧里传送多个数据包啊? 哪位好心的大虾能指点一下,一定高分相送! |
|
沙发#
发布于:2003-07-18 17:55
下面没数据返回,你读得再勤快也没用的
|
|
板凳#
发布于:2003-07-18 19:26
下面没数据返回,你读得再勤快也没用的 我就是想问怎么让下面的数据发送的快一点啊! |
|
地板#
发布于:2003-07-20 10:55
怎么没人理我呢?热心的大侠们都睡觉了吗?
|
|
地下室#
发布于:2003-07-20 16:18
1,你的第一个想法是对的
2,理论上是这样的,但是一般来说只要你发下去请求数据的命令,那么主机端就会一只查询你的设备是否把数据准备好,如果你的设备够快的话,一个帧里面是会有超过一个包的(硬件实现,不要你干预),正如前面几位老兄说的那样,你的速度慢很可能是你设备放得读写速度太慢,而不是上层的问题。 |
|
5楼#
发布于:2003-07-21 08:47
设备读取数据是最大的瓶颈。
|
|
6楼#
发布于:2003-07-21 09:25
那就是说BULK传输16个包,只是按它的读写周期计算出来的,实际是做不到的!哎,悲哀!
|
|
7楼#
发布于:2003-07-21 10:20
You got it !
|
|
8楼#
发布于:2003-07-27 18:30
是不是我选择更快的单片机速度就可以上去了呢?好象关系不是很大
他们又说周立功的驱动好象有点问题! |
|
9楼#
发布于:2003-07-27 19:06
是的,如果你的mcu快的话速度是能够提高的,驱动有没有问题我不知道,但是如果你们是用厂商请求进行传输的话,那是挺慢的,还是用完全的bulk传输吧,如下:
UsbBuildInterruptOrBulkTransferRequest(urb, //ptr to urb urbSize, //size of urb pipeHandle, //usbd pipe handle NULL,//ioBuffer, //TransferBuffer Irp->MdlAddress,//NULL, //mdl bufferLength, //bufferlength transferFlags, //flags NULL); //link |
|
10楼#
发布于:2003-07-28 10:17
UsbBuildInterruptOrBulkTransferRequest它应该放在哪个地方呢?我在周立功的原代码中搜索的一下,只找到一个,USBDLIB.H(36):#define UsbBuildInterruptOrBulkTransferRequest(urb, \\
1 occurrence(s) have been found.只是定义而已,是不是周立功的驱动程序根本没用到呢? |
|
11楼#
发布于:2003-07-28 10:23
是的,如果你上层用deviceiocontrol()的话应该加到read_write_regester()里,如果用readfile()和writefile()函数的话,应该加到驱动中的d12_read()和d12_write里。
|
|
12楼#
发布于:2003-07-28 10:35
哦,多谢多谢,我试试!
|
|