桂林电子科技大学,信息通信学院14.3存储器管理LPC2400系列芯片使用三种存储器:片内Flash、片内RAM和外部扩展存储器。LPC2400系列芯片集成了512KB的片内Flash存储器和64KB的静态SRAM(LPC2470没有片内Flash)。片内Flash存储器可以用做代码和数据的固态存储。对Flash存储器的编程可以通过几种方法来实现:通过串口UART0进行的在系统编程(ISP),通过调用嵌入片内的固化代码进行的在应用编程(IAP)以及通过内置的JTAG接口编程。片内SRAM支持8位、16位和32位访问。外部扩展存储器则使用外部存储器接口进行扩展,通过外部存储器控制器(EMC)可以扩展两组共8个Bank的存储器组(Staticmemorybank0~bank3,Dynamicmemorybank0~bank3)。桂林电子科技大学,信息通信学院2存储器映射桂林电子科技大学,信息通信学院3外设存储器映射LPC2400系列处理器的外设根据内部总线分为AHB和APB外设两类。AHB外设和APB外设在存储空间里都占2MB的区域,可各自分配最多128个外设。每个外设空间的规格都为16KB。所有外设寄存器不管规格大小,都按照字地址进行分配(32位边界),且不管字还是半字寄存器都是一次性访问。例如,不可能对一个字寄存器的最高字节执行单独的读或写操作。AHB地址分配见如4.5,APB地址分配间表4.11。桂林电子科技大学,信息通信学院4桂林电子科技大学,信息通信学院5LPC2478.h头文件举例桂林电子科技大学,信息通信学院6存储器重映射(MEMORYREMAP)存储器映射的基本概念每个存储器组在存储器映射中都有一个“物理上的”位置。它是一个地址范围,该范围内可写入程序代码,每个存储空间的大小是固定的,这样就不需要将代码设计成在不同地址范围内运行。这样做代码就可以很方便的移植了。如果向没有地址映射的存储空间进行读写访问,将引发预取指令或数据中止异常。桂林电子科技大学,信息通信学院7关于BOOTROM片内FLASH的最后8KB空间是保留的,里面固化了对FLASH进行编程、擦除,程序引导等固件FIRMWARE。在用户程序运行是可以调用其中的程序对FLASH进行在应用编程IAP,可以对FLASH进行串行编程的程序ISP。处理器在硬件启动时BOOTROM空间被映射到0x7FFFE000处运行。作用是引导用户程序运行。桂林电子科技大学,信息通信学院8存储器重映射由于ARM7处理器上的中断向量所处具体位置(地址0x00000000~0x0000001C)与LPC的片内存储器空间有冲突,BootROM和SRAM空间的一小部分空间需要重新映射,来实现在不同操作模式下对中断的不同使用。这个过程叫存储器重映射。桂林电子科技大学,信息通信学院9存储器重映射存储器重新映射的部分允许在不同模式下处理中断。LPC2400共支持3种存储器映射模式,见表4.13。当处理器工作在用户Flash模式下时,不需要进行中断向量的重新映射,而在其它模式下则需要重新映射。它包括中断向量区(32字节)和额外的32字节,一共是64字节。重新映射的代码位置与地址0x00000000~0x0000003F重叠,包含在SRAM、Flash和BootBlock中的向量必须包含跳转到实际中断处理程序的分支或者其它执行跳转到中断处理程序的转移指令。桂林电子科技大学,信息通信学院10存储器映射控制寄存器MEMMAP存储器映射控制寄存器用于改变从地址0x00000000开始的中断向量的映射。这允许运行在不同存储器空间中的代码对中断进行控制。MEMMAP是一个可读写寄存器,地址为0xE01FC040,功能为选择从FlashBootBlock、用户Flash或RAM中读取ARM中断向量。桂林电子科技大学,信息通信学院11存储器映射控制寄存器MEMMAPLPC2400的MAP位的硬件复位值为00。Boot装载程序会将用户看到的复位值更改,该程序总是在复位后立即运行。存储器映射控制寄存器MEMMAP只从处理ARM异常(中断)必需的3个数据源(FLASH中断向量、SRAM中断向量和BootROM中断向量,每个64字节)中选择一个使用。中断向量:0x00000008实际中断向量MEMMAP[1:0]=00(boot模式)0x7FFFE008MEMMAP[1:0]=01(Flash模式)0x00000008MEMMAP[1:0]=10(用户模式)0x40000008桂林电子科技大学,信息通信学院12设置MEMMAP程序示例桂林电子科技大学,信息通信学院13存储器加速模块(MAM,MemoryAcceleratorModule)存储器加速模块(MAM)可以将需要的下一个ARM指令锁存,以防止CPU取指暂停。与以前的其它器件使用2个Flash组相比,LPC2400只使用一组Flash存储器。这个Flash组包含3个128位的缓冲区:预取指缓冲区、分支跟踪缓冲区和数据缓冲区。桂林电子科技大学,信息通信学院14MAM的操作模式MAM定义了3种操作模式:1)MAM关闭。所有存储器请求都会导致Flash的读操作,无指令预取指。2)MAM部分使能。如果数据可用,则从保持锁存区执行连续的指令访问。指令预取指使能。非连续的指令访问启动Flash读操作。这意味着所有的转移指令都会导致对存储器的取指。由于缓冲的数据访问时序很难预测并且非常依赖于所处的状况,因此所有数据操作都会导致Flash读操作。3)MAM完全使能。任何存储器请求(代码或数据),如果其值已经包含在其中一个保持锁存当中,那么从缓冲区执行该代码或数据的访问。指令预取指使能。Flash读操作用于指令的预取指和当前缓冲区所没有的代码或数据的访问。桂林电子科技大学,信息通信学院15MAM控制寄存器-MAMControlRegister(MAMCR-0xE01FC000)决定MAM的操作模式。两个配置位选择MAM的3种操作模式。在复位后,MAM功能被禁止。改变MAM操作模式会导致MAM所有的保持锁存内容无效,因此需要执行新的Flash读操作。桂林电子科技大学,信息通信学院16MAM定时寄存器决定Flash存储器取指所使用的时钟个数(1到7个处理器时钟),使用多少个cclk周期访问Flash存储器。这样可调整MAM时序使其匹配处理器操作频率。Flash访问时间可以从1到7个时钟,单个时钟的Flash访问实际上关闭了MAM,这种情况下可以选择MAM模式对功耗进行优化。桂林电子科技大学,信息通信学院17MAM使用注意事项1)MAM定时值问题当改变MAM定时值时,必须先通过向MAMCR写入0来关闭MAM,然后将新值写入MAMTIM,最后,将需要的操作模式的对应值写入MAMCR,再次打开MAM。对于低于20MHz的系统时钟,MAMTIM设定为1;对于20MHz到40MHz之间的系统时钟,建议将MAMTIM设定为2;而在高于40MHz的系统时钟下,建议使用3。2)Flash编程问题在编程和擦除操作过程中不允许访问Flash存储器。如果在Flash模块忙时存储器请求访问Flash地址,MAM就必须强制CPU等待(这通过声明ARM7TDMI-S局部总线信号CLKEN来实现)。在某些情况下,代码执行的延迟会导致看门狗超时。用户必须注意到这种可能性,并采取措施来确保不会在编程或擦除Flash存储器时出现非预期的看门狗复位,从而导致系统故障。桂林电子科技大学,信息通信学院18应用举例MAM功能在LPC2400的启动代码中实现,可以根据Fcclk的大小来自动设置MAM,(在target.c文件中)。首先要将MAM功能禁止,然后根据Fcclk的大小来设置MAM定时寄存器(通过条件编译实现,Fcclk的定义在target.h文件中),最后再使能MAM。voidTargetResetInit(void){…MAMCR=0;//禁止MAM功能#ifFcclk20000000MAMTIM=1;//系统时钟低于20M,建议设置为1#else#ifFcclk40000000MAMTIM=2;//系统时钟再20M~40M之间,建议设置为2#elseMAMTIM=3;//系统时钟高于40M,建议设置为3#endifMAMCR=2;//使能MAM…}桂林电子科技大学,信息通信学院19外部存储器控制器LPC2400的外部存储器控制器(EMC)是一个AMBA总线AHB从机模块,它支持多种不同结构的存储器,包括常用的异步静态存储器,如RAM、ROM和Flash等,也支持动态存储器,如单数据率SDRAM等。EMC模块可以同时支持多达8个单独配置的存储器组,其中静态存储器和动态存储器各4个Bank。静态存储器组由片选引脚CS0~CS3选中,每个组存储容量16MB,支持RAM、ROM、Flash和其它一些外部I/O部件,支持8位、16位和32位数据宽度。动态存储器组由片选引脚DYCS0~DYCS3选中,每个组存储容量256MB,支持单数据率SDRAM,支持16位和32位数据宽度,刷新模式可由软件控制。桂林电子科技大学,信息通信学院20各个片选信号对应地址范围桂林电子科技大学,信息通信学院21外部存储器控制器桂林电子科技大学,信息通信学院22外部存储器控制器桂林电子科技大学,信息通信学院2332位静态RAM扩展桂林电子科技大学,信息通信学院2432位静态RAM扩展桂林电子科技大学,信息通信学院2516位静态RAM扩展桂林电子科技大学,信息通信学院26综合举例桂林电子科技大学,信息通信学院27综合举例桂林电子科技大学,信息通信学院28NOR与NANDFLASH区别NORFLASHNANDFLASH优点1、按字节访问2、访问速度快1、容量大,成本低2、器件升级方便缺点1、容量小,成本高1、按块访问2、器件编程速度慢应用场合保存引导程序保存文件系统桂林电子科技大学,信息通信学院29实验板使用存储器及地址分配存储器类型型号容量地址范围SDARMW9825G6DH32MB0xA0000000~0xA1FFFFFFNORFLASHAm29LV160DB2MB0x80000000~0x801FFFFFNANDFLASHK9F2G08U0M256MB数据地址:0x81000000桂林电子科技大学,信息通信学院30SDRAM与EMC的连接SDRAM芯片W9825G6DH存储组织为:4MWord*4bank*16bit即32MB。支持高效的突发式访问,突发长度2,4,8或整页。时钟频率最高可到166MHz。芯片连接原理图如下:桂林电子科技大学,信息通信学院31SDRAM与EMC的连接W9825G6DH根据外部引脚状态有许多工作模式,包括:读、写、预充电、设置模式寄存器、突发停止、掉电模式等等。由于EMC模块引脚完全符合SDRAM接口,所以用户设置只需设置EMC中EMCDynamicControl寄存器进入相应模式即可。模式寄存器主要用于设置SDRAM的突发长度、寻址方式、CAS延时、写操作方式等内容。桂林电子科技大学,信息通信学院32SDRAM的重要模式和概念预充电precharge:SDRAM启动后,必须对所有bank预充电才能进行读写。刷新refresh:由于SDRAM工作原理,定期必须对芯片进行刷新操作,以保持数据。自动刷新auto-refresh/auto-precharge:允许读写操作芯片前完成数据刷新操作。自刷新模式self-refrash:一种较省电模式,SDRAM进入该模式能保持数据,但是无法读写数据。省电模式power-down:SDRAM不刷新数据,所以如果有数据保存时省电周期刷新周期。刷新周期:SDRAM不刷新数据能够保持数据的最长时间。桂林电子科技大学,信息通信学院33桂林电子科技大学,信息通信学院34桂林电子科技大学,信息通信学院35桂林电子科技大学,信息通信学院36EMC中有关SDRAM的寄存器设置