新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 2440初始化存儲(chǔ)器原理(接上一篇)

2440初始化存儲(chǔ)器原理(接上一篇)

作者: 時(shí)間:2016-11-09 來(lái)源:網(wǎng)絡(luò) 收藏

JLInk 調(diào)試加載的執(zhí)行初始化存儲(chǔ)器腳本(2440

本文引用地址:http://butianyuan.cn/article/201611/317613.htm

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、什么是存儲(chǔ)控制器

存儲(chǔ)控制器是創(chuàng)建和控制其他存儲(chǔ)設(shè)備的一種設(shè)備。S3C2440中存儲(chǔ)控制器的起始地址為0x48000000結(jié)束地址為0x48000030。通過(guò)配置存儲(chǔ)控制器提供的13個(gè)寄存器的具體數(shù)值來(lái)達(dá)到訪問(wèn)外圍設(shè)備的目的。

2、如何得到外圍設(shè)備的訪問(wèn)地址

在說(shuō)明得到外圍設(shè)備地址之前,先說(shuō)明一下什么是片選信號(hào)。讀過(guò)微機(jī)原理的同志應(yīng)該很清楚了。

在S3C2440中分為nGCS0~nGCS7,共8個(gè)片選信號(hào)。分別對(duì)應(yīng)了BANK0~BANK7,當(dāng)需要訪問(wèn)外圍設(shè)備的空間時(shí)(即訪問(wèn)BANKx 時(shí)),nGCSx 引腳輸出低電平信號(hào),這樣選擇相對(duì)應(yīng)的BANKx外圍設(shè)備來(lái)訪問(wèn)。(注:nGCS0~nGCS7在S3C2440手冊(cè)中可以查找到相應(yīng)的地址分配表)

BANK訪問(wèn)地址=BANK起始地址+地址線地址。

3、存儲(chǔ)控制器中寄存器的使用

3.1、存儲(chǔ)控制器提供的13個(gè)寄存器

BWSCON,BANKCONx(x=0~7),REFRESH,BANKSIZE,MRSRBx(x=6~7),共13個(gè)寄存器。在這些寄存器的配置中,當(dāng)配置BANK0~BANK5的時(shí)候,只需要配置BWSCON和BANKCONx(x=0~5)即可。由于BANK6和BANK7嚶糜諭飩覵DRAM,所以配置的時(shí)候除配置BWSCON和BANKCONx(x=6~7)外,還需要配置REFRESH,BANKSIZE,MRSRB6和MRSRB7等4個(gè)寄存器。

BWSCON(R/WBusWidth & WaitStatusControl,位寬和等待寄存器)

BWSCON共32位,BWSCON的高4位對(duì)應(yīng)了外設(shè)的BANK7,然而B(niǎo)WSCON是每4位對(duì)應(yīng)一個(gè)BANK,所以依次類(lèi)推可以得到其余BANK6~BANK0的對(duì)應(yīng)位數(shù)。

STx(x= 0~7):?jiǎn)?dòng)/禁止SDRAM數(shù)據(jù)掩碼引腳。對(duì)于SDRAM此位為0,對(duì)于SRAM此位為1。一般為0。

WSx(x= 0~7):是否使用存儲(chǔ)器的WAIT信號(hào)。通常設(shè)為0。 /*0 = WAIT disable*/

DWx(x= 0~7):用2位來(lái)設(shè)置對(duì)應(yīng)BANK位寬(數(shù)據(jù)總線寬度),00=8-bit;01=16-bit;10=32-bit;11=reserved

其中,比較特殊的BANK0,它沒(méi)有ST0和WS0,且DW0[2:1]為只讀,由硬件電路跳線決定01=16-bit;10=32-bit。

BANKCONx(x= 0~5):用來(lái)控制外接設(shè)備的訪問(wèn)時(shí)序,默認(rèn)設(shè)置0X0700可以滿足使用需求。

BANKCONx(x= 6~7):只有BANK6和BANK7可以用來(lái)外接SRAM或SDRAM,所以在配置BANK6~BANK7會(huì)有所不同。

MT[16:15]位:用來(lái)標(biāo)識(shí)外接的設(shè)備是ROM/SRAM,還是SDRAM。 /*00 = ROM or SRAM;01 = Reserved;10 = Reserved;11 = Sync.DRAM */

當(dāng)MT=0b00時(shí)(即外接ROM):此時(shí)設(shè)置與BANKCONx(x= 0~5)并無(wú)多大差異。

