S3c2440的sdram

来源:互联网 发布:淘宝客在哪里推广 编辑:程序博客网 时间:2024/05/19 18:37
首先要明白几个概念,S3C2440是处理器,是芯片,其中包含了ARM核和各种硬件控制器,这些控制器中就包括内存控制器,而处理器要想使用内存硬件就需要程序员通过代码把该内存设备的参数告诉内存控制器,这也就是内存初始化要做的事情,下面我们从CPU地址空间,sdram工作原理和内存控制器的寄存器设置三方面来说明如何使用sdram1.CPU的地址空间S3C2440使用了ADDR0-ADDR26,共27根地址线,即可寻址128M。同时使用nGCS0-nGCS7,共8根选片信号线,也就是说8个片选,每个都有128M的寻址范围,共有1G的寻址空间,即地址范围为0x0-0x40000000。nGCSx引脚在拉低的时候有效,这里的nGCSx和ADDRx都是S3C2440的引脚同时每个片选对应一个bank,共8个bank,sdram只能焊接在bank6和bank7上。2.SDRAM的工作原理0)SDRAM基本概念mini2440开发板使用了两片32M字节,16bit位宽的SDRAM,并联形成32bit位宽的64M字节内存,实际上SDRAM是一个存储阵列,对于这里使用的SDRAM的容量,一般表示为4Mbit * 16bit * 4Bank,其中16bit表示位宽,4Bank表示有4个L-Bank。所谓位宽,表示该内存芯片一次读写的数据宽度,所以这里我们可以看作在4M范围内,每个地址都有16bit存储空间。SDRAM采用行地址和列地址的方式来索引一个存储单元,因为4M等于2的22次方,所以行地址和列地址加起来需要等于22根地址线才能访问到4M的范围1)SDRAM的读操作顺序SDRAM芯片的地址线只有A0-A12,一共13根地址线,通过复用地址线依次发送行地址和列地址,其时序如下:a.发出L-Bank片选信号和片选地址BA0,BA1的同时,发出RAS行选通信号和行地址b.在经过tRCD(RAS到CAS的延迟时间)之后,同时发出读命令和列地址c.CL(CAS Latency,CAS潜伏期,即在发出列地址后到第一笔数据输出之间的时间)个时钟之后,读数据依次出现在数据总线上。d.在读操作的最后,需要向SDRAM发送预充电(PRECHARGE)命令,以关闭该行e.在经过tRP(PRECHARGE命令后,经过tRP时间之后才能再次访问该行)时间之后,可以开始下次读写操作。2)SDRAM的写操作顺序a.发出L-Bank片选信号和片选地址BA0,BA1的同时,发出RAS行选通信号和行地址b.在经过tRCD(RAS到CAS的延迟时间)之后,同时发出写命令和列地址,同时待写数据送DQ引脚c.在最后一个数据写入后的tWR后,向SDRAM发送预充电(PRECHARGE)命令,以关闭该行d.在经过tRP(PRECHARGE命令后,经过tRP时间之后才能再次访问该行)时间之后,可以开始下次读写操作。3)突发为了批量读写,引入突发操作,指定起始列地址和突发长度,就可以获取指定长度的内存数据4)刷新刷新是定期的对所有L-Bank中的相同行进行充电。充电的周期是电容的有效保存器的上限64ms,也就是说每一行的循环周期是64ms。若SDRAM有4096行,那么刷新速度就是4096/64ms。刷新分为两种一种是Auto Refresh(AR),一种是Self Refresh(SR),按照PC133的标准,刷新需要占用9个时钟周期,在此期间所有的工作命令只能等待,无法执行。如果SDRAM有8192行,那么每行在64/8192=0.007815ms内将会刷新一次,假设HCLK的时钟频率为100MHz,一个时钟周期=1/100M秒=1/100000ms,那么0.007815ms就等于781个时钟周期,在这781个时钟周期内有9个周期用于刷新,其他用于执行读写操作。5)SDRAM与CPU的连线在S3C2440的datasheet里内存芯片的A0-A12地址线引脚,与CPU的A2-A14地址线依次连接,为什么内存芯片的地址引脚不是与CPU的地址引脚按照序号一一对应的呢?这是因为S2C2440采用两块16bit位宽的芯片并联为一块32bit位宽的内存,所以需要四字节对齐,每次获取数据的时候,一块芯片读写四字节的高二字节,另外一块芯片读写四字节的低二字节,A14:A2组成的地址可以看作是以4字节为单位的地址空间的索引,把这个索引连接到内存芯片上,以这个索引为地址访问内存芯片,分别得到两个字节,并组成四字节数据。也就是说,A14:A2这个索引对应的4字节,是以此为索引分别访问内存芯片得到的两个两字节组成的,例如地址0x04的A14:A2=1,把它连接到内存芯片后,分别以1为地址访问内存芯片各得到两个字节,这两个字节组成了最终的4字节数据。前面说过4M的地址空间需要22根地址线,行地址使用了A12:A0,共13根地址线,列地址就要使用A8:A0,共9根地址线。对应的,行地址输入的是CPU地址线的A14:A2,列地址输入的是A23:A15,A25:A24为L-Bank的片选信号,连接内存芯片的BA0,BA1引脚,也就是说地址被分为三部分,片选信号,行地址,列地址另外,内存芯片的LDQM和UDQM引脚分别用来读写低字节和高字节数据,通过分别设置两块芯片的这两个引脚,可以读写4字节中的单个字节。3.SDRAM控制器的设置以S3C2440为例1)BWSCON设置Bank6和Bank7的位宽2)BANKCON6,BANKCON7设置Bank6和Bank7上的存储器类型设置tRCD设置SCAN(SDRAM Column Address Number),即列地址数3)REFRESH寄存器设置刷新开关设置刷新模式,AR还是SR设置tRP(预充电时间)设置tSRC(单行充电时间),tRC就是前面说明的9个时钟,且有等式tRC=tSRC+tRP --------------------------------设置刷新计数,refresh_counter = 2^11 +1 - refresh_period * HCLK ----------------------------------4)BANKSIZE设置是否开启突发模式设置是否使用SCKE作为省电模式信号------------------------------设置存储器工作频率设置Bank6/7的容量-----------------------------5)MRSR设置CL
0 0