您的位置 首页 解答

2440初始化存储器原理(接上一篇)

JLInk调试加载的执行初始化存储器脚本(2440)Setmem0x530000000x0000000032Setmem0x4A0000080xFFFFFFFF32Setmem0x4A00001…

JLInk 调试加载的履行初始化存储器脚本(2440

Setmem 0x53000000 0x00000000 32
Setmem 0x4A000008 0xFFFFFFFF 32
Setmem 0x4A00001C 0x000007FF 32
Setmem 0x53000000 0x00000000 32
Setmem 0x56000050 0x000055AA 32
Setmem 0x4C000014 0x00000007 32
Setmem 0x4C000000 0x00FFFFFF 32
Setmem 0x4C000004 0x00061012 32
Setmem 0x4C000008 0x00040042 32
Setmem 0x48000000 0x22111120 32
Setmem 0x48000004 0x00002F50 32
Setmem 0x48000008 0x00000700 32
Setmem 0x4800000C 0x00000700 32
Setmem 0x48000010 0x00000700 32
Setmem 0x48000014 0x00000700 32
Setmem 0x48000018 0x0007FFFC 32
Setmem 0x4800001C 0x00018005 32
Setmem 0x48000020 0x00018005 32
Setmem 0x48000024 0x008E0459 32
Setmem 0x48000028 0x00000032 32
Setmem 0x4800002C 0x00000030 32
Setmem 0x48000030 0x00000030 32

原理:

1、什么是存储操控器

存储操控器是创建和操控其他存储设备的一种设备。S3C2440中存储操控器的开端地址为0x48000000完毕地址为0x48000030。通过装备存储操控器供给的13个寄存器的详细数值来到达拜访外围设备的意图。

2、怎么得到外围设备的拜访地址

在阐明得到外围设备地址之前,先阐明一下什么是片选信号。读过微机原理的同志应该很清楚了。

在S3C2440中分为nGCS0~nGCS7,共8个片选信号。别离对应了BANK0~BANK7,当需求拜访外围设备的空间时(即拜访BANKx 时),nGCSx 引脚输出低电平信号,这样挑选相对应的BANKx外围设备来拜访。(注:nGCS0~nGCS7在S3C2440手册中能够查找到相应的地址分配表)

BANK拜访地址=BANK开端地址+地址线地址。

3、存储操控器中寄存器的运用

3.1、存储操控器供给的13个寄存器

BWSCON,BANKCONx(x=0~7),REFRESH,BANKSIZE,MRSRBx(x=6~7),共13个寄存器。在这些寄存器的装备中,当装备BANK0~BANK5的时分,只需求装备BWSCON和BANKCONx(x=0~5)即可。因为BANK6和BANK7嘤糜谕饨覵DRAM,所以装备的时分除装备BWSCON和BANKCONx(x=6~7)外,还需求装备REFRESH,BANKSIZE,MRSRB6和MRSRB7等4个寄存器。

BWSCON(R/WBusWidth & WaitStatusControl,位宽和等候寄存器)

BWSCON共32位,BWSCON的高4位对应了外设的BANK7,可是BWSCON是每4位对应一个BANK,所以顺次类推能够得到其他BANK6~BANK0的对应位数。

STx(x= 0~7):发动/制止SDRAM数据掩码引脚。关于SDRAM此位为0,关于SRAM此位为1。一般为0。

WSx(x= 0~7):是否运用存储器的WAIT信号。一般设为0。 /*0 = WAIT disable*/

DWx(x= 0~7):用2位来设置对应BANK位宽(数据总线宽度),00=8-bit;01=16-bit;10=32-bit;11=reserved

其间,比较特别的BANK0,它没有ST0和WS0,且DW0[2:1]为只读,由硬件电路跳线决议01=16-bit;10=32-bit。

BANKCONx(x= 0~5):用来操控外接设备的拜访时序,默认设置0X0700能够满意运用需求。

BANKCONx(x= 6~7):只要BANK6和BANK7能够用来外接SRAM或SDRAM,所以在装备BANK6~BANK7会有所不同。

MT[16:15]位:用来标识外接的设备是ROM/SRAM,仍是SDRAM。 /*00 = ROM or SRAM;01 = Reserved;10 = Reserved;11 = Sync.DRAM */

当MT=0b00时(即外接ROM):此刻设置与BANKCONx(x= 0~5)并无多大差异。

当MT=0b11时(即外接SDRAM):

Trcd[3:2]:Time ofRAS toCASdelay(内存行地址传输到列地址的延迟时刻) /*00 = 2 clocks;01 = 3 clocks;10 = 4 clocks*/

SCAN[1:0]:表明SDRAM列的地址,可依据详细芯片状况设置 /*00 = 8-bit;01 = 9-bit;10= 10-bit*/

REFRESH:改写操控寄存器。

REFEN[23]:使能操控SDRAM改写功用。/*0 = Disable;1 = Enable (self or CBR/auto refresh)*/

TREFMD[22]:SDRAM改写形式。/*0 = CBR/Auto Refresh;1 = Self Refresh (休眠形式)*/

Trp[21:20]:Time of SDRAMRASpre-charge(RAS预充电时刻)。/*00 = 2 clocks;01 = 3 clocks;10 = 4 clocks;11 = Not support*/

Tsrc[19:18]:Time of SDRAMSemiRowcycle(半行周期时刻)。/*00 = 4 clocks;01 = 5 clocks;10 = 6 clocks;11 = 7 clocks*/ 注:Reserved[17:11]:Not used.

Refresh Counter[10:0]:SDRAM refresh count value(改写计数值)。

BANKSIZE寄存器:

BURST_EN[7]:ARM coreburstoperation enable(ARM内中心突发操作使能)。/*0 = Disable burst operation;1 = Enable burst operation*/ 注:Reserved[6]:Not used.

SCKE_EN[5]:SDRAM power down mode enable control bySCKE。(SCKE power down形式使能)/*0 = SDRAM power down mode disable;1 = SDRAM power down mode enable*/

SCLK_EN[4]:SCLK is enabled only during SDRAM access cycle for reducing power consumption. When SDRAM is not accessed SCLK becomes L level(低电平). /*0 = SCLK is always active. 1 = SCLK is active only during the access (recommended).*/注:Reserved[3]:Not used.

BK76MAP[2:0]:设置BANK6~BANK7的巨细。/* 010 = 128MB/128MB;001 = 64MB/64MB;000 = 32M/32M;111 = 16M/16M;110 = 8M/8M;101 = 4M/4M;100 = 2M/2M */

MRSRBx(x= 6~7):SDRAM形式设置寄存器。

能做修正的只要CL[6:4]:代表SDRAM时序的一些参数。 /*000 = 1 clock;010 = 2 clocks;011=3 clocks;Others: reserved*/

2410内存操控器介绍(BWSCON)

http://blogold.chinaunix.net/u1/59572/showart_1914422.html

下面先转载手册关于内存操控器根本特色的概述:

— 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

bank6和bank7的巨细有必要相同,而且bank7的开端地址依据bank6的巨细不同而不同

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

bank0(nGCS0)数据总线宽度由OM[1:0]决议:

OM[1:0]= 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每四位为一组,操控着bank0到bank7,以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]位,主要是操控读写时序各个参数的巨细,如:Tacs,Tcos等。关于bank6和bank7,还要运用到[16:15]两位,用来操控bank6和bank7的存储形式,00表明运用rom或sram存储,11表明运用sdram存储。

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

