阅读:2785回复:23
请教rayyang2000大虾,关于URB的最大请求字节数
rayyang2000大虾,以前看了你的关于D12+AT89C52的USB通讯速度的贴子,你说把驱动的最大传输字节数可以改到64K,我用driverworks做了一个驱动,数据请求是没问题了,但好像用ReadFile请求时,请求的size不能很大啊,一大就pending了,不知道为什么。我的底层固件做了一个一次请求发送32K的数据到端点2,发送程序如下:
for(i=0;i<512;i++) D12_WriteEndpoint(5,64,EpBuf); |
|
最新喜欢:![]() |
沙发#
发布于:2004-07-08 15:54
这个我知道了,已经改过了,但速度还是比较慢,你们声明端点2的缓冲时,使用的是data还是idata?
|
|
板凳#
发布于:2004-07-08 15:45
D12的数据缓冲去只有130字节,怎么一次写32k!
for(i=0;i<512;i++) D12_WriteEndpoint(5,64,EpBuf); 这样没有用 |
|
地板#
发布于:2004-07-07 16:04
我用ReadFile实现App和Driver之间的读通讯,时间测试使用timeGetTime函数,分别用在ReadFile函数前后(我用ReadFile一次请求了64K数据),结果测出的时间间隔为2秒。我现在到有点怀疑是不是定时器的影响,我用定时器0,TH0和TL0都是0,我的晶振是24MHz,算了一下,定时中断的频率刚好是30K左右,是不是在如果我的程序不用定时器,就必须要关掉呢?
|
|
地下室#
发布于:2004-07-07 15:39
这样还不行?好像没什么了啊.....
你在哪里测试时间的?driver还是app?driver和app之间用哪种方式通讯? |
|
|
5楼#
发布于:2004-07-07 09:48
斑竹啊,你看还有什么原因会导致速度比较慢呢?
|
|
6楼#
发布于:2004-07-06 21:40
不瞒你说,还是只有30几K,郁闷死我了,我在ReadFile中一下子请求了64K的数据啊,还是花了2秒左右,痛苦啊!
|
|
7楼#
发布于:2004-07-06 20:35
没错,是这样
在D12_WriteEndpoint,把for循环向fifo中写数据注释掉,直接把fifo里面现有的数据送出去,看看速度是多少。 |
|
|
8楼#
发布于:2004-07-06 19:28
我在程序里发送64个字节,发送点数减64,在端点2的IN中断中代码如下:
D12_ReadLastTransactionStatus(5); //清中断标志位 if(datanum>0) { if(datanum>64) { D12_WriteEndpoint(5,64,EpBuf); datanum=datanum-64; } else { D12_WriteEndpoint(5,datanum,EpBuf); datanum=0; } } 其中datanum是发送的字节数。但这样做后,速度还是只有32K啊?怎么回事呢?感觉很奇怪? |
|
9楼#
发布于:2004-07-06 13:53
谢谢斑竹,另外问一下,你说的BULK IN中断是不是就是ISR.C中的D12端点2的IN中断,我的端点2中断服务程序只有清中断标志位处理,其他没有,我按你说的试试!
|
|
10楼#
发布于:2004-07-06 12:33
我以前用C51写的,你用的这个代码,我没有看过。
你的Bulk IN的firmware程序有问题,实际传输数据也不能这样用,因为后面的数据会把前面的数据覆盖。所以,即使你的这个程序试验成功,也不能用。 实际上firmware中,应该在Bulk IN中断中,发送下面的64bytes。这个中断的意思是 End of Bulk IN Transfer,也就是说,当前FIFO中的64bytes被传送到host以后,才会产生这个中断。 |
|
|
11楼#
发布于:2004-07-05 20:34
rayyang2000大虾,你以前做的D12传输速度那么高,固件控制代码是汇编写的还是C写的,我的控制代码是在周立功的那个smart board的固件控制代码的基础上改的,是不是因为这个代码的效率不高,导致速度上不去?
|
|
12楼#
发布于:2004-07-05 11:15
我的Firmware控制流程是这样的,先由端点1发命令,收到读命令时,端点2向主机发送数据。我之所以一次发32K的数据主要是想快,想把循环都放在单片机里面做,这样应该会快一些。如果在应用程序中放循环,就是发一次命令,读64 Bytes在循环,这样的速度我试过,好像更慢啊。
|
|
13楼#
发布于:2004-07-05 01:52
D12的配置就是这样,没办法再增大。
似乎应该找找firmware程序上的问题。 应该是在每个bulk in 的中断中,发送下面的64bytes。但看你的顶帖,却是一次性向fifo里面写了32k。 |
|
|
14楼#
发布于:2004-07-04 20:23
是全速的。
ConnectionStatus: DeviceConnected Current Config Value: 0x01 Device Bus Speed: Full Device Address: 0x03 Open Pipes: 4 Endpoint Descriptor: bEndpointAddress: 0x81 Transfer Type: Interrupt wMaxPacketSize: 0x0010 (16) bInterval: 0x01 Endpoint Descriptor: bEndpointAddress: 0x01 Transfer Type: Interrupt wMaxPacketSize: 0x0010 (16) bInterval: 0x01 Endpoint Descriptor: bEndpointAddress: 0x82 Transfer Type: Bulk wMaxPacketSize: 0x0040 (64) bInterval: 0x0A Endpoint Descriptor: bEndpointAddress: 0x02 Transfer Type: Bulk wMaxPacketSize: 0x0040 (64) bInterval: 0x0A 但端点的最大包尺寸还是跟D12的一样,这是由我的单片机里的控制代码决定的,难道不但要改驱动,还必须把单片机的BULK端点的wMaxPacketSize也改成65536吗? [编辑 - 7/4/04 by bobbysun2000] |
|
15楼#
发布于:2004-07-04 20:04
能上传一个吗?
|
|
16楼#
发布于:2004-07-04 19:06
用usbview看看
|
|
|
17楼#
发布于:2004-07-04 18:32
枚举成慢速?一般D12在什么情况下枚举成慢速呢?
|
|
18楼#
发布于:2004-07-04 15:17
那原因多半出在device端。或者,你的设备别是枚举成慢速了?
|
|
|
19楼#
发布于:2004-07-04 15:08
gz
|
|
|
上一页
下一页