2440内存管理
title: 2440內(nèi)存管理
tags: ARM
date: 2018-10-17 19:08:49
---
2440內(nèi)存管理
特性
大/小端(通過(guò)軟件選擇)
地址空間:每個(gè) Bank 有 128M 字節(jié)(總共 1G/8 個(gè) Bank)
除了 BANK0(16/32 位)之外【引導(dǎo)ROM,其總線寬度由硬件接線決定,在第一個(gè) ROM 訪問(wèn)前決定 BANK0 的總線寬度】,其它全部 BANK 都可編程訪問(wèn)寬度(8/16/32 位)
所有存儲(chǔ)器 Bank 的訪問(wèn)周期可編程
外部等待擴(kuò)展總線周期
支持 SDRAM 自刷新和掉電模式
總共 8 個(gè)存儲(chǔ)器 Bank
- 6 個(gè)存儲(chǔ)器 Bank 為 ROM,SRAM 等
- 其余 2 個(gè)存儲(chǔ)器 Bank 為 ROM,SRAM,SDRAM 等
7 個(gè)固定的存儲(chǔ)器 Bank 起始地址
1 個(gè)可變的存儲(chǔ)器 Bank 起始地址并 Bank 大小可編程
- bank7,為了與bank6組成雙通道,所以其起始地址是bank6地址的尾地址,bank6=bank7大小
內(nèi)存地址分配
工作方式
GPIO/門(mén)電路接口、協(xié)議類(lèi)接口、內(nèi)存類(lèi)接口都屬于CPU的統(tǒng)一編址內(nèi)存控制器根據(jù)不同的地址地址范圍,發(fā)出不同的片選引腳.比如當(dāng)CPU發(fā)出的指令的地址范圍處于0x20000000 - 0x28000000,內(nèi)存控制器就會(huì)使nGCS4處于低電平.
對(duì)于Nand Flash,在原理圖上它的地址線并沒(méi)有連接到CPU,因此它不參與CPU的統(tǒng)一編址。但它的數(shù)據(jù)線也接到了數(shù)據(jù)總線上,為了防止干擾,它也有一個(gè)片選信號(hào)(CE)。當(dāng)CPU訪問(wèn)Nand Flash時(shí),Nand Flash控制器才會(huì)片選Nand Flash,讓其接收數(shù)據(jù)總線上的數(shù)據(jù)。
位寬與基址
位寬分為8/16/32,程序的最小存儲(chǔ)單位為1個(gè)字節(jié)也就是8位寬.假設(shè)地址信號(hào)為【An,An-1......A3,A2,A1,A0】
| 8 | 【An,An-1......A3,A2,A1,A0】 | |
| 16 | 【An,An-1......A3,A2,A1】 | |
| 32 | 【An,An-1......A2】 |
所謂位寬,也就是一個(gè)存儲(chǔ)單元存儲(chǔ)了幾個(gè)位.比如32位的,也就是一次取值是4字,地址序列為[0,4,8,12]>[0b0000,0000>0b0000,0100>0b0000,1000>0b0000,1100],也就是低2位為0.
基址,也就是片選信號(hào)在哪里,基址就在哪里.
尋址范圍
尋址范圍與位寬無(wú)關(guān),只與地址線有關(guān).比如接了[A0,A2],那么就能尋址[0,1,4,5]也就是尋址[0--5].如果地址線是[A0--A20],尋址到[0----2^21]也就是2M
引腳描述
- nWE OUTPUT nWE (Write Enable) indicates that the current bus cycle is a write cycle.
- nOE OUTPUT nOE (Output Enable) indicates that the current bus cycle is a read cycle.
- nWAIT INPUT nWAIT requests to prolong a current bus cycle. As long as nWAIT is L, the
current bus cycle cannot be completed.
內(nèi)存接口的時(shí)序
NorFLASH
開(kāi)發(fā)板使用的NORFLASH是MX29LV160DBTI,2M大小,接在nGCS0,所以基址是0.
Taa 地址信號(hào)Taa后數(shù)據(jù)有效70ns Tce 片選信號(hào)后Tce后數(shù)據(jù)有效70ns Toe 數(shù)據(jù)在Oe后Toe后有效30ns Toh 數(shù)據(jù)保持時(shí)間0ns Tdf 在Tdf內(nèi)數(shù)據(jù)不穩(wěn)定,也就是不允許訪問(wèn)其他芯片,30ns一般不需要理會(huì)這個(gè),因?yàn)樵俅卧L問(wèn)的時(shí)候,還需要時(shí)序前面的Taa等,等到穩(wěn)定的時(shí)候,數(shù)據(jù)已經(jīng)穩(wěn)定了 Trc 讀周期時(shí)間,最小70ns,也就是速度性能 70ns為了簡(jiǎn)單把地址數(shù)據(jù)(Addresses),片選信號(hào)(CE#),讀信號(hào)(OE#),同時(shí)發(fā)出,然后讓它們都等待70ns(等待信號(hào)有效)。對(duì)應(yīng)S3C2440的Nor Flash控制器的讀時(shí)序圖,需要讓地址信號(hào)A[24:0]、片選信號(hào)nGCS、讀信號(hào)nOE同時(shí)發(fā)出,保持Tacc大于等于70ns。然后設(shè)置讀之后的那些時(shí)序tdf,toh為0[因?yàn)橄乱淮问褂脮?huì)又有片選的70ns]
位寬設(shè)置
為什么上電就能使用NOR
這里的Tacc默認(rèn)值是111最大值為14個(gè)時(shí)鐘,這也是為什么我們不用設(shè)置NORFLASH就能開(kāi)機(jī)使用.上電的時(shí)候是使用晶振12M,也就是tacc=14*Hclk=1/12M*14=1166ns>70ns
設(shè)置寄存器
- BWSCON中Bank0不需要設(shè)置
- 將HCLK設(shè)置為100MHz,T=1000/100=10ns,Tacc需要大于等于70ns,因此設(shè)置Tacc等于101,8個(gè)clocks即可。
- BANKCONn其他位不需要設(shè)置,保持0,也就是說(shuō)將地址、片選、地址同時(shí)發(fā)出,讀后不保持時(shí)間.
測(cè)試:燒錄到NOR啟動(dòng),實(shí)際測(cè)了一下使用5個(gè)周期都是可以的
SDRAM
內(nèi)存知識(shí)補(bǔ)遺
SDRAM學(xué)習(xí)筆記(二)
- P-Bank, 物理位寬,要等同于CPU的數(shù)據(jù)總線寬度,也是北橋內(nèi)存總線寬度,適用于SDRAM以及以前產(chǎn)品,在RDRAM中以通道代替
- SDRAM synchronous Dynamic Random Access Memory 同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器
- SIMM single In-line Memory moudle 單列內(nèi)存模組
- DIMM double in-line Memory moudle 雙列內(nèi)存模組
- SDRAM 芯片位寬 SDRAM芯片的數(shù)據(jù)總線
- 內(nèi)存顆粒==內(nèi)存芯片
- L-bank logic bank ,SDRAM芯片內(nèi)部的bank,一般4個(gè)
- 內(nèi)存芯片容量=行*列*L-bank*位寬
- 引腳
- Dqn 數(shù)據(jù)總線
- An 行列地址線
- DQM 數(shù)據(jù)掩碼
- CAS# 列選中
- RAS# 行選中
- CK 時(shí)鐘信號(hào)
- CKE 時(shí)鐘有效
- Ban L-bank線
- WE# 寫(xiě)有效
使用簡(jiǎn)介
首先器件上電----對(duì)SDRAM進(jìn)行初始化(因?yàn)閮?nèi)部有邏輯電路部分,狀態(tài)機(jī)部分)----對(duì)SDRAM進(jìn)行200us的穩(wěn)定期(參數(shù)INIT_PER)----預(yù)充電,對(duì)所有的L-Bank進(jìn)行預(yù)充電(預(yù)充電時(shí)間間隔tRP)----8個(gè)預(yù)先刷新周期(手冊(cè)規(guī)定至少2個(gè)周期來(lái)刷新邏輯塊,在設(shè)計(jì)中一般直接給8個(gè)周期,參數(shù)REF_PER)----模式寄存器的配置(行選通周期參數(shù)tRCD,由于SDRAM內(nèi)部結(jié)構(gòu)導(dǎo)致更新存儲(chǔ)陣列需要時(shí)間---數(shù)據(jù)輸出延時(shí)時(shí)間tCL---突發(fā)長(zhǎng)度BL設(shè)置) https://www.cnblogs.com/raymon-tec/p/5147217.html
初始化協(xié)商 MSR 模式寄存器
SDRAM 在上電的時(shí)候需要BIOS對(duì)其初始化設(shè)置MSR 模式,也就是協(xié)商一些參數(shù),下圖是板載的模式字
- 操作模式
- CAS 潛伏期 列地址潛伏期,設(shè)置后發(fā)送列地址后cas周期后發(fā)送數(shù)據(jù)
- BT 突發(fā)傳輸模式
- BL 突發(fā)長(zhǎng)度
尋址
[(允許同時(shí))CS片選,L-bank選擇,行有效]列有效
數(shù)據(jù)讀
有個(gè)參數(shù) CAS Latency,CAS 潛伏期=又被稱(chēng)為讀取潛伏期(RL,Read Latency),這個(gè)在初始化時(shí)設(shè)定
數(shù)據(jù)寫(xiě)
注意參數(shù) twr 回寫(xiě)時(shí)間
突發(fā)模式
連續(xù)讀取,只需要發(fā)送起始列地址,BL在協(xié)商的時(shí)候規(guī)定了
板載SDRAM
JZ2440連接的是EM63A165TS-6G,其規(guī)格是16M x 16 bit=32M,兩通道也就是64M
4M word x 16-bit x 4-bank,說(shuō)明內(nèi)部4個(gè)bank,位寬16
CLK CKE Clock Enable,時(shí)鐘使能 BA0,BA1 Bank Activate,Bank選擇 A0-A12 Address Inputs,Row(行)=A0-A12,column= A0-A8 with A10Duringa Precharge command, A10 is sampled to determine if all banks are to be precharged(A10 = HIGH). CS# Chip Select RAS# Row Address Strobe: CAS# Column Address Strobe WE# Write Enable LDQM,UDQM Data Input/Output Mask 掩碼 DQ0-DQ15 Data I/O地址計(jì)算
行=A0~A12,列=A0~A8,16位位寬,一個(gè)單元兩個(gè)字節(jié),4個(gè)Bank,所以1個(gè)bank=2^13*2^9*2/1024/1024=8M,4個(gè)Bank=32M.
32位尋址,所以要忽略CPU2440的低兩位地址線[0,1]
bank線如何確認(rèn)?總共是雙通道,32位位寬,所以實(shí)際上選中一個(gè)bank其實(shí)是選中了兩個(gè)物理的Bank=16M=2^24,所以地址線在[24,25],或者也可以這么理解
尋址64M,4個(gè)片選也就是64/4=16M,16M=2^(20+4),所以0->2^23=16M,其再高1位就是24線了BANK6的起始地址為0x30000000,所以SDRAM的訪問(wèn)地址為0x30000000~低0x33FFFFFF,共64MB
程序設(shè)計(jì)
時(shí)序參數(shù)
板子只用到了Bank6的片選,BANK0--BANK5只需要設(shè)置BWSCON和BANKCONx(x為0~5)兩個(gè)寄存器;BANK6、BANK7外接SDRAM時(shí),除BWSCON和BANKCONx(x為6、7)外,還要設(shè)置REFRESH、BANKSIZE、MRSRB6、MRSRB7等4個(gè)寄存器。
void sdram_init(void) {BWSCON = 0x22000000; //選擇sdram,32位寬BANKCON6 = 0x17001; //時(shí)間參數(shù)BANKCON7 = 0x17001;REFRESH = 0x8404f5; //刷新周期BANKSIZE = 0xb1; //size=64MMRSRB6 = 0x20; //CASMRSRB7 = 0x20; }//測(cè)試SDRAM地址 int sdram_test(void) {volatile unsigned char *p = (volatile unsigned char *)0x30000000;int i;// write sdramfor (i = 0; i < 1000; i++)p[i] = 0x55;// read sdramfor (i = 0; i < 1000; i++)if (p[i] != 0x55)return -1;return 0; }轉(zhuǎn)載于:https://www.cnblogs.com/zongzi10010/p/10023594.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
- 上一篇: c++心形代码_c语言心形告白代码实现
- 下一篇: 快手did did_gt edid的注册