黄飞翔 蔡启仲
【摘 要】在嵌入式系统设计中,SDRAM的工作原理、控制时序及相关寄存器配置方法,相对较难。本文基于三星公司的S3C2440微处理器,设计外接美光内存芯片MT48LC16M16A2,并详细分析了初始化代码,目的是加深初学者对SDRAM的基础知识的了解,能有助于今后的嵌入式学习以及设计提供参考。
【关键词】SDRAM;存储器;S3C2440
0 引言
制造商所生产的MCU片内存储器空间往往不可能完全满足所有的嵌入式系统应用设计,例如,AT89S51单片机的内部RAM大小为128字节。因此,对于需要较大片内存储空间的应用设计来说,扩展片内存储器空间是非常重要的。
1 硬件设计
1.1 三星S3C2440微处理器
1.1.1 S3C2440硬件资源
S3C2440是三星公司开发的一款基于ARM920T内核的16/32位RISC微处理器,集成的系统外设和接口有:1.8V内核电压,3.3V存储电压,3.3V I/O电压;16KB的指令高速缓存、16KB的数据高速缓存和存储管理单元;外部的存储控制器(SDRAM控制器和片选逻辑);LCD控制器,包括一个LCD DMA;4个带外部请求管脚的DMA;3个UART,2个SPI;1个I2C总线控制器,1个I2S-BUS控制器;SD主机接口;4个PWM时钟和1个内部时钟;看门狗时钟;117个GPIO,24个外部中断源; 8路10位 ADC和触摸屏接口;带ALARM功能的RTC;带PLL的片上时钟发生器;NAND Flash控制器。
1.1.2 存储器系统
ARM存储器系统由各种类型的存储器按照一定的层次结构组合成[3],如图1所示。
SDRAM在存储结构中用做程序的运行空间,它在响应控制输入前会等待一个时钟周期,将CPU和RAM之间的速度进行匹配,加快了数据传输速度。
1.1.3 S3C2440的地址空间
S3C2440是一款具有32位的地址总线和数据总线宽度的CPU,实际上只指引出了27根地址线,最大寻址空间为128MB。8个Bank分别对应S3C2440的8个片选信号线nGCS0~ nGCS7相互区别,可以做到总的寻址空间为8*128Mb=1GB。
S3C2440地址空间[4]如图2所示,SDRAM需接在S3C2440的Bank6或Bank7上。
1.2 SDRAM存储器MT48LC16M16A2
1.2.1 MT48LC16M16A2概述及特性[5]
MT48LC16M16A2是一款256Mb高速CMOS SDRAM,容量为256Mb,结构为4 x 4M x 16bits,16位位宽,兼容PC100、PC133,3.3V供电电压,自动预充电,刷新时间为8192/64ms。
1.2.2 SDRAM读写时序
S3C2440对SDRAM的基本读操作和写操作均需要控制线与地址线相互配合。
SDRAM基本读操作过程如下:
(1)发出Bank激活命令(必须大于RAS到CAS的延迟指标Trcd),并锁存响应Bank的行地址与列地址;
(2)CL(CAS延迟值)个时钟周期后,先指定行地址再指定列地址数据即可出现在数据总线上;
(3)向SDRAM预充电命令(PRECHAREG)以关闭激活页,等待Trp时间,即可进行下一次读、写操作。
SDRAM基本写操作过程如下:
(1)发出Bank激活命令(要求同前),并锁存响应Bank的行地址与列地址;
(2)写入数据依次出现在数据总线上;
(3)写入最后一数据后延时Twr时间,向SDRAM预充电命令(PRECHAREG)以关闭激活页,等待Trp时间后即可进行下一次读、写操作。
1.3 接口电路设计
采用两片MT48LC16M16A2并联组成32位的位宽,它们与S3C2440的接口电路设计如图3所示。
2 寄存器配置及SDRAM初始化分析
2.1 寄存器配置
Bank7不仅可以像Bank0~Bank5一样支持ROM和SRAM,还可以外接SDRAM,因此除了需要像Bank0~Bank5一样设置相应的总线带宽\等待控制寄存器BWSCON和总线控制寄存器BANKCON7外,还需要根据MT48LC16M16A2数据手册中的参数(例如Trp、Trc、Trcd和Trp等)来对刷新控制寄存器、存储块大小控制寄存器和模式设置寄存器的相应位进行配置,从而使得内存控制器可以产生相应的时序。假设系统的HCLK为100MHz(即时钟周期为10ns),则各寄存器概述及根据SDRAM芯片时序的配置(未配置的位保持默认)如下:
(1)总线带宽\等待控制寄存器(BWSCON)各位如下:
ST 启动/禁止SDRAM的数据掩码引脚,对于SDRAM,该位置0;
WS 是否使用存储器的WAIT信号,通常置0为不使用;
DW 两位,设置位宽(00=8bit、01=16bit、10=32bit、11=保留)。
(2)总线控制寄存器BANKCON7各位如下:
MT([16:15]):配置为0x03将Bank7映射的物理内存为SDRAM;
Trcd([3:2]):行地址到列地址的延迟时间设置为0x0,因为Trcd[5]=20ns(即2倍时钟周期);
SCAN([1:0]):SDRAM列地址位数设置为0x01,因为本设计所采用MT48LC16M16A2的列地址数为9。
(3)刷新控制寄存器REFRESH
REFEN([23])设置为1,即启用SDRAM刷新功能;TREFMD([22])设置为0,即选用自刷新模式;TRP([21:20])根据Trp[5]=20ns设置为0x00,即两个时钟周期;Tsrc[19:18](SDRAM半行周期运行时间),SDRAM的行周期运行时间满足Trc=Tsrc+Trp,因为Trp[5]=20ns(2个时钟周期),Trc[5]=66ns(7个时钟周期),所以Tsrc为5个时钟周期,即将Tsr([19:18])设置为0x01;MT48LC16M16A2刷新8192行的总时间为64ms,则单行刷新时间为7.81μs(64ms/8192),再由公式(单行刷新时间=211-SDRAM工作频率(MHz)×刷新计数器值+1)计算得Refresh Counter([10:0])=0x4f4。
(4)存储块大小控制寄存器BANKSIZE
BK76MAP([2:0])配置为0x001,因为本设计外接64MB的SDRAM。
(5)SDRAM模式设置寄存器MRSRB7
CL[6:4] 配置为0x011,因为Tcl[5]=2.5ns(需3倍时钟周期)。
2.2 设计并分析SDRAM启动代码
首先在xxx.inc文件中对下列常量进行定义。
其次,初始化文件中包含了xxx.inc文件,就可以在其中使用上述变量了,如下:
通过以上部分代码,即可完成对SDRAM存储器的初始化。
3 总结
本次设计介绍了S3C2440与SDRAM硬件接口的设计及相关寄存器的配置过程,为嵌入式系统设计提供了一定的学习和设计参考。
【参考文献】
[1]王波波,王琤,等.ARM完全学习手册[M].北京:化学工业出版社,2012.
[2]黄智伟,邓月明,王彦.ARM9嵌入式系统设计基础教程[M].北京航空航天大学出版社,2008.
[3]奚海蛟,谌利,吕铁军.ARM体系结构与外设接口实战开发[M].北京航空航天大学出版社,2012.
[4]王小强,方鹏,粟思科.ARM处理器裸机开发实战—机制而非策略[M].电子工业出版社,2012.
[5]MT48LC16M16A2说明书[S].
[6]S3C2440数据手册[S].
[7]陈学立,邱兆坤,陈志勇.嵌入式处理器与SDRAM的接口设计与实现[J],现代电子技术,2010(2).
[责任编辑:汤静]