一天到晚游泳的鱼
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2005-04-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3007回复:30

d12的速度问题,重重酬谢!

楼主#
更多 发布于:2003-07-14 17:38
大侠们,救命啊,我只要求能够达到200Kbyte/s就行了,我真的重谢!
我用的芯片是D12+89C58,速度怎么做都只有40Kbyte/s,应用层开的是64K的缓冲区,驱动程序用的是周立功的,固件也是在周立功的上面修改了一点,固件程序除了枚举和往HOST中发数据,基本没做任何事情,我知道固件程序需要优化,可是真的不知道该怎么做!哪位大侠能够上传优化的固件程序参考一下,或者写操作函数也行!如果作的顺利,重重酬谢,一定的money也行!
hewx
驱动牛犊
驱动牛犊
  • 注册日期2001-09-22
  • 最后登录2004-12-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-07-28 10:23
谢谢,分不是目的,能够在技术上做交流,彼此有进步才是最终目的。当然,有分给就更好,因为是对本人回答正确与否的评价。
山穷水尽疑无路,柳暗花明又一村。
一天到晚游泳的鱼
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2005-04-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-07-27 18:53
hewx老兄,不好意思,我放不了分,别的帖子给你放分吧!

真的抱歉
一天到晚游泳的鱼
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2005-04-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-07-27 18:51
hewx老兄,谢谢你聊了这么多,给点分你,先!希望以后能继续和你交流!
一天到晚游泳的鱼
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2005-04-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-07-27 18:49
我仔细的看了我的应用程序,上面用的是DO……WHILE的方式,应该用的是循环方式的,看来只有采用DMA方式了,痛苦啊!
hewx
驱动牛犊
驱动牛犊
  • 注册日期2001-09-22
  • 最后登录2004-12-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-07-21 09:21
引用:BUFFER再大也只有一个DWORD大,如果你传送大于一个DWORD的内容必须循环执行Readfile(...)。

一个DWORD是什么意思啊,是不是我设的BUFFER为64K,一个DWORD也就是64K?

 


是的
山穷水尽疑无路,柳暗花明又一村。
一天到晚游泳的鱼
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2005-04-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-07-20 11:13
引用:BUFFER再大也只有一个DWORD大,如果你传送大于一个DWORD的内容必须循环执行Readfile(...)。

一个DWORD是什么意思啊,是不是我设的BUFFER为64K,一个DWORD也就是64K?

一天到晚游泳的鱼
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2005-04-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-07-20 11:09
就是啊,我用的是中断的方式,我感觉MCU在响应中断时,把64个数据写入D12太慢了,更让人不解的是bulk方式下,每帧可以放16个数据包,不知道怎么实现?
hewx
驱动牛犊
驱动牛犊
  • 注册日期2001-09-22
  • 最后登录2004-12-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-07-19 08:48
补充:D12跟FLASH的速度都不是瓶颈,MCU跟他们都是并行通信,关键是MCU速度太慢没有把D12跟FLASH的速度发挥出来。
山穷水尽疑无路,柳暗花明又一村。
hewx
驱动牛犊
驱动牛犊
  • 注册日期2001-09-22
  • 最后登录2004-12-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-07-19 08:44
引用:循环执行Readfile(...);这样也行吗?我采用了加大BUFFER的方法的,我设成64K。我觉得加大了BUFFER,就是循环执行了READFILE()啊,难道它们还有区别?


BUFFER再大也只有一个DWORD大,如果你传送大于一个DWORD的内容必须循环执行Readfile(...)。
山穷水尽疑无路,柳暗花明又一村。
一天到晚游泳的鱼
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2005-04-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-07-18 19:29
我也曾经遇到过楼主的情况,我采取以下方法问题得到解决,现在传送32M内容只需35秒,基本达到要求。
1、瓶颈之一是MCU工作频率太低造成MCU读写FLASH速度太慢,我把原来的8M提高到24M速度大大提高。
2、主机端的编程问题:
   把
   Function1(...)    
   {
    Createfile(...);
    Readfile(...);
    Closehandle(...);
   }
   循环执行Function1(...);

   改成
   Function2(...)    
   {
    Createfile(...);
    循环执行Readfile(...);  //关键地方
    Closehandle(...);
   }
  上述方法在传送大量数据时尤其重要,Function1把大量时间消耗在建立与取消链接(Createfile、Closehandle)中,Function2在整个传送中只建立与取消链接一次。原则是建立链接时主机告诉USB设备要得到什么,然后USB设备不断收/发,主机也不断发/收,传送完了再结束链接,
3、把主机端的BUFFER加大,一般16K、32K就足够了,再加大速度没有明显提高,因为D12只有128Byte BUFFER。

最后速度上去后记住给我加分。


 

    循环执行Readfile(...);这样也行吗?我采用了加大BUFFER的方法的,我设成64K。我觉得加大了BUFFER,就是循环执行了READFILE()啊,难道它们还有区别?
Truly
驱动牛犊
驱动牛犊
  • 注册日期2001-08-16
  • 最后登录2005-05-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-07-18 17:49
