blue44
驱动小牛
驱动小牛
  • 注册日期2006-05-17
  • 最后登录2012-03-31
  • 粉丝0
  • 关注0
  • 积分23分
  • 威望218点
  • 贡献值0点
  • 好评度84点
  • 原创分0分
  • 专家分0分
阅读:2453回复:11

请教:68001如何提高传输速度?现在才600KB/s,汗

楼主#
更多 发布于:2007-01-15 10:24
  现在的测试方法是:GetTickCount得到初始时间,上位机发送读请求,下位机接收请求,发送缓冲区数据,上位机接收到数据后再发送请求,下位机接收请求,发送缓冲区数据,上位机接收,周而复始,一直到传输完成。最后GetTickCount得到完成时间。缓冲区大小是1024KB 双缓冲。
这样测到的速度是600KB/s,要求的速度是15M/s……
我认为这种测量速度慢是因为每次只传送了缓冲区的数据,于是尝试上位机只发送一次请求,然后下位机不停发上位机不停收,这样虽然速度是2M/s,但是传输经常出错,我想是因为上下位机不同步导致。试了一些方法,总是有错,而且2M/s也远达不到15M/s的要求,请各位xdjm们多帮忙。
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-01-15 13:42
你下面连的是什么?DSP?单片机?ARM?
如果你下面出数慢那就根本没招了。
blue44
驱动小牛
驱动小牛
  • 注册日期2006-05-17
  • 最后登录2012-03-31
  • 粉丝0
  • 关注0
  • 积分23分
  • 威望218点
  • 贡献值0点
  • 好评度84点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-01-15 15:09
下面连的是ti的6713
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-01-15 15:42
可能原因:
你加的延时是不是太多了?
一次多读些数据,例如试试64K
blue44
驱动小牛
驱动小牛
  • 注册日期2006-05-17
  • 最后登录2012-03-31
  • 粉丝0
  • 关注0
  • 积分23分
  • 威望218点
  • 贡献值0点
  • 好评度84点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-01-15 17:13
缓冲区设置成1K 双缓冲,不是意味着一次最多读2K吗?一次64K是指PC机的缓冲区吗?
我一直不明白一个问题:假设一次读64K,也就是说我要访问68001缓冲区32次,每次访问是不是都要发送一个Sx2SendVendorReq访问请求?如果都要发送,不就相当于一次读2K吗?但是如果不用发送,我试过都是错,该怎么做呢 我的方法是,发送一次Sx2SendVendorReq访问请求,然后上位机循环接收、下位机循环发送32次,结果每次都有传输错误
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-01-16 09:13
Sx2SendVendorReq发送的越多传输速度越慢!
如果是BULK传输,缓冲区最大只能设置成512,4倍缓冲,1024用于ISO
下位机查询到端点空了再往里填数,或者等端点中断。
blue44
驱动小牛
驱动小牛
  • 注册日期2006-05-17
  • 最后登录2012-03-31
  • 粉丝0
  • 关注0
  • 积分23分
  • 威望218点
  • 贡献值0点
  • 好评度84点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-01-16 12:06
速度到3.57MB/s了,多谢jinghuiren兄的指点
现在一次传40K,传64K上位机就总死机,真奇怪,再接再厉!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-01-16 15:01
尽量优化67的写数据代码
最好是提前准备好数据
一旦主机要立刻开始传
别一边生成数据一边传,这样肯定慢
blue44
驱动小牛
驱动小牛
  • 注册日期2006-05-17
  • 最后登录2012-03-31
  • 粉丝0
  • 关注0
  • 积分23分
  • 威望218点
  • 贡献值0点
  • 好评度84点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-01-19 09:11
现在速度才6MB/s,离15MB/s还很远,离过年却很近,汗~~~~~~~
上位机缓冲区还是不能开64K,小于64K没有问题,一到64K或者更大就不传数,不知道为什么。。。还有别的任务,赶死了,大家帮帮忙,再给点意见
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-01-19 12:12
那是因为驱动限制了大小,如果想开更大的缓冲区就要改驱动力的maxpacketsize了
你可以试试主机只读数据不处理,设备端疯狂往端点里填数,如果这样还不能达到你的要求那就悬了
blue44
驱动小牛
驱动小牛
  • 注册日期2006-05-17
  • 最后登录2012-03-31
  • 粉丝0
  • 关注0
  • 积分23分
  • 威望218点
  • 贡献值0点
  • 好评度84点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-01-19 13:55
PC缓冲区的大小有什么要求吗?有没有最大的限制?还是就取决于内存大小了?
一般开PC缓冲区的原则是什么?有注意事项吗?一般开多大呢?
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-01-19 15:20
ezusb的驱动里限制每一个IOCTL请求携带的数据量大小为64*1024-1字节
如果你想他携带的更多可以更改相关参量的设置,然后重新编译驱动,但由于使用的是内核内存,你不应设置的太大,太大会导致系统不稳定甚至蓝屏。

传输过程是这样的,应用程序发送IOCTL命令请求数据传输——〉驱动程序接到命令,开缓冲区然后下发命令到下层驱动——〉下层驱动将请求提交给IO管理器排队——〉轮到该请求时通过主控制器向设备发送数据读写命令——〉得到或传送完数据后逐级返回,最终返回到应用程序上。
游客

返回顶部