阅读:3007回复:30
d12的速度问题,重重酬谢!
大侠们,救命啊,我只要求能够达到200Kbyte/s就行了,我真的重谢!
我用的芯片是D12+89C58,速度怎么做都只有40Kbyte/s,应用层开的是64K的缓冲区,驱动程序用的是周立功的,固件也是在周立功的上面修改了一点,固件程序除了枚举和往HOST中发数据,基本没做任何事情,我知道固件程序需要优化,可是真的不知道该怎么做!哪位大侠能够上传优化的固件程序参考一下,或者写操作函数也行!如果作的顺利,重重酬谢,一定的money也行! |
|
沙发#
发布于:2003-07-28 10:23
谢谢,分不是目的,能够在技术上做交流,彼此有进步才是最终目的。当然,有分给就更好,因为是对本人回答正确与否的评价。
|
|
|
板凳#
发布于:2003-07-27 18:53
hewx老兄,不好意思,我放不了分,别的帖子给你放分吧!
真的抱歉 |
|
地板#
发布于:2003-07-27 18:51
hewx老兄,谢谢你聊了这么多,给点分你,先!希望以后能继续和你交流!
|
|
地下室#
发布于:2003-07-27 18:49
我仔细的看了我的应用程序,上面用的是DO……WHILE的方式,应该用的是循环方式的,看来只有采用DMA方式了,痛苦啊!
|
|
5楼#
发布于:2003-07-21 09:21
引用:BUFFER再大也只有一个DWORD大,如果你传送大于一个DWORD的内容必须循环执行Readfile(...)。 是的 |
|
|
6楼#
发布于:2003-07-20 11:13
引用:BUFFER再大也只有一个DWORD大,如果你传送大于一个DWORD的内容必须循环执行Readfile(...)。
一个DWORD是什么意思啊,是不是我设的BUFFER为64K,一个DWORD也就是64K? |
|
7楼#
发布于:2003-07-20 11:09
就是啊,我用的是中断的方式,我感觉MCU在响应中断时,把64个数据写入D12太慢了,更让人不解的是bulk方式下,每帧可以放16个数据包,不知道怎么实现?
|
|
8楼#
发布于:2003-07-19 08:48
补充:D12跟FLASH的速度都不是瓶颈,MCU跟他们都是并行通信,关键是MCU速度太慢没有把D12跟FLASH的速度发挥出来。
|
|
|
9楼#
发布于:2003-07-19 08:44
引用:循环执行Readfile(...);这样也行吗?我采用了加大BUFFER的方法的,我设成64K。我觉得加大了BUFFER,就是循环执行了READFILE()啊,难道它们还有区别?
BUFFER再大也只有一个DWORD大,如果你传送大于一个DWORD的内容必须循环执行Readfile(...)。 |
|
|
10楼#
发布于:2003-07-18 19:29
我也曾经遇到过楼主的情况,我采取以下方法问题得到解决,现在传送32M内容只需35秒,基本达到要求。 循环执行Readfile(...);这样也行吗?我采用了加大BUFFER的方法的,我设成64K。我觉得加大了BUFFER,就是循环执行了READFILE()啊,难道它们还有区别? |
|
11楼#
发布于:2003-07-18 17:49
D12的速度不慢,是MCU慢了,
建议用DMA方式会最快 数据传送部分用汇编编写,改写C的IO函数 提高MCU时钟都会有比较好的效果 |
|
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。 最后速度上去后记住给我加分。 |
|
|
13楼#
发布于:2003-07-18 16:57
9603 很快。 它的速度能够作到多少?我2001年曾经看过9603的资料的,当时想用9603+FLEX10K,后来感觉资料太少就放弃了,中间又做别的浪费了一年的时间,最后感觉D12的资料比较多,就直接买了快smart开发板,现在发现上当受骗,真是一失足成千古恨啊! |
|
14楼#
发布于:2003-07-18 16:54
鱼儿不要急啊!
搞定问题有时需要灵感的! |
|
|
15楼#
发布于:2003-07-18 16:52
\"我自己的板子作了128K的ram\"呵呵,有钱哪。 高手!固件完全自己写啊?我试过双缓冲的,结果速度好象更慢了!我看了D12的资料,好象在setMode中把端点2设成iso-in的方式,再在端点配置中把Max-packet-size改成128,就可以了,然后我就直接使用writeEndpoint(),速度反而更慢了,是不是还有什么地方需要修改? |
|
16楼#
发布于:2003-07-18 16:42
我看就汇编好使了,我已经成功开发了汇编程序。速度基本接近极限了。D12确实不行啊。 速度基本接近极限?是多少啊,我怎么做只有50K BYTE/s左右,他的D12TEST.EXE上面显示他的速度能够达到64K,完全是骗人,我用BUSHOUND测过了,发送一次64个字节需要5.9ms,也就10K/S左右,我都可以达到1.2ms,真不知道他是怎么测的,完全骗人! |
|
17楼#
发布于:2003-07-18 08:16
9603 很快。
|
|
18楼#
发布于:2003-07-17 22:10
我看就汇编好使了,我已经成功开发了汇编程序。速度基本接近极限了。D12确实不行啊。
|
|
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说的,充分利用双缓冲。 |
|
上一页
下一页