當(dāng)MT=0b11時(shí)(即外接SDRAM):

Trcd[3:2]:Time ofRAS toCASdelay(內(nèi)存行地址傳輸?shù)搅械刂返难舆t時(shí)間) /*00 = 2 clocks;01 = 3 clocks;10 = 4 clocks*/

SCAN[1:0]:表示SDRAM列的地址,可根據(jù)具體芯片情況設(shè)置 /*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預(yù)充電時(shí)間)。/*00 = 2 clocks;01 = 3 clocks;10 = 4 clocks;11 = Not support*/

Tsrc[19:18]:Time of SDRAMSemiRowcycle(半行周期時(shí)間)。/*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(刷新計(jì)數(shù)值)。

BANKSIZE寄存器:

BURST_EN[7]:ARM coreburstoperation enable(ARM內(nèi)核心突發(fā)操作使能)。/*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]:設(shè)置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模式設(shè)置寄存器。

能做修改的只有CL[6:4]:代表SDRAM時(shí)序的一些參數(shù)。 /*000 = 1 clock;010 = 2 clocks;011=3 clocks;Others: reserved*/

2410內(nèi)存控制器介紹(BWSCON)

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

下面先轉(zhuǎn)載手冊(cè)對(duì)于內(nèi)存控制器基本特點(diǎn)的概述:

— 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的起始地址根據(jù)bank6的大小不同而不同

復(fù)位后S3C2410A的存儲(chǔ)器映射圖如下:

bank0(nGCS0)數(shù)據(jù)總線寬度由OM[1:0]決定:

OM[1:0]= 00 Nand Flash 模式

01 16位

10 32位

11 測(cè)試模式

2)以圖2(帶nWAIT信號(hào))為例,描述一下處理器的總線的讀操作過(guò)程,來(lái)說(shuō)明Flash整體讀、寫(xiě)的流程。第一個(gè)時(shí)鐘周期開(kāi)始,系統(tǒng)地址總線給出需要訪問(wèn)的存儲(chǔ)空間地址,經(jīng)過(guò)Tacs時(shí)間后,片選信號(hào)也相應(yīng)給出(鎖存當(dāng)前地址線上地址信息),再經(jīng)過(guò)Tcso時(shí)間后,處理器給出當(dāng)前操作是讀(nOE為低)還是寫(xiě)(new為低),并在Tacc時(shí)間內(nèi)將數(shù)據(jù)數(shù)據(jù)準(zhǔn)備好放之總線上,Tacc時(shí)間后(并查看nWAIT信號(hào),為低則延長(zhǎng)本次總線作y一個(gè)時(shí)鐘周期),nOE 拉高,鎖存數(shù)據(jù)線數(shù)據(jù)。這樣一個(gè)總線操作就基本完成

圖2 帶nWAIT 信號(hào)的總線讀操作


相關(guān)的寄存器

數(shù)據(jù)寬度和等待控制寄存器:

BWSCON地址0x48000000

BWSCON每四位為一組,控制著bank0到bank7,以bank7為例這四位分別為:ST7[31],WS7[30],DW7[29,28]

ST7:?jiǎn)?dòng)/禁止SDRAM的數(shù)據(jù)掩碼引腳,對(duì)于SDRAM,此位為0;對(duì)于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:是否使用存儲(chǔ)器的WAIT信號(hào),通常設(shè)為0

DW7:使用兩位來(lái)設(shè)置存儲(chǔ)器的位寬:00-8位,01-16位,10-32位,11-保留。

其他個(gè)bank與此一樣,比較特殊的是bank0對(duì)應(yīng)的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]位,主要是控制讀寫(xiě)時(shí)序各個(gè)參數(shù)的大小,如:Tacs,Tcos等。對(duì)于bank6和bank7,還要使用到[16:15]兩位,用來(lái)控制bank6和bank7的存儲(chǔ)模式,00表示使用rom或sram存儲(chǔ),11表示使用sdram存儲(chǔ)。

對(duì)于本開(kāi)發(fā)板,使用兩片容量為32Mbyte、位寬為16的SDRAM組成容量為64Mbyte、位寬為32的存儲(chǔ)器,所以其BWSCON相應(yīng)位 為:0010。對(duì)于本開(kāi)發(fā)板,BWSCON可設(shè)為0x22111110:其實(shí)我們只需要將BANK6對(duì)應(yīng)的4位設(shè)為0010即可,其它的是什么值沒(méi)什么影 響,這個(gè)值是參考手冊(cè)上給出的。

