阅读:1575回复:8
51+D12,好像速度不太对劲.每4ms才传64B
上次说了.我用52+D12,速度最高只能达到16K.今天我查了一下.发现D12每4ms才发出一个中断,但这个中断只用了0.2ms就执行完了..这样算下来,速度最高也只能达到16K.并且速度的瓶颈不是出在51上.
USB1.1每1ms都有一个帧呀.而且在一个帧中可出放19个bulk包.现在怎么变成了这个样子? 请问怎么才能提高速度.怎么才能控制每个帧中的包的数目. 一定给分. |
|
|
沙发#
发布于:2002-06-18 12:39
这可能和你的应用程序有关,不要每次传输都执行打开和关闭USB管道。
打开USB管道,获得句柄后,等到所有的传输数据都传完后,再关闭 USB句柄。 |
|
板凳#
发布于:2002-06-18 13:11
OpenFile(??)
计时开始 while(???) { ReadFile(????????); } 计时结束 CloseFile(???) 我就是这样做的呀. 在While中只有16K. |
|
|
地板#
发布于:2002-06-18 13:13
再有,怎么控制一个帧中的包数目泥?
|
|
|
地下室#
发布于:2002-06-18 14:16
OpenFile(??)
计时开始 while(???) { ReadFile(????????); } 计时结束 CloseFile(???) 你每次ReadFile(????????)传输的数据块有多大?64字节/次? 要是和它差不多大?你就待改大一点,例如4096字节/次。 这样就会加快速度。 再有,怎么控制一个帧中的包数目泥? 理想状态下,一帧包括16个包,只要你的固件平均从D12的BUFFER读取数据够快,读取64字节BUFFER的时间小于64US,就可以1MS传输16个包,但单片机一般是比要求慢多了! |
|
5楼#
发布于:2002-06-18 14:32
我试过把64B改成4096B,但只能读出前64B来.
现在是每4ms才读一次.其它3个帧都没有用到.C51处理从D12读64B的时间是0.2ms左右.这样算下来,在一个帧中应该可以处理5个包.但现在只有0.25个包.................. |
|
|
6楼#
发布于:2002-06-18 14:42
是不是需要把在DS中设置的Endpoint2IN的MaxTransferSize也改成4096?我试过了.不能完整的读出4096个字节.只读得出一部分.
|
|
|
7楼#
发布于:2002-06-18 16:11
你处理一次中断后,有没有及时地再次把数据送到buffer中?
就是说你用4096的话,传输的第一个数据包要在中断来自前要先送入BUFFER中,把这个端点使能。 中断来后要在中断处理程序中把下一个数据报 送到BUFFER中。 |
|
8楼#
发布于:2002-06-18 16:41
那是当然的呀.不然第二个包就读不出来了呀.
何况我只在中断处理程序填充了D12的Buffer. |
|
|