EMC作为一个外部存储接口,使其为MCU追求大容量、高速度成为可能。作为比较常用的外部存储芯片SDRAM,其相对复杂的数据传输时序,在拥有EMC之后,又会出现那些问题,今天就谈一下它们之间的那些事。
恩智浦( NXP )公司生产的这款LPC1788芯片带有控制外部存储的控制器,它是一个多端口存储外设,它支持异步静态存储设备,如RAM、 ROM 和Flash,也支持单数据速率传输的SDRAM这种动态存储器。该控制器带有26根地址线,32根数据线。其支持4块静态存储片选地址映射和4块动态存储片选地址映射。下图是EMC接口在内存映射的位置。
EMC与外部的动态存储器相连时,其占用的地址线相对来说是比较少的,这还是跟动态存储器的这种存储结构是有一定关系的。就拿SDRAM来说,其内部存储是按行列分布的,如下图所示,就像表格一样,有对应的行地址和列地址,每一个小方格就是一个存储单元。在对其寻址时,需要先进行行地址寻址,再进行列地址寻址,才选择出确定的操作单元。所以其行列地址线是可以分时复用,这也就决定了其占用的地址线较少。
◆ EMC为动态存储器提供了引脚完成对应的信号传输 ◆
EMC_D[31:0]: 数据线;
EMC_A[14:0]:地址线;
EMC_CLK:为SDRAM提供 时钟 ;
EMC_CKE:SDRAM的时钟使能位;
EMC_DQM[3:0]:数据掩码信号;
EMC_RAS:SDRAM行地址选通脉冲信号;
EMC_CAS:SDRAM列地址选通脉冲信号
EMC_DYCS[3:0]:SDRAM的片选信号;
EMC_WE:SDRAM写使能。
当动态存储器件的引脚连接到EMC上后,就需要对EMC的 寄存器 来进行配置。可以看到对于SDRAM,有很多的关于时间参数配置的 寄存器 ,需要根据实际连接的外部存储器件来进行相应的配置。当然,这些时间参数在外部存储器件的数据手册中都是可以找着的。
但我们也不能掉以轻心,一些错误的时间配置可能导致数据传输无法完成,严重的可能导致动态存储器内部数据丢失。对于动态存储器件来说,其需要不断进行刷新才能保存数据,这是它很重要的操作,所以刷新时间的配置是很重要的。对于常用的SDRAM 芯片IS42S16400来说,在其数据手册中找到下图这样一个时间参数,它的意思就是说刷新4096次需要的时间是64ms,也就是说刷新一次的时间是15.625us,如果刷新的周期比这个大的话,SDRAM就无法保存数据。而对于LPC1788 EMC模块,它就有这样一个时间参数寄存器EMCDynamicRefresh,它可以用来设置SDRAM刷新一次的时间。
由于寄存器是以EMC的时钟作为基准的,所以这个刷新时间的设置还跟EMC的时钟有关,在配置的过程中,根据当前时钟计算一下,以免出现错误。对于连有多个动态外部存储芯片,而他们是共用这一个刷新时间的,这时候就要根据各个数据手册中要求的刷新周期,以每次刷新时间最短的为准,这样才能保证都能在规定的时间内完成刷新。同时对于支持热复位的情况下,也要注意一下,由于热复位期间,EMC的时钟发生变化,这时候的刷新周期也就有所变化,在配置过程中,也要考虑到上面的情况。
对于其他的时间参数,可以对照EMC关于时间参数配置的寄存器和对应的外部存储芯片的数据手册,完成正确的配置,当EMC配置完成之后,就可以通过访问总线地址来访问外部存储。
EMC实现的这种与外部存储数据传输方式,会在以后的嵌入式产品中应用越来越广泛,它为小容量MCU提供了新的契机。