嵌入式Linux-JZ2440-03课-存储管理器

借鉴于此1
借鉴于此2 收集记录,方便以后翻看回顾。
1:存储管理器与CPU以及其他外设的关系
这里写图片描述
2:CPU只负责发命令,由存储管理器来管理这些类内存的设备,那么存储管理器是怎么来管理这些类内存的设备的呢?。
jz2440地址空间:
27位地址线,32位数据线,8个片选信号。共8个存储器(BANK0-7)1GB,系统上电将从bank0开始执行。
S3C2440对外引出27根地址线ADDR0-ADDR26,访问范围只有128MB,CPU对外还引出8根片选信号nGCS0-nGCS7,对应BANK0-BANK7,当访问BANKx的地址空间时,nGCSx引脚输出低电平来选中外接设备。
这样每个128MB空间,共8个片选,对应1GB的地址空间。空间分布图如下:
这里写图片描述

BANK访问地址=Bank起始地址(0X30000000)+2^地址线地址(ADDR[25:0])=0X30000000-0X33FFFFFF.
S3C2440是32位CPU,可以使用的地址范围理论达到4GB,除去上面连接外设的1GB空间外,还有一部分是CPU内部寄存器的地址,剩下的地址空间没有使用。
2440寄存器地址范围处于:0x4800 0000-5fff ffff
这里写图片描述
这里写图片描述

3::存储器管理器作用:
(对SDRAM、网卡、nor等设备进行初始化,以便存储器管理器配合CPU进行与外设数据通讯)
下图是S3C2440跟外设的连接地址:
这里写图片描述
BANK0-BANK5的连接方式类似,BANK6连接SDRAM时复杂一些,SDRAM内部是一个存储阵列,指定一个行,再指定一个列,就可以准确找到所需要的单元格,而SDRAM有4个逻辑表格(L-BANK)

比如CPU想从0X3000,0000 读四个字节的地址,CPU只要执行:

 MOV R1 0X30000000 , 
 ldr R0 ,[R1];

这里写图片描述
这两条指令即可,存储管理器根据内部的配置信息:1,发出片选信息 2,发出bank选择信号 3,发出列地址
4,发出行地址;

4:想要访问一个存储芯片,需要满足哪些条件?
(1) 地址线
(2) 数据线 8/16/32 数据宽度
(3) 时钟频率
(4) 芯片相关特性
这里写图片描述

5:开发板使用两片16bit的SDRAM芯片并联形成32位的位宽,与CPU的32根数据线DATA0-DATA31相连,BANK6的起始地址位0x30000000
这里写图片描述

6:存储控制器的寄存器使用方法
存储控制器共有13个寄存器,BANK0-BANK5只需要设置BWSCON和BANKCONx两个寄存器,BANK6、BANK7外接SDRAM时,还要设置REFRESH,BANKSIZE,MRSRB6,MRSRB7,等4个寄存器,下面分别说明

1)位宽和等待控制寄存器BWSCON
BWSCON中每四位控制一个BANK,最高4位对应BANK7、接下来4位对应BANK6,依次类推,如下图
这里写图片描述
这里写图片描述
注:BANK0接NOR Flash 16位。
根据存储控制器与外设的关系可以确定BWSCON寄存器值为:0x22011110

2)BANK控制寄存器BANKCONx(x为0-5)
这里写图片描述
这些寄存器用来控制BANK0-BANK5外接设备的访问时序,使用默认0x0700即可
3)BANK控制寄存器BANKCONx(x为6-7)
这里写图片描述
根据时序图和SDRAM-EM63A165TS:决定取值
这里写图片描述
这里写图片描述
所以本开发板,BANKCON6/7均设为0x00018005

4)刷新控制寄存器REFRESH
这里写图片描述
这里写图片描述
这里写图片描述
0X0010001100000=0X08C0000
综上所述:REFRESH=0x008C0000+1955=0x008C07A3
这里写图片描述

5)BANKSIZE寄存器
这里写图片描述
则本开发板BANKSIZE设为0xB1

6)SDRAM模式设置寄存器MRSRBx(x为6-7)
这里写图片描述
所以MRSRB6/7取值为0x30

重点内容
总结一下:

BWSCON 0x22011110
BANKCON0~5 0x0700
BANKCON6~7 0x00018005
REFRESH 0x008C07A3
BANKSIZE 0xB1
MRSRB6~7 0x30

地址线为什么从LADDR2开始?
错两位是为了32位对齐(地址为8位数据地址,2440位宽为32,错两位,一次跳4byte)。
内存是32位数据宽度,2440的 LADDR0和LADDR1就不用接,从LARRD2开始接到内存的A0一直往下接。 内存是16位数据宽度,2440的LADDR0不用接,从LADDR1开始接到内存的A0一直往下接。 内存是8位数据宽度,2440就从LADDR0开如接到8位位宽的内存的A0一直往下接。
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_35989861/article/details/81323836