原创 LPC2220 外部扩展存储器的设计

2009-2-16 01:08 3430 10 10 分类: MCU/ 嵌入式
LPC2220 外部扩展存储器的设计

发布日期:2008-11-13 作者:唐珂,刘志勤 来源:微计算机信息





摘    要:本文介绍了 LPC2220 外部扩展存储器的设计方法,以 FLASH 存储器(SST39VF160) 和 SRAM 存储器(IS61LV25616AL)为实例,给出具体应用电路,以及 EMC 内部寄存器的配 置和初始化程序源代码。
关键词:LPC2220;EMC;外部存储器;FLASH;SDRAM


1  LPC2220 及 EMC 简介


LPC2220 是基于一个支持是实时仿真和跟踪的 32 位 ARM7TDMI-STMCPU 的微控制器,带有片内 64KB 静态 RAM。LPC2220 访问外部存储器时必须通过其外部存储器控制器(EMC)。EMC 是一个 AMBA-AHB 总线上的从模块,它为 AMBA-AHB 系统总线和外部存储器器件提供了一个接口。该模块可同时支持多达 4 组独立配置的外部存储器,每组支持 RAM、ROM、Flash、Burst ROM 等,最大存储容量为 16MB,并通过编程可将数据总线宽度配置为 8、16、32 位。


2  FLASH 存储器设计


2.1  FLASH 存储器硬件接口设计


本文以 SST 公司的存储器 SST39VF160 为例,它是一个 1M×16 的 CMOS 多功能 FLASH 器 件,采用 48 脚 TSOP 封装,其存储容量为 2MB,工作电压为 2.7V-3.6V。在系统中作为系统程序代码段和固化的数据段存放区。


20081113135635547.jpg



 


图 1   FLASH 应用电路


 


系统上电或复位后从系统程序代码段获取指令并开始执行,因此将 SST39VF160 芯片的片选信号设计为 CS0,即将 LPC2220 的 CS0(Pin91)接至 SST39VF160 的 CE 端。SST39VF160 的读信号 OE 端接 LPC2220 的 OE(Pin90);写信号 WE 端接 LPC2220 的 WE(Pin29);16 位数据总线[D0~D15]与 LPC2220 的[D0~D15]连接;由于数据总线宽度设置为 16 位。因此应将LPC2220 外部存储器的引脚地址输出线[A1~A20]与 SST39VF160 芯片的[A0~A19]连接,其 物理地址访问范围为:0x80000000—0x801FFFFF。具体应用电路如上图 1 所示。



2.2  FLASH 寄存器的配置


EMC 的 4 个配置寄存器(BCFG0~BCFG3)相互独立,并分别对应 4 个地址空间(Bank0~ Bank3)。这 4 个寄存器都是 32 位且映射含义相同(如下图 2 所示),其对应的地址空间的控制可通过编程实现。


 


点击看大图


图 2   配置寄存器的映射


(1)IDCY 位。该域控制空闲时钟周期,即为避免器件之间的总线竞争,在一个存储器 组内部的读写访问之间及访问一个存储器组和访问另一个存储器组之间,需要间隔的空闲时


钟周期个数。(例如 CPU 从在 Bank0 地址空间读操作到在 Bank1 地址空间读操作所需的等待 周期数。)一般为  1~16  个  cclk  周期,本系统对可靠性要求较高,所以将空闲周期设为


16cclk。空闲 cclk 周期数=IDCY+1,bit[3:0]=  (1111)2。


(2)第 4 位保留,bit[4]=  (1)2。


(3)WST1 位。该域控制读访问长度,即设置读操作的速度,周期数越大,系统的可靠性越高,周期数越小,存储器的读操作速度越快。本系统需保证系统可靠性,故设置读访问


长度为 34cclk。读访问长度=WST1+3,即 bit[9:5]=  (11111)2。


(4)RBLE 位。该位主要用于对 SDRAM 存储器的配置。对于 FLASH 存储器,写入 1 即可。


即 bit[10]=(1)2。


(5)WST2。该域控制写访问长度(等待周期+操作周期),一般为 1~32 个 cclk 周期。原理与读访问长度大致相同。出于系统可靠性的考虑,将写方位长度设置为  32cclk。写访


问长度=WST2+1,即 bit[15:11]=  (11111)2。


(6)第 16~23 位保留,即 bit[23:16]=  (11111111)2。


(7)BUSSER 位。该位为总线错误状态位。即对数据宽度的检测,当 EMC 检测到一个大


于 32 位数据访问的 AMBA 请求时该位被置位。故该位写入 0,即 bit[24]=  (0)2。


(8)WPERR  位。该位为错误写状态位,即对一个进行写保护的存储器组进行写操作, 则该位被置位。故该位写入 0,即 bit[25]=  (0)2。


(9)WP 位。该位为 1 时,表明存储器组写保护。本系统不对 FLASH 进行写保护,故该


位写入 0,即 bit[26]=  (0)2。


(10)BM 位。该位为 1 时,表明存储器组使用 Burst  ROM。本系统使用 FLASH 存储器, 故该位写入 0,即 bit[27]=  (0)2。


(11)MW 位。该域控制存储器组数据总线的宽度:00=8 位、01=16 位、10=32 位、


11=保留。本系统使用的 FLASH 存储器芯片为 16 位。即 bit[29:28]=  (01)2。


(12)AT 位。该域通常写入 00,即 bit[31:30]=  (00)2。 综上所述,BCFG0=0x1000FFEF。为使 CPU 正常访问系统的外部 FLASH 存储器,需要按