2.BANKCON0-BANKCON5:我們沒(méi)用到,使用默認(rèn)值0x00000700即可

3.BANKCON6-BANKCON7:設(shè)為0x00018005

在8個(gè)BANK中,只有BANK6和BANK7可以使用SRAM或SDRAM,所以BANKCON6-7與BANKCON0-5有點(diǎn)不同:

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

b.當(dāng)MT=0b11時(shí),還需要設(shè)置兩個(gè)參數(shù):

Trcd([3:2]):RAS to CAS delay,設(shè)為推薦值0b01

SCAN([1:0]):SDRAM的列地址位數(shù),對(duì)于本開(kāi)發(fā)板使用的SDRAM HY57V561620CT-H,列地址位數(shù)為9,所以SCAN=0b01。如果使用其他型號(hào)的SDRAM,您需要查看它的數(shù)據(jù)手冊(cè)來(lái)決定SCAN的取值:00-8位,01-9位,10-10位

REFRESH控制寄存器:

REFRESH地址:x48000024

REFRESH(SDRAM refresh control register):設(shè)為0x008e0000+ R_CNT

地址0其中R_CNT用于控制SDRAM的刷新周期,占用REFRESH寄存器的[10:0]位,它的取值可如下計(jì)算(SDRAM時(shí)鐘頻率就是HCLK):

R_CNT = 2^11 + 1 – SDRAM時(shí)鐘頻率(MHz) * SDRAM刷新周期(uS)

在未使用PLL時(shí),SDRAM時(shí)鐘頻率等于晶振頻率12MHz;SDRAM的刷新周期在SDRAM的數(shù)據(jù)手冊(cè)上有標(biāo)明,在本開(kāi)發(fā)板使用的SDRAM HY57V561620CT-H的數(shù)據(jù)手冊(cè)上,可看見(jiàn)這么一行“8192 refresh cycles / 64ms”:所以,刷新周期=64ms/8192 = 7.8125 uS。

對(duì)于本實(shí)驗(yàn),R_CNT = 2^11 + 1 – 12 * 7.8125 = 1955,

REFRESH=0x008e0000 + 1955 = 0x008e07a3

BANKSIZE寄存器:

BANKSIZE 地址0x48000028

BURST_EN [7] ARM核突發(fā)操作允許

0--禁止突發(fā)操作

1--允許突發(fā)操作

Reserved[6] 不使用

SCKE_EN [5] SCKE允許控制

0=SDRAM SCKE 禁止

1=SDRAM SCKE 允許

SCLK_EN [4] SCLK僅在減少功耗期間SDRAM存取周期內(nèi)允許,當(dāng)SDRAM不進(jìn)行

存取時(shí),SCLK變L電平

0=SCLK總是激活

1=SDRAM僅在存取期間激活(推薦)

Reserved[3] 不使用

BK76MAP[2:0] BANK6/7存儲(chǔ)映射

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對(duì)應(yīng)的地址空間與BANK0-5不同。BANK0-5的地址空間都是固定的128M,地址范圍是 (x*128M)到(x+1)*128M-1,x表示0到5。但是BANK7的起始地址是可變的,您可以從S3C2410數(shù)據(jù)手冊(cè)第5章“Table 5-1. Bank 6/7 Addresses”中了解到BANK6、7的地址范圍與地址空間的關(guān)系。本開(kāi)發(fā)板僅使用BANK6的64M空間,我們可以令位 [2:1]=010(128M/128M)或001(64M/64M):這沒(méi)關(guān)系,多出來(lái)的空間程序會(huì)檢測(cè)出來(lái),不會(huì)發(fā)生使用不存在的內(nèi)存的情況——后面 介紹到的bootloader和linux內(nèi)核都會(huì)作內(nèi)存檢測(cè)。

位[6]、位[3]沒(méi)有使用

SDRAM模式寄存器設(shè)置寄存器(MRSR):

MRSRB6地址0x4800002C

MRSRB7 地址0x48000030

能讓我們修改的只有位[6:4](CL),SDRAM HY57V561620CT-H不支持CL=1的情況,所以位[6:4]取值為010(CL=2)或011(CL=3)。




關(guān)鍵詞: 2440初始化存儲(chǔ)

評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