2.BANKCON0-BANKCON5:咱们没用到,运用默认值0x00000700即可

3.BANKCON6-BANKCON7:设为0x00018005

在8个BANK中,只要BANK6和BANK7能够运用SRAM或SDRAM,所以BANKCON6-7与BANKCON0-5有点不同:

a.MT([16:15]):用于设置本BANK外接的是SRAM仍是SDRAM:SRAM-0b00,SDRAM-0b11

b.当MT=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时钟频率等于晶振频率12MHz;SDRAM的改写周期在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]=1:Enable burst operation

位[5]=1:SDRAM power down mode enable

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

位[2:1]=010:BANK6、BANK7对应的地址空间与BANK0-5不同。BANK0-5的地址空间都是固定的128M,地址规模是 (x*128M)到(x+1)*128M-1,x表明0到5。可是BANK7的开端地址是可变的,您能够从S3C2410数据手册第5章“Table 5-1. Bank 6/7 Addresses”中了解到BANK6、7的地址规模与地址空间的联系。本开发板仅运用BANK6的64M空间,咱们能够令位 [2:1]=010(128M/128M)或001(64M/64M):这没联系,多出来的空间程序会检测出来,不会产生运用不存在的内存的状况——后边 介绍到的bootloader和linux内核都会作内存检测。

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

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

MRSRB6地址0x4800002C

MRSRB7 地址0x48000030

能让咱们修正的只要位[6:4](CL),SDRAM HY57V561620CT-H不支持CL=1的状况,所以位[6:4]取值为010(CL=2)或011(CL=3)。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/jieda/276555.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部