如何正确配置SDRAM行/列/Bank地址(基于EM638165TS-7IG)
1. 概述
如何正确配置APM32系列外挂SDRAM的行/列/Bank地址等主要参数,SDRAM使用的是EM638165TS-7IG,以下从EM638165TS-7IG的存储结构和内存计算、引脚信号描述、功能框图、初始化配置等四个方面来依次介绍这款SDRAM。
2. SDRAM存储结构和计算方法
SDRAM(Synchronous DynamicRandom Access Memory)同步动态随机存储器
SDRAM内部为一个存储阵列,类似表格一样,有行列之分,当我们需要访问一个单元的时候,应该先指定一个行地址和一个列地址,行地址列地址组成的表格为Bank。
SDRAM容量=存储单元数量(行地址*列地址*bank数量)*存储单元容量
由下表可得EM638165TS-7IG的行/列/bank地址:
Bank信号:BA0、BA1 2位
行地址:A0-A11 12位
列地址:A0-A7 8位
EM638165TS-7IG的SDRAM容量=212*28*22*16bit=1M*4bank*16bit=64Mb=8MB
在对SDRAM进行数据读写时,需要先确定bank地址,然后确定行地址列地址,再对数据进行读写操作,同一时间只能对一个bank的一个存储单元进行操作。
3. SDRAM引脚信号描述
1. CLK:时钟信号,输入信号在上升沿时进行采样
2. CKE:时钟使能信号,高电平有效,禁止时钟使能时电源掉电且启动自刷新模式
3. CS#:片选信号,低电平有效,使能后才能对bank进行选择
4. RAS#:行地址选通信号,为低电平时地址线表示的是列地址
5. CAS#:列地址选通信号,为低电平时地址线表示的是行地址
6. WE#:写使能信号,低电平有效
7. LDQM/UDQM:输入输出数据掩码
8. A0-A11:地址线,当我们选择SDRAM某个Bank的Row地址的时候,需要到12根地址线(A0~A11);当选择Col地址的时候,只用A0~A7这8根线;A10这个信号可以用来控制Auto-precharge
9. DQ0-DQ15:双向数据线
4. SDRAM功能框图
外部CS#、RAS#、CAS#、WE#、CKE以及地址线的输入命令通过命令译码器译码,将参数保存到控制信号发生器,对存储阵列进行相关的控制;外部的地址信号线通过地址缓冲器输入模式寄存器,然后经过控制信号发生器进行寻址操作。
5 SDRAM初始化
以APM32F103xDxE为例,由该芯片地址映射图可知,SDRAM的内存地址范围:0x6000 0000-0X6FFF FFFF(256MB),APM32F103xDxE最大可外接256MB的SDRAM,SRAM内存不够时外接SDRAM来扩展内存。
SDRAM初始化需要配置的参数及所对应的寄存器如下所示(寄存器可查阅F103xDxE用户手册EMMC章节里的DMC模块,手册见极海官网):
GPIO初始化:初始化所有信号对应的引脚(用户手册DMC模块有对应的表格可参考使用)
SDRAM内存大小:DMC_MASK寄存器的MSIZESEL位,可选择(64KB、128KB、256KB、512KB、1MB、2MB、4MB、8MB、16MB、32MB、64MB、128MB、256MB)
Bank地址位数: DMC_CFG寄存器的BAWCFG位,可选择(1位、2位)
行地址位数:DMC_CFG寄存器的RAWCFG位,可选择(11位、12位、13位、14位、15位、16位)
列地址位数:DMC_CFG寄存器的CAWCFG位,可选择(8位、9位、10位、11位、12位、13位、14位、15位)
时钟相位:DMC_CTRL2寄存器的CPHACFG位,可选择(同相、反相)
时序相关参数:DMC_TIM0寄存器和DMC_REF寄存器
配置EM638165TS-7IG初始化相关代码如下所示:
dmcConfig.bankWidth= DMC_BANK_WIDTH_2; //bank地址位数为2位,4个bank
dmcConfig.colWidth= DMC_COL_WIDTH_8;//列地址位数为8位
dmcConfig.memorySize= DMC_MEMORY_SIZE_8MB; //存储大小为8MB
dmcConfig.rowWidth= DMC_ROW_WIDTH_12;//行地址位数为12位