D12的速度不慢,是MCU慢了,
建议用DMA方式会最快
数据传送部分用汇编编写,改写C的IO函数
提高MCU时钟都会有比较好的效果
hewx
驱动牛犊
驱动牛犊
  • 注册日期2001-09-22
  • 最后登录2004-12-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-07-18 17:31
我也曾经遇到过楼主的情况,我采取以下方法问题得到解决,现在传送32M内容只需35秒,基本达到要求。
1、瓶颈之一是MCU工作频率太低造成MCU读写FLASH速度太慢,我把原来的8M提高到24M速度大大提高。
2、主机端的编程问题:
   把
   Function1(...)    
   {
    Createfile(...);
    Readfile(...);
    Closehandle(...);
   }
   循环执行Function1(...);

   改成
   Function2(...)    
   {
    Createfile(...);
    循环执行Readfile(...);  //关键地方
    Closehandle(...);
   }
  上述方法在传送大量数据时尤其重要,Function1把大量时间消耗在建立与取消链接(Createfile、Closehandle)中,Function2在整个传送中只建立与取消链接一次。原则是建立链接时主机告诉USB设备要得到什么,然后USB设备不断收/发,主机也不断发/收,传送完了再结束链接,
3、把主机端的BUFFER加大,一般16K、32K就足够了,再加大速度没有明显提高,因为D12只有128Byte BUFFER。

最后速度上去后记住给我加分。


山穷水尽疑无路,柳暗花明又一村。
一天到晚游泳的鱼
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2005-04-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-07-18 16:57
9603 很快。


它的速度能够作到多少?我2001年曾经看过9603的资料的,当时想用9603+FLEX10K,后来感觉资料太少就放弃了,中间又做别的浪费了一年的时间,最后感觉D12的资料比较多,就直接买了快smart开发板,现在发现上当受骗,真是一失足成千古恨啊!
猪爸爸
论坛版主
论坛版主
  • 注册日期2001-08-15
  • 最后登录2018-06-01
  • 粉丝0
  • 关注0
  • 积分1040分
  • 威望438点
  • 贡献值0点
  • 好评度129点
  • 原创分0分
  • 专家分0分
  • 社区居民
14楼#
发布于:2003-07-18 16:54
鱼儿不要急啊!
搞定问题有时需要灵感的!
俺是[color=red]猪爸爸[/color] [img]http://bbs.zndev.com/image/post/smile/mrgreen.gif[/img] 【[url=http://shop33397538.taobao.com][color=red]猪爸爸本本美容[/color][/url]】 BELKIN贝尔金核心代理
一天到晚游泳的鱼
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2005-04-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-07-18 16:52
\"我自己的板子作了128K的ram\"呵呵,有钱哪。
周立功完全抄飞利浦的程序的嘛!周立功的板子也是照搬的。
我没用过周立功的固件,我是自己写的。看来“for(i=0; i<len; i++)”这一句可以把循环次数改小点,如果测试用,甚至可以写64句outportb。outportb(D12_COMMAND, endp);后面inportb可以省略。如testing所说,把outportb、inportb改成marco,或则用汇编重写writeendpoint(),readendpoint()。最后参照jinghuiren说的,充分利用双缓冲。

 


高手!固件完全自己写啊?我试过双缓冲的,结果速度好象更慢了!我看了D12的资料,好象在setMode中把端点2设成iso-in的方式,再在端点配置中把Max-packet-size改成128,就可以了,然后我就直接使用writeEndpoint(),速度反而更慢了,是不是还有什么地方需要修改?
一天到晚游泳的鱼
驱动小牛
驱动小牛
  • 注册日期2002-05-08
  • 最后登录2005-04-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-07-18 16:42
我看就汇编好使了,我已经成功开发了汇编程序。速度基本接近极限了。D12确实不行啊。


速度基本接近极限?是多少啊,我怎么做只有50K BYTE/s左右,他的D12TEST.EXE上面显示他的速度能够达到64K,完全是骗人,我用BUSHOUND测过了,发送一次64个字节需要5.9ms,也就10K/S左右,我都可以达到1.2ms,真不知道他是怎么测的,完全骗人!
gjltce
驱动小牛
驱动小牛
  • 注册日期2003-07-05
  • 最后登录2011-12-10
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望59点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2003-07-18 08:16
9603 很快。
wang_jingfeng
驱动牛犊
驱动牛犊
  • 注册日期2003-07-13
  • 最后登录2003-09-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2003-07-17 22:10
我看就汇编好使了,我已经成功开发了汇编程序。速度基本接近极限了。D12确实不行啊。
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2003-07-15 14:13
\"我自己的板子作了128K的ram\"呵呵,有钱哪。
周立功完全抄飞利浦的程序的嘛!周立功的板子也是照搬的。
我没用过周立功的固件,我是自己写的。看来“for(i=0; i<len; i++)”这一句可以把循环次数改小点,如果测试用,甚至可以写64句outportb。outportb(D12_COMMAND, endp);后面inportb可以省略。如testing所说,把outportb、inportb改成marco,或则用汇编重写writeendpoint(),readendpoint()。最后参照jinghuiren说的,充分利用双缓冲。

上一页
游客

返回顶部