bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:2785回复:23

请教rayyang2000大虾,关于URB的最大请求字节数

楼主#
更多 发布于:2004-07-04 12:55
rayyang2000大虾,以前看了你的关于D12+AT89C52的USB通讯速度的贴子,你说把驱动的最大传输字节数可以改到64K,我用driverworks做了一个驱动,数据请求是没问题了,但好像用ReadFile请求时,请求的size不能很大啊,一大就pending了,不知道为什么。我的底层固件做了一个一次请求发送32K的数据到端点2,发送程序如下:
for(i=0;i<512;i++)
D12_WriteEndpoint(5,64,EpBuf);

最新喜欢:

abei11abei11
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-08 15:54
这个我知道了,已经改过了,但速度还是比较慢,你们声明端点2的缓冲时,使用的是data还是idata?
xulingfei
驱动牛犊
驱动牛犊
  • 注册日期2004-06-13
  • 最后登录2009-03-09
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-07-08 15:45
D12的数据缓冲去只有130字节,怎么一次写32k!
for(i=0;i<512;i++)
D12_WriteEndpoint(5,64,EpBuf);
这样没有用
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-07-07 16:04
我用ReadFile实现App和Driver之间的读通讯,时间测试使用timeGetTime函数,分别用在ReadFile函数前后(我用ReadFile一次请求了64K数据),结果测出的时间间隔为2秒。我现在到有点怀疑是不是定时器的影响,我用定时器0,TH0和TL0都是0,我的晶振是24MHz,算了一下,定时中断的频率刚好是30K左右,是不是在如果我的程序不用定时器,就必须要关掉呢?
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-07-07 15:39
这样还不行?好像没什么了啊.....
你在哪里测试时间的?driver还是app?driver和app之间用哪种方式通讯?
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-07-07 09:48
斑竹啊,你看还有什么原因会导致速度比较慢呢?
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-07-06 21:40
不瞒你说,还是只有30几K,郁闷死我了,我在ReadFile中一下子请求了64K的数据啊,还是花了2秒左右,痛苦啊!
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-07-06 20:35
没错,是这样

在D12_WriteEndpoint,把for循环向fifo中写数据注释掉,直接把fifo里面现有的数据送出去,看看速度是多少。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
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啊?怎么回事呢?感觉很奇怪?
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-07-06 13:53
谢谢斑竹,另外问一下,你说的BULK IN中断是不是就是ISR.C中的D12端点2的IN中断,我的端点2中断服务程序只有清中断标志位处理,其他没有,我按你说的试试!
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-07-06 12:33
我以前用C51写的,你用的这个代码,我没有看过。

你的Bulk IN的firmware程序有问题,实际传输数据也不能这样用,因为后面的数据会把前面的数据覆盖。所以,即使你的这个程序试验成功,也不能用。

实际上firmware中,应该在Bulk IN中断中,发送下面的64bytes。这个中断的意思是 End of Bulk IN Transfer,也就是说,当前FIFO中的64bytes被传送到host以后,才会产生这个中断。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-07-05 20:34
rayyang2000大虾,你以前做的D12传输速度那么高,固件控制代码是汇编写的还是C写的,我的控制代码是在周立功的那个smart board的固件控制代码的基础上改的,是不是因为这个代码的效率不高,导致速度上不去?
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-07-05 11:15
我的Firmware控制流程是这样的,先由端点1发命令,收到读命令时,端点2向主机发送数据。我之所以一次发32K的数据主要是想快,想把循环都放在单片机里面做,这样应该会快一些。如果在应用程序中放循环,就是发一次命令,读64 Bytes在循环,这样的速度我试过,好像更慢啊。
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-07-05 01:52
D12的配置就是这样,没办法再增大。
似乎应该找找firmware程序上的问题。

应该是在每个bulk in 的中断中,发送下面的64bytes。但看你的顶帖,却是一次性向fifo里面写了32k。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
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]
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-07-04 20:04
能上传一个吗?
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-07-04 19:06
用usbview看看
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-07-04 18:32
枚举成慢速?一般D12在什么情况下枚举成慢速呢?
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-07-04 15:17
那原因多半出在device端。或者,你的设备别是枚举成慢速了?
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
metalwing
驱动中牛
驱动中牛
  • 注册日期2003-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分178分
  • 威望58点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2004-07-04 15:08
gz
新手上路,请多关照.
上一页
游客

返回顶部