1、存储控制器概述
S3C2440存储控制器提供了访问外部存储设备所需的内存控制信号。有以下特点:
--支持小端/大端字节序(通过软件选择)
--地址空间:每个BANK有128M(总共1G,8个BANK)
--可编程的访问位宽:BANK0为16/32位,其他BANK为8位/16位/32位
--总共8个存储器BANK,其中6个用于ROM,SRAM,等等。其余的2个用于ROM,SRAM,SDRAM等等
--7个BANK的起始地址是固定的(BANK0~BANK6)
--1个BANK的起始地址和大小可编程(BANK7)
--所有BANK的访问周期可编程
--外部的wait信号可延长总线周期
--外接SDRAM支持自刷新和掉电模式
(以上内容摘自三星S3C2440数据手册)
注意:BANK6和BANK7的地址空间大小必须相等(BANK6和BANK7的地址空间大小是可编程的)
S3C2440对外引出了27根地址线ADDR0~ADDR26,所以访问地址空间范围是2^27位=128M。另外,CPU还对外引出了8根片选信号nGCS0~nGCS7,对应于BANK0~BANK7,当访问BANKx的地址空间是,nGCSx引脚输出低电平用来选中对应的外接设备。这样,8个片选信号总共对应了8个128M即1G的地址空间。这8个BANK的地址空间如下图所示(图摘自S3C2440芯片手册):
图1-1 S3C2440的内存映射空间
图中左半部分对应的是不使用NAND Flash作为启动设备时的地址空间布局,右半部分对应的是使用NAND Flash作为启动设备时的地址空间布局。
S3C2440是32位的CPU,可以使用的地址范围理论上最大可达到4GB,除上述用于连接外设的1GB地址空间,还有一部分是CPU内部寄存器的地址,还有一部分未使用。
S3C2440的寄存器地址范围处于0x48000000~0x5FFFFFFF之间,如下表所示:
|
起始地址 |
结束地址 |
存储控制器 |
0x48000000 |
0x48000030 |
USB Host 控制器 |
0x49000000 |
0x49000058 |
中断控制器 |
0x4A000000 |
0X4A00001C |
DMA |
0x4B000000 |
0x4B0000E0 |
时钟和电源管理 |
0x4C000000 |
0x4C000018 |
LCD控制器 |
0x4D000000 |
0X4D000060 |
NAND Flash |
0x4E000000 |
0x4E00003C |
摄像头接口 |
0x4F000000 |
0x4F0000A0 |
UART |
0x50000000 |
0x50008028 |
脉宽调制计时器 |
0x51000000 |
0x51000040 |
USB设备 |
0x52000000 |
0x5200026F |
WATCHDOG计时器 |
0x53000000 |
0x53000008 |
IIC控制器 |
0x54000000 |
0x54000010 |
IIS控制器 |
0x55000000 |
0x55000012 |
I/O端口 |
0x56000000 |
0x560000CC |
RTC |
0x57000000 |
0x5700008B |
A/D转换器 |
0x58000000 |
0x58000014 |
SPI |
0x59000000 |
0x59000034 |
SD接口 |
0x5A000000 |
0x5A000043 |
AC97音频编码接口 |
0x5B000000 |
0x5B00001C |
表1-1 S3C2440各功能部件寄存器地址范围
2、存储控制器与外设的对应关系
我使用的开发板是JZ2440V3,本开发板使用了存储控制器的BANK0~BANK6,所接设备分别为:NOR Flash、IDE接口、10M网卡CS8900、扩展串口芯片16C2550、SDRAM。
根据上图1可以知道各个BANK的起始地址,但是相关外设的具体访问地址还需要用到相应外设硬件连接所用到的地址线。这些所用的的地址线所确定的地址值,再加上这个BANK的起始地址,就是这个外设的具体访问地址。
以扩展串口为例:
图2-1 S3C2440与扩展串口16C2550的连线图
它使用的nGCS5作为片选信号线,根据图1可知,它的起始地址为0x28000000。扩展串口芯片有个片选信号引脚nCS(图2中是接了2片16C2550,nCSA和nCSB分别是两个芯片的片选信号引脚)。根据图2可知nCSA=nGCS5 || ADDR24,nCSB=nGS5 || !ADDR24,即nGCS5为低电平,ADDR24也为低电平时选中扩展串口A;当nGCS5为低电平,ADDR24为高电平时选中扩展串口B。所以地址线ADDR24决定了扩展串口A、B的起始地址分别为0x28000000和0x29000000。CPU的ADDR0~ADDR2连接扩展串口的A0~A2,所以访问空间范围为8个字节,所以CUP对扩展串口A的访问空间范围是0x28000000~0x28000007,对扩展串口B的访问空间范围是0x29000000~0x29000007。
3、存储控制器的寄存器
1)BWSCON:位宽和等待控制寄存器
图2-1 BWSCON寄存器
BWSCON寄存器的每四位控制一个BANK,最高4位[bit31~bit28]对应的BANK7,[bit27~bit24]对应BANK6……
图2-2 BWSCON寄存器的高4位
STx:启动/禁止SDRAM的数据掩码引脚,对于SDRAM,此位为0,对于SRAM,此位为1。
WSx:是否使用存储器的WAIT信号。
DWx:设置相应的BANK位宽,0b00:8位,0b01:16位,0b10:32位,0b11:保留。
图2-3 BWSCON寄存器的低3位
控制BANK0的位是bit0~bit2,没有ST0位,DW0[2:1](只读),有硬件跳线决定。0b01:16位,0b10:32位。BANK0只支持16位和32位。
2)BANKCONx
BANKCON0~BANKCON5用来控制BANK0~BANK5外接设备的访问时序。
BANK6和BANK7可以外接SRAM或SDRAM,BANKCON6~BANKCON7和BANKCON0~BANKCON5有所不同。
当MT=0b00时,与BANKCON0~5类似。
当MT=0b11时,需要根据外接SDRAM的具体情况进行设置。
外接SDRAM时还需要设置刷新控制寄存器REFRESH、BANKSIZE寄存器、SDRAM模式设置寄存器MRSRB6~MRSRB7。