1.SDRAM原理
(1)SDRAM内部存储结构:
(2)再看看与2440连接的SDRAM原理图:
sdram引脚说明:
A0-A12:地址总线 D0-D15:数据总线(位宽16,2片级联成位宽32) BA0-BA1:bank选择 nSCS:片选 nSRAS:行地址选择 nSCAS:列地址选择 nWE:写使能 SCLK:时钟 SCKE:时钟使能
(3)SDRAM的地址范围:
之前我们讲“二、不同位宽外设与CPU地址总线的连接”这一节的时候,我们留下了一个问题,SDRAM的地址范围是多少?
我们知道地址范围肯定是base_addr + size。我们根据片选接了nGCS6,base_addr=0x3000,0000,那么size是多大呢?
下图是我截取的sdram手册上的特性描述:
我们看见容量为:4M word x 16-bit x 4-bank = 32M,再看原理图我们是两片级联,所以容量为4M word x 32-bit x 4-bank=64M。所以地址范围是[0x3000_0000 ~ 0x33ff_ffff]
(4)SDRAM数据访问原理:
我们知道64M=2^20*2^6=2^26,那么需要26条地址线,再看看原理图,我们发现SDRAM的地址线A[12:0]只有13条,那么最多只能访问2^13=8K的数据,地址线明显配不上这么大的容量,那么它是如何解决的呢?
答:当然是拆分地址了,地址分多次传输。我们从SDRAM的内部存储结构得知要确定SDRAM的一个存储单元,先确定是哪个bank,然后再确定在哪一行、哪一列即可。
SDRAM有4个bank,由BA0、BA1决定选中哪个bank,查看SDRAM手册见下图;
然后通过选中nSRAS选中行地址,从而发送行地址;最后通过选中nSCAS选中列地址,从而发送列地址。
举个栗子:
CPU执行如下指令:
ldr r0, =0x30000000; ldr r1, [r0]; 从SDRAM基地址读取4byte数据
过程分析:
1.发出片选信号nGCS6,选中SDRAM 2.发出bank选中信号(BA0,BA1),确定是哪个SDRAM上的哪个bank,从原理图得知CPU的ADDR24、ADDR25对应norflash上的BA0,BA1,所以让BA0、BA1=00,选中bankA。
从SDRAM手册确定行列地址的数目,如下图:
3.发出行地址信号nSRAS,使能行地址传输。传输行地址,确定是哪一行(看SDRAM手册确定行地址数(A12-A0)13条) 4.发出列地址信号nnSCAS,使能列地址传输。传输列地址,确定是哪一列(看SDRAM手册确定列地址(A8-A0)9条)
从而发送完整的0x30000000地址到了SDRAM,SDRAM返回4byte数据给CPU。
来源:https://www.cnblogs.com/fuzidage/p/12023742.html