Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3312884
  • 博文数量: 754
  • 博客积分: 10132
  • 博客等级: 上将
  • 技术积分: 7780
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-14 23:36
文章分类

全部博文(754)

文章存档

2012年(3)

2011年(39)

2010年(66)

2009年(167)

2008年(479)

我的朋友

分类: LINUX

2009-04-29 16:54:17

下面先转载手册对于内存控制器基本特点的概述:

 

— Little/Big endian (selectable by a software)

— Address space: 128Mbytes per bank (total 1GB/8 banks)

— Programmable access size (8/16/32-bit) for all banks except bank0 (16/32-bit)

— Total 8 memory banks

Six memory banks for ROM, SRAM, etc.

       Remaining two memory banks for ROM, SRAM, SDRAM, etc .

— Seven fixed memory bank start address

— One flexible memory bank start address and programmable bank size

— Programmable access cycles for all memory banks

— External wait to extend the bus cycles

Supporting self-refresh and power down mode in SDRAM

bank6bank7的大小必须一样,并且bank7的起始地址根据bank6的大小不同而不同

 

复位后S3C2410A的存储器映射图如下:
 
 

bank0nGCS0)数据总线宽度由OM[10]决定:

OM[10]=   00 Nand Flash 模式

            01 16

            10 32

            11 测试模式

  2
)以图2(nWAIT信号)为例,描述一下处理器的总线的读操作过程,来说明Flash整体读、写的流程。第一个时钟周期开始,系统地址总线给出需要访问的存储空间地址,经过Tacs时间后,片选信号也相应给出(锁存当前地址线上地址信息),再经过Tcso时间后,处理器给出当前操作是读(nOE为低)还是写(new为低),并在Tacc时间内将数据数据准备好放之总线上,Tacc时间后(并查看nWAIT信号,为低则延长本次总线作y一个时钟周期),nOE 拉高,锁存数据线数据。这样一个总线操作就基本完成


 

点击看大图

2  nWAIT 信号的总线读操作

 


 

相关的寄存器

数据宽度和等待控制寄存器:

BWSCON       地址0x48000000

BWSCON每四位为一组,控制着bank0bank7,以bank7为例这四位分别为:ST7[31]WS7[30]DW7[29,28]

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

Determine SRAM for using UB/LB for bank 7.

0 = Not using UB/LB (The pins are dedicated nWBE[3:0])

1 = Using UB/LB (The pins are dedicated nBE[3:0])

nBE[3:0] is the 'AND' signal nWBE[3:0] and nOE.

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

DW7:使用两位来设置存储器的位宽:00-8位,01-16位,10-32位,11-保留。

其他个bank与此一样,比较特殊的是bank0对应的4位,它们由硬件跳线决定,只读。

 

