bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:2556回复: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
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-04 13:31
dw里面有个函数可以设置max size,好像是kusbdevice的函数吧。你找找看。
天天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分
板凳#
发布于:2004-07-04 14:06
在Driver中,我已经改过了,程序如下:
m_Endpoint1IN.Initialize(m_Lower, 0x81, 16); //EP1 interrupt
m_Endpoint1OUT.Initialize(m_Lower, 0x1, 16);
m_Endpoint2IN.Initialize(m_Lower, 0x82, 65536); //EP2 bulk
m_Endpoint2OUT.Initialize(m_Lower, 0x2, 65536);
,但驱动完成后,用ReadFile一下请求32K的数据,速度还是只有16K/S左右,是不是单片机发送数据太慢造成的瓶颈呢?我单片机的晶振是12MHz的。
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-07-04 14:30
那你在submiturb的时候,也是一次读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分
地下室#
发布于:2004-07-04 14:37
我在构造URB时是这样的:
PURB pUrb = m_Endpoint2IN.BuildBulkTransfer(
Mem,      // Where is data coming from?
dwTotalSize,   // How much data to read?
TRUE,         // direction (TRUE = IN)
NULL, // Link to next URB
TRUE // Allow a short transfer
);  
其中dwTotalSize我用SoftIces跟踪过,是32K,对的。
处理过以后就用下面语句提交URB:
status = m_Endpoint2IN.SubmitUrb(I, pUrb,
                    LinkTo(ReadComplete), pCompInfo, 0);
metalwing
驱动中牛
驱动中牛
  • 注册日期2003-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分178分
  • 威望58点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-07-04 15:08
gz
新手上路,请多关照.
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
6楼#
发布于: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] ========================================================
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-07-04 18:32
枚举成慢速?一般D12在什么情况下枚举成慢速呢?
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
8楼#
发布于: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分
9楼#
发布于:2004-07-04 20:04
能上传一个吗?
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
10楼#
发布于: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]
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
11楼#
发布于: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分
12楼#
发布于:2004-07-05 11:15
我的Firmware控制流程是这样的,先由端点1发命令,收到读命令时,端点2向主机发送数据。我之所以一次发32K的数据主要是想快,想把循环都放在单片机里面做,这样应该会快一些。如果在应用程序中放循环,就是发一次命令,读64 Bytes在循环,这样的速度我试过,好像更慢啊。
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-07-05 20:34
rayyang2000大虾,你以前做的D12传输速度那么高,固件控制代码是汇编写的还是C写的,我的控制代码是在周立功的那个smart board的固件控制代码的基础上改的,是不是因为这个代码的效率不高,导致速度上不去?
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
14楼#
发布于: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分
15楼#
发布于:2004-07-06 13:53
谢谢斑竹,另外问一下,你说的BULK IN中断是不是就是ISR.C中的D12端点2的IN中断,我的端点2中断服务程序只有清中断标志位处理,其他没有,我按你说的试试!
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
16楼#
发布于: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啊?怎么回事呢?感觉很奇怪?
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
17楼#
发布于: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分
18楼#
发布于:2004-07-06 21:40
不瞒你说,还是只有30几K,郁闷死我了,我在ReadFile中一下子请求了64K的数据啊,还是花了2秒左右,痛苦啊!
bobbysun2000
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2004-07-07 09:48
斑竹啊,你看还有什么原因会导致速度比较慢呢?
上一页
游客

返回顶部