[经验] 2440Nand vs DMA速度提升4倍,估计还有提升空间

lzwml   2014-12-17 19:53 楼主
平台TQ2440开发板、Nand_2Gb_S34ML02G(每页大小2048Byte),不使用DMA传输速率3MB/S,使用DMA目前最大速率13.79MB/S
不使用DMA方式读取
循环次数
每次读取字节
耗时(S
速率(MB/S
30000
512
5.7
2.57
30000
2048
19.1
3.07
不使用DMA方式写入
循环次数
每次读取字节
耗时(S
速率(MB/S
30000
2048
19.1
3.07
采用DMA(模式——SERVMODE0 = 突发4DSZ10 = 字)
循环次数
每次读取字节
耗时(S
速率(MB/S
30000
512
2
7.32
60000
512
3.95
7.42
120000
512
7.3
8.03
480000
512
28.7
8.17
30000
2048
4.5
13.02
60000
2048
8.7
13.47
120000
2048
17.2
13.63
480000
2048
68
13.79
采用DMA(模式——SERVMODE1 = 单次、DSZ00 = 字节)
循环次数
每次读取字节
耗时(S
速率(MB/S
30000
512
6.2
2.36
60000
512
12.1
2.42
120000
512
24
2.44
30000
2048
21.3
2.75
60000
2048
42.2
2.78
对上面数据的分析:
根据我以前发的帖子《405MHz2440没用DMA读取Nandflash速度只有22K,正常吗》,帖子有示波器截图。
**************************************************************
下图是用CAD画出我对本次实验的理解:
未命名.png
1行:不使用DMA方式1us传送4Byte
2行:使用DMA方式,收到第3行的突发脉冲,每个突发脉冲执行14Byte传输。
图中可知传送1Byte耗时20ns,与数据手册给出的25ns吻合,但是当初由于未使用DMA模式,导致虽然Nand传输4Byte只要80ns,但是一条指令buf = rNFDATA()却耗时约600ns,一个for循环执行buf=rNFDATA()耗时也就达到2~3uS,当中有很多的空闲区域未被利用。
原先我期望DMA模式能把空闲区域利用起来,但实验结果却不太理想(可能设置参数不对)。
2440DMA单突发模式4次连续突发模式,这也就是为什么本次实验DMA方式比普通方式块4倍的原因。如果采用单突发模式,速率上其实还不如普通不用DMA方式,唯一的优势,采用DMA中断解放CPU干预。
疑问
我没有仔细阅读2440芯片手册,不知道哪个地方能修改能缩小DMA空闲区域的间隔(除非2440架构就定死,空闲区域必须那么长)。
如果能再利用这段空间,速度应该还能提高2倍(26MB/S
有没有大神指导怎么设置呢????请赐教
本帖最后由 lzwml 于 2014-12-18 08:20 编辑

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复