天天看点

07-存储管理器实验

 S3C2440的存储控制器提供了访问外设所需要的信号,它有如下特性:

 S3C2440对外引出的27根地址线ADDR0-ADDR26的访问范围只有128MB,而八个片选信号nGCS0-nGCS7对应于BANK0-BANK7,当访问BANKx的地址空间时,nGCSx引脚输出低电平用来选中外接的设备。每个nGCSx对应128MB地址空间,8个nGCSx信号总共对应了1GB。

在TQ2440开发板中BANK6连接SDRAM,CPU对其提供了一组用于SDRAM的信号:

    

1、SDRAM介绍

SDRAM的内部是一个存储阵列,如同一个二维表格,将数据填进去。其检索原理和表格相同,先指定一个行地址,再指定一个列地址就可以准确找到所需要的单元格。这个单元格被称为存储单元,而表格则称为逻辑BANK(L-BANK),SDRAM一般有4个L-BANK其逻辑图为上图所示。

访问SDRAM可以分为如下四个步骤:

 在TQ2440开发板中使用了两片16位的ADRAM芯片并联组成32位的位宽,与CPU的32根数据线(DATA0-DATA31)相连。BANK6的起始地址为0x30000000,所以SDRAM的访问地址为0x30000000-ox33ffffff,共64MB。 

07-存储管理器实验

2、存储控制器的寄存器使用

在S3C2440中,存储控制器一共有13个寄存器,BANK0-BANK5只需要设置BWSCON和BANKCONx(x为0-5)两个寄存器,BANK6/BANK7外接SDRAM时,除了WSCON和BANKCONx(x为6-7)外,还需要设置REFRESH、BANKSIZE、MRSRB6、MRSRB7等四个寄存器。下面分别说明每个寄存器。

位宽和等待控制寄存器BWSCON

BWSCON

说明

STx

启动/禁止SDRAM的数据掩码引脚,对于SDRAM,此位为0;对于SRAM,此位为1

WSx

是否使用存储器的WAIT信号,通常设为0

DWx

使用两位来设置相应BANK的位宽,0b00对应8位,0b01对应16位,0b10对应32位,0b11保留

 对于BANK0,它没有ST0和WS0、DW0([2:1]),bank0只支持两种位宽16/32。

BANK控制寄存器BANKCONx(x为0-5),控制BANK0-BANK5外接设备的访问时序,使用默认的0x0700即可满足TQ2440开发板。

BANK控制寄存器BANKCONx(x为6-7),在8个BANK中,只有BANK6和BANK7可以外接SRAM或SDRAM,因此其设置方法有所不同。

BANKCONn

MT [16:15]

用于设置BANK外接的是SRAM或SDRAM,00 = ROM or SRAM,11 = Sync. DRAM

Trcd [3:2]

RAS to CAS delay,推荐设置0b01

SCAN [1:0]

SDRAM的列地址位数,00 = 8-bit 01 = 9-bit 10= 10-bit

刷新控制寄存器REFRESH

REFRESH

REFEN [23]

0,禁止SDRAM的刷新功能,1,开启SDRAM的刷新功能

TREFMD [22]

SDRAM的刷新模式。0 = CBR/Auto Refresh 1 = Self Refresh(一般系统休眠时使用)

Trp [21:20]

一般设置为0

Tsrc [19:18]

设为默认值11

Refresh Counter [10:0]

SDRAM的刷新值,Refresh period = (211-SDRAM时钟频率(MHX)+1)/sdram刷新周期(us)

BANKSIZE寄存器

BANKSIZE

BURST_EN [7]

0,禁止ARM核突发传输;1,ARM核支持突发传输

SCKE_EN [5]

0,不使用SCKE信号令SDRAM进入省电模式;1,使用SCKE信号令SDRAM进入省电模式

SCLK_EN [4]

0,时刻发出SCLK信号;1,仅在访问SDRAM期间发出SCLE信号

BK76MAP [2:0]

配置BANK大小

SDRAM模式设置寄存器MRSRBx(6-7)

MRSRBx

CL [6:4]

SDRAM时序的时间参数设置

3、存储控制器实验;点亮LED灯

从NAND Flash启动CPU时,CPU会通过内部的硬件将NAND Flash开始的4KB数据复制到称为Steppingstone的4KB的内部RAM中(起始地址为0),然后跳转到地址0开始执行。

本实验先使用汇编语言设置好存储控制器,使外接的SDRAM可用,然后把程序本身从Steppingstone复制到SDRAM,最后跳转到SDRAM中执行。

首先在head.S文件中,完成的工作是设置SDRAM,将程序复制到SDRAM中,然后跳转到SDRAM继续执行。

在leds.c文件中,完成led循环闪烁的实验:

Makefile的编写为:

代码的具体流程图为:

07-存储管理器实验

   

07-存储管理器实验
07-存储管理器实验

实验结果:

07-存储管理器实验

相比于直接在内部SRAM运行结果,可以发现在外部SDRAM运行的LED点灯程序,LED闪烁变慢 。本程序只能将内部SRAM的4KB程序复制到外部SDRAM,当程序大于4KB时,要复制4KB后的代码,就需要使用NAND Flash控制器。

<a href="http://down.51cto.com/data/2387742">实验代码</a>

本文转自 梦想成大牛 51CTO博客,原文链接:http://blog.51cto.com/yinsuifeng/2062029,如需转载请自行联系原作者