上述内容正确配置寄存器 BCGF0。


3  SDRAM 存储器设计


3.1  SDRAM 存储器硬件接口设计


本文采以 PHILIPS 公司的存储器 IS61LV25616AL 为例,它是一个 256K×16 的高速同步 CMOS 静态 RAM 器件,采用 44 脚 TSOP 封装,存储容量为 512K,工作电压 3.3V。在系统中作


为用户程序代码段和数据存放区。




由上述 FLASH 硬件设计可知,应将 SI61VL25616AL 芯片的片选信号设计为 CS1,故将 LPC2220 的 CS1(Pin30)接至 SST39VF160 的 CE 端;数据总线宽度也为 16 位,即 LPC2220 外部存储器的引脚地址输出线[A1~A18]与 SI61VL25616AL 芯片的[A0~A17]连接,其物理地址访问范围为:0x81000000—0x8107FFFF。16 位数据总线[D0~D15]与 LPC2220 的[D0~D15] 连接;SST39VF160 的读信号 OE 端接 LPC2220 的 OE(Pin90)、写信号 WE 端接 LPC2220 的 WE


(Pin29);另外 SI61VL25616AL 芯片作为用户区使用,可通过将 LPC2220 外部存储器的引脚 字节选择信号线 BLS0(低字节)和 BLS1(高字节)分别与 SI61VL25616AL 芯片的 BLE 和 BHE 引脚相连,实现按字节访问。具体应用电路如图 3 所示。


 



20081113135907997.jpg


图 3    SDRAM 应用电路




 


3.2  SDRAM 寄存器的配置



图 3   SDRAM 应用电路




对于 SDRAM 的 EMC 寄存器设置 FLASH 相比,不同的是 RBLE 位和 MW 位的配置。由于 SDRAM 可以通过编程来实现按字或按字节访问,所以 BCFG1 也相应有两种配置。


(1)RBLE  位。该位根据系统所用存储芯片的访问宽度进行设置。当存储器组由字节宽度或未按字节区分的器件组成时,该位为 0;当存储器组由含有字节选择输入的 16 位和 32


位宽器件组成时该位为 1。由于系统采用的是 16 位 SDRAM。所以该位为 1,即 bit[10]=(1)2。


(2)MW 位。当 SDRAM 按字节访问时,存储器组宽度为 8 位,该域为 00,即 bit[29:28]= (00)2;当 SDRAM 按字访问时,存储器组宽度为 16 位,该域为 01,即 bit[29:28]=  (01)2。


综上所述,当 SDRAM 按字节访问时,BCFG1=0x0000FFEF。当 SDRAM 按字访问时,BCFG1


=0x1000FFEF。为使 CPU 正常访问系统的外部 SDRAM 存储器,需要按上述内容正确配置寄存


器 BCGF1。


4  初始化代码编写


通过设置相应的寄存器,实现初始化。只要正确设置了寄存器的值,LPC2220  才能访问 外部存储器中的数据,所以初始化应该放在 PLC2220 的装载代码里面。这里以 FLASH 初始化


程序为例,对于 SDRAM 只须将按上文所述进行相应修改即可。在芯片复位时程序会跳转到标


号 ResetInit 处。程序①~④设置 PINSEL2 寄存器的值,当预定义有 EN_CRP 宏时,PINSEL2 被设置为  0x0F814910,禁止  JTAG  口调试;若没有定义  EN_CRP  宏时,PINSEL2  被设置为


0x0F714914,使用 JTAG 口调试。其中 EN_CRP 是当且仅当选用 RelInChip 为目标,编译器产


生的预定义宏。程序⑤~⑦设置外部第 0 存储区组的时序和总线宽度。部分程序如下: ResetInit


LDR    R0,=PINSEL2                 ①


IF    :DEF:EN_CRP



LDR    R1,=0x0F814910            ② ELSE


LDR    R1,=0x0F814914            ③


ENDIF



STR


R1,[R0]



LDR


R0,=BCFG0



LDR


R1,=0x1000FFEF



 


STR  R1,[R0]                       ⑦


?


?


?


5  注意事项


LPC2220 最高振荡频率可达 60MHz,所以在对其进行外部存储器扩展时,需要注意选择


工作速度合适的外部存储器芯片。扩展 FLASH 尽量使用 1M×16 位的芯片,这样电路设计较简单。笔者在使用过程中发现,某些 FLASH 存储芯片与 LPC2220 存在兼容性问题,有时工作不稳定,但是换另一批次的芯片后又正常工作,应注意筛选。对于 SDRAM,当我们对外部存 储器接口执行写操作的时候,BLS0 和 BLS1 口上会出现一个短时脉冲干扰,这个干扰的大小 与时钟频率成正比,并随着电压和温度的变化而变化。


创新点:在以 32 位 ARM7TDMI-STMCPU 为核心的嵌入式系统中,设计外部 FLASH、SDRAM


存储器的硬件电路,并编写相应初始化程序。


参考文献


[1]周立功.ARM 嵌入式系统基础教程[M].北京航空航天大学出版社,2005.


[2]周立功.ARM 嵌入式系统实验教程(一)[M].北京航空航天大学出版社,2004.


[3]IS61LV25616AL 英文数据手册


[4]SST39VF160 英文数据手册


[5]李晶皎  贾殿龙  王爱侠。基于 ColdFire MCF5249 的 Flash 存储器扩展技术[J].微计 算机信息,2006,2-2:140-143。

作者简介:唐珂(1984-),男,硕士,主要研究方
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
10
关闭 站长推荐上一条 /3 下一条