六、嵌入式学习笔记--存储控制器

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-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张图片
图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……
六、嵌入式学习笔记--存储控制器_第3张图片
图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。




你可能感兴趣的:(学习笔记-嵌入式Linux)