bank控制寄存器(BANKCONN:nGCS0-nGCS5 : reset value: 0x0700

BANKCON0     地址0x48000004

BANKCON1     地址0x48000008

BANKCON2     地址0x4800000C

BANKCON3     地址0x48000010

BANKCON4     地址0x48000014

BANKCON5     地址0x48000018    

BANK控制寄存器(BANKCONN:nGCS6-nGCS7 : reset value: 0x0700

BANKCON6     地址0x4800001C    

BANKCON7     地址0x48000020

 

bank控制寄存器只使用[14:0]位,主要是控制读写时序各个参数的大小,如:TacsTcos等。对于bank6bank7,还要使用到[16:15]两位,用来控制bank6bank7的存储模式,00表示使用romsram存储,11表示使用sdram存储。

 

对于本开发板,使用两片容量为32Mbyte、位宽为16SDRAM组成容量为64Mbyte、位宽为32的存储器,所以其BWSCON相应位 为:0010。对于本开发板,BWSCON可设为0x22111110:其实我们只需要将BANK6对应的4位设为0010即可,其它的是什么值没什么影 响,这个值是参考手册上给出的。

 2BANKCON0-BANKCON5:我们没用到,使用默认值0x00000700即可

 3BANKCON6-BANKCON7:设为0x00018005

8BANK中,只有BANK6BANK7可以使用SRAMSDRAM,所以BANKCON6-7BANKCON0-5有点不同:

  aMT([16:15]):用于设置本BANK外接的是SRAM还是SDRAMSRAM-0b00SDRAM-0b11

  bMT=0b11时,还需要设置两个参数:

Trcd([3:2])RAS to CAS delay,设为推荐值0b01

SCAN([1:0])SDRAM的列地址位数,对于本开发板使用的SDRAM HY57V561620CT-H,列地址位数为9,所以SCAN=0b01。如果使用其他型号的SDRAM,您需要查看它的数据手册来决定SCAN的取值:00-8位,01-9位,10-10

 

REFRESH控制寄存器:

REFRESH      地址:x48000024

REFRESH(SDRAM refresh control register):设为0x008e0000+ R_CNT

地址0其中R_CNT用于控制SDRAM的刷新周期,占用REFRESH寄存器的[10:0]位,它的取值可如下计算(SDRAM时钟频率就是HCLK)

R_CNT = 2^11 + 1 – SDRAM时钟频率(MHz) * SDRAM刷新周期(uS)

在未使用PLL时,SDRAM时钟频率等于晶振频率12MHzSDRAM的刷新周期在SDRAM的数据手册上有标明,在本开发板使用的SDRAM HY57V561620CT-H的数据手册上,可看见这么一行“8192 refresh cycles / 64ms”:所以,刷新周期=64ms/8192 = 7.8125 uS

对于本实验,R_CNT = 2^11 + 1 – 12 * 7.8125 = 1955,

REFRESH=0x008e0000 + 1955 = 0x008e07a3

 

BANKSIZE寄存器:

BANKSIZE     地址0x48000028

BURST_EN    [7]    ARM核突发操作允许

                   0--禁止突发操作

                   1--允许突发操作

Reserved    [6]    不使用

SCKE_EN     [5]    SCKE允许控制

                   0=SDRAM SCKE 禁止

                   1=SDRAM SCKE 允许

SCLK_EN     [4]    SCLK仅在减少功耗期间SDRAM存取周期内允许,当SDRAM不进行

                   存取时,SCLK'L'电平

                   0=SCLK总是激活

                   1=SDRAM仅在存取期间激活(推荐)

Reserved    [3]    不使用

BK76MAP     [2:0]   BANK6/7存储映射

                    010=128MB/128MB    001=64MB/64MB

                    000=32MB/32MB      111=16MB/16MB

                    110=8MB/8MB        101=4MB/4MB

                    100=2MB/2MB

 

[7]=1Enable burst operation

[5]=1SDRAM power down mode enable

[4]=1SCLK is active only during the access (recommended)

[2:1]=010BANK6BANK7对应的地址空间与BANK0-5不同。BANK0-5的地址空间都是固定的128M,地址范围是 (x*128M)(x+1)*128M-1x表示05。但是BANK7的起始地址是可变的,您可以从S3C2410数据手册第5“Table 5-1. Bank 6/7 Addresses”中了解到BANK67的地址范围与地址空间的关系。本开发板仅使用BANK664M空间,我们可以令位 [2:1]=010(128M/128M)001(64M/64M):这没关系,多出来的空间程序会检测出来,不会发生使用不存在的内存的情况——后面 介绍到的bootloaderlinux内核都会作内存检测。

[6]、位[3]没有使用

 

SDRAM模式寄存器设置寄存器(MRSR):

MRSRB6       地址0x4800002C

MRSRB7       地址0x48000030

能让我们修改的只有位[6:4](CL)SDRAM HY57V561620CT-H不支持CL=1的情况,所以位[6:4]取值为010(CL=2)011(CL=3)

阅读(2630) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~