LPC2220外部存储器接口速度:
买了一个ZLG的SmartArm2200开发套件。开始做基础实验。
它的速度好象真的很慢啊。
芯片是LPC2220(ARM7TDMI-S),内部64K SRAM,外部接口总线接了PSRAM和FLASH。都是16位访问。
它的PSRAM的速度据说在80ns左右,FLASH的速度应该也差不多。
它有一个测外部存储器访问速度的实验,拿来做。一做吓一跳。
dly = 80;
for(; dly>0; dly--)
{
for(i=0; i<5000; i++);
}
大概是上面这段代码,用定时器测执行时间。
定时器的时钟是PCLK,就是VPB总线的时钟。系统时钟CCLK是4倍速的PCLK。PCLK是11.0592MHz。
外部存储接口的寄存器BCFG0可设置访问速度,我调整了总线空闲时间和读等待时间。
设置后,总线空闲时间为1个CCLK(这是最小值)。读等待时间为5个CCLK(3是最小值,但3和4都会跑飞)。
上面的循环程序,每个小循环在反汇编后是4条指令(包括一个条件跳转)。
可以理解成4条指令的小循环,执行40万次。
在以下3种情况下对代码执行速度进行测试。
程序在内部RAM执行,执行时间是600190个PCLK,每个小循环是1.5个PCLK,即6个CCLK。这个和理想结果很接近。
程序在外部PSRAM执行,执行时间是5401196个PCLK,每个小循环是13.5个PCLK,即54个CCLK。每条指令大概是13.5个CCLK。是内部SRAM执行时间的9倍。
程序在外部FLASH执行,BCFG0与使用PSRAM时设置相同,结果也相同。
这个实验的目的,是通过修改BCFG0,调整访问外部存储器的最佳配置。
如果设置得太快,程序就会跑飞。
按照我的配置,我猜想:读一次,要5个等待+1个总线空闲,就是6个CCLK。
由于是16bit访问,1条指令要读两次,也就是12个CCLK。和上面的13.5个CCLK也差不多。
关键是,在这个板子上我无法把读等待设得更小了,并且最小只能设置为3个等待。
所以我即使使用更快的SRAM,结果也好不到哪里去。
也就是说,代码在外部PSRAM或FLASH的执行速度,是内部SRAM的1/9。
也就是说,在这种情况下,处理器的速度大概是5MHz。
飞利浦(NXP)难道不觉得应该做个CACHE吗?!