takaya
驱动小牛
驱动小牛
  • 注册日期2002-02-10
  • 最后登录2006-05-16
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望3点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1575回复:8

51+D12,好像速度不太对劲.每4ms才传64B

楼主#
更多 发布于:2002-06-18 09:24
上次说了.我用52+D12,速度最高只能达到16K.今天我查了一下.发现D12每4ms才发出一个中断,但这个中断只用了0.2ms就执行完了..这样算下来,速度最高也只能达到16K.并且速度的瓶颈不是出在51上.
USB1.1每1ms都有一个帧呀.而且在一个帧中可出放19个bulk包.现在怎么变成了这个样子?

请问怎么才能提高速度.怎么才能控制每个帧中的包的数目.


一定给分.
我是只可爱的小猫咪,高枕无忧................................. QQ:2745071
laiqing
驱动小牛
驱动小牛
  • 注册日期2002-02-27
  • 最后登录2013-08-28
  • 粉丝5
  • 关注0
  • 积分46分
  • 威望104点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-06-18 12:39
这可能和你的应用程序有关,不要每次传输都执行打开和关闭USB管道。
打开USB管道,获得句柄后,等到所有的传输数据都传完后,再关闭
USB句柄。
takaya
驱动小牛
驱动小牛
  • 注册日期2002-02-10
  • 最后登录2006-05-16
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望3点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-06-18 13:11
OpenFile(??)
计时开始
while(???)
{
ReadFile(????????);
}

计时结束
CloseFile(???)
我就是这样做的呀.
在While中只有16K.
我是只可爱的小猫咪,高枕无忧................................. QQ:2745071
takaya
驱动小牛
驱动小牛
  • 注册日期2002-02-10
  • 最后登录2006-05-16
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望3点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-06-18 13:13
再有,怎么控制一个帧中的包数目泥?
我是只可爱的小猫咪,高枕无忧................................. QQ:2745071
laiqing
驱动小牛
驱动小牛
  • 注册日期2002-02-27
  • 最后登录2013-08-28
  • 粉丝5
  • 关注0
  • 积分46分
  • 威望104点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-06-18 14:16
OpenFile(??)
计时开始
while(???)
{
ReadFile(????????);
}

计时结束
CloseFile(???)
你每次ReadFile(????????)传输的数据块有多大?64字节/次?
要是和它差不多大?你就待改大一点,例如4096字节/次。
这样就会加快速度。


再有,怎么控制一个帧中的包数目泥?

理想状态下,一帧包括16个包,只要你的固件平均从D12的BUFFER读取数据够快,读取64字节BUFFER的时间小于64US,就可以1MS传输16个包,但单片机一般是比要求慢多了!
takaya
驱动小牛
驱动小牛
  • 注册日期2002-02-10
  • 最后登录2006-05-16
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望3点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-06-18 14:32
我试过把64B改成4096B,但只能读出前64B来.
现在是每4ms才读一次.其它3个帧都没有用到.C51处理从D12读64B的时间是0.2ms左右.这样算下来,在一个帧中应该可以处理5个包.但现在只有0.25个包..................
我是只可爱的小猫咪,高枕无忧................................. QQ:2745071
takaya
驱动小牛
驱动小牛
  • 注册日期2002-02-10
  • 最后登录2006-05-16
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望3点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-06-18 14:42
是不是需要把在DS中设置的Endpoint2IN的MaxTransferSize也改成4096?我试过了.不能完整的读出4096个字节.只读得出一部分.
我是只可爱的小猫咪,高枕无忧................................. QQ:2745071
laiqing
驱动小牛
驱动小牛
  • 注册日期2002-02-27
  • 最后登录2013-08-28
  • 粉丝5
  • 关注0
  • 积分46分
  • 威望104点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-06-18 16:11
你处理一次中断后,有没有及时地再次把数据送到buffer中?

就是说你用4096的话,传输的第一个数据包要在中断来自前要先送入BUFFER中,把这个端点使能。

中断来后要在中断处理程序中把下一个数据报
送到BUFFER中。
takaya
驱动小牛
驱动小牛
  • 注册日期2002-02-10
  • 最后登录2006-05-16
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望3点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-06-18 16:41
那是当然的呀.不然第二个包就读不出来了呀.
何况我只在中断处理程序填充了D12的Buffer.
我是只可爱的小猫咪,高枕无忧................................. QQ:2745071
游客

返回顶部