<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 2440初始化存儲器原理(接上一篇)

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

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

JLInk 調試加載的執行初始化存儲器腳本(2440

本文引用地址:http://dyxdggzs.com/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、什么是存儲控制器

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

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

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

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

BANK訪(fǎng)問(wèn)地址=BANK起始地址+地址線(xiàn)地址。

3、存儲控制器中寄存器的使用

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

BWSCON,BANKCONx(x=0~7),REFRESH,BANKSIZE,MRSRBx(x=6~7),共13個(gè)寄存器。在這些寄存器的配置中,當配置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位對應了外設的BANK7,然而B(niǎo)WSCON是每4位對應一個(gè)BANK,所以依次類(lèi)推可以得到其余BANK6~BANK0的對應位數。

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

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

DWx(x= 0~7):用2位來(lái)設置對應BANK位寬(數據總線(xiàn)寬度),00=8-bit;01=16-bit;10=32-bit;11=reserved

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

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

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

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

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

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

Trcd[3:2]:Time ofRAS toCASdelay(內存行地址傳輸到列地址的延遲時(shí)間) /*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預充電時(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(刷新計數值)。

BANKSIZE寄存器:

BURST_EN[7]:ARM coreburstoperation enable(ARM內核心突發(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]:設置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時(shí)序的一些參數。 /*000 = 1 clock;010 = 2 clocks;011=3 clocks;Others: reserved*/

2410內存控制器介紹(BWSCON)

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

下面先轉載手冊對于內存控制器基本特點(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的起始地址根據bank6的大小不同而不同

復位后S3C2410A的存儲器映射圖如下:

bank0(nGCS0)數據總線(xiàn)寬度由OM[1:0]決定:

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

01 16位

10 32位

11 測試模式

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

圖2 帶nWAIT 信號的總線(xiàn)讀操作


相關(guān)的寄存器

數據寬度和等待控制寄存器:

BWSCON地址0x48000000

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

ST7:?jiǎn)?dòng)/禁止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:使用兩位來(lái)設置存儲器的位寬:00-8位,01-16位,10-32位,11-保留。

其他個(gè)bank與此一樣,比較特殊的是bank0對應的4位,它們由硬件跳線(xiàn)決定,只讀。

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è)參數的大小,如:Tacs,Tcos等。對于bank6和bank7,還要使用到[16:15]兩位,用來(lái)控制bank6和bank7的存儲模式,00表示使用rom或sram存儲,11表示使用sdram存儲。

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

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

3.BANKCON6-BANKCON7:設為0x00018005

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

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

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

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

SCAN([1:0]):SDRAM的列地址位數,對于本開(kāi)發(fā)板使用的SDRAM HY57V561620CT-H,列地址位數為9,所以SCAN=0b01。如果使用其他型號的SDRAM,您需要查看它的數據手冊來(lái)決定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時(shí)鐘頻率就是HCLK):

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

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

對于本實(shí)驗,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存取周期內允許,當SDRAM不進(jìn)行

存取時(shí),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的地址范圍與地址空間的關(guān)系。本開(kāi)發(fā)板僅使用BANK6的64M空間,我們可以令位 [2:1]=010(128M/128M)或001(64M/64M):這沒(méi)關(guān)系,多出來(lái)的空間程序會(huì )檢測出來(lái),不會(huì )發(fā)生使用不存在的內存的情況——后面 介紹到的bootloader和linux內核都會(huì )作內存檢測。

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

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

MRSRB6地址0x4800002C

MRSRB7 地址0x48000030

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




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

評論


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

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>