内存初始化

Posted 『流浪的Coder』

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内存初始化相关的知识,希望对你有一定的参考价值。

电容的分类:

DRAM:基本原件是电容,需要定时刷新,存储速度较慢

DRAM又分为:SRAM(同步动态随机存储器synchronous dynamic random access memory)

      DDR(双倍速率同步动态随机存储器double data rate sdram)

      DDR2(在ddr的基础上改进)

SRAM:是一种静止存取功能的内存,不需要定时刷新,存储速度快,缺点是功耗大,成本高,常用作存储容量不高但是存储速度较快的地方(stepping stone:垫脚石

 

 

内存的内部结构是一个如同一个数据表格,称为结构表

 

一般一个内存单元中会被 划分为4L-BANK

 

2440中有27根地址线,可以寻址128M的空间。

2440中将bank7bank6做内存总共64M的内存空间

 

为了寻址更大的空间,2440提供了片选信号,总共有8 个管脚提供8个片选信号

 

 

内存初始化:(CPU对内存的访问时通过存储控制间接访问的)

 

BWSCON:0X48000000(设置外接存储器的总线宽度和等待状态)

总共32位,分成8组,每组4位,分别控制8bank

STX:

0:没有用UB/LB

1:用UB/B

注意:UB/LB pin脚,用来分别访问数据的高低字节

WSX:

总线等待使能,一般是不让其等待的

DWX:

数据线宽度

 

BANKCONn:总共是有6个,其控制字不变,保持其默认值ox00000700

 

BANKCON6:(需要分别设置,16位)

BANKCON7:(需要分别设置,16位)

MT[16:15]:决定存储器类型

Trcd[3:2]:决定是行列信号的转化时间,芯片手册的时序图是两个时钟周期

SCAN[1:0]:决定列的数量,查看内存手册是9

 

REFRESH:0x4800002423位):

REFEN[23]:决定存储器是否刷新,1=刷新

TREFMD[22]:决定存储器刷新模式,0=自动刷新

 

Trp[21:20]:决定列刷新频率, 根据内存手册时序逻辑图,00=两个时钟周期

Tsrc[19:18]:决定行刷新频率,11=7个时钟周期

Refresh Counter[10:0] :决定SDRAM刷新的时间(这里和前面的列和行刷新不一样),根据计计算公式 取十进制数1269

 

BANKSIZE:0X48000028(8)

BURST_EN[7]:使能ARM内核突发模式,一次处理器可以批量的访问内存数据,1=使用

SCKE_EN[5]:是否使用节电模式,1=使用

SCLK_EN[4]:串行时钟使用时启动,1=使用

BK76MAP[2:0]:定义内存大小,000=32/32

注意:2440的内存初始化总共需要初始化13个控制寄存器

 

 

MRSB6/7:0X4800002C/0X48000030:内存模式(12位)

CL[6:4]CAS latency 固定内存寻址存储持续时间,跟在列/行寻址后持续的时间,011=查看芯片手册时序时间表。

 

 

6410存储器空间:

32位地址线,最大寻址4G内存空间,一般高2G空间是,低2G 空间。

其中低2G存储空间是又被分为:

外设存储空间主存储空间

主存储空间又被分为:

动态存储区

保留区

内部存储区

镜像存储区

静态存储区

 

 

 

总结:无论是时钟初始化的寄存器,还是内存初始化的寄存器,其寄存器的地址空间都是处于内存中的外设区

以上是关于内存初始化的主要内容,如果未能解决你的问题,请参考以下文章

07 内存(中)实现内存页面初始化

Linux内存从0到1学习笔记(6.3,物理内存初始化之内存基本数据结构初始化)

启动期间的内存管理之build_zonelists初始化备用内存域列表zonelists--Linux内存管理(十三)

Linux内存从0到1学习笔记(6.7,物理内存初始化之CMA初始化)

Linux内存从0到1学习笔记(6.4,物理内存初始化之预留内存)

Linux内存初始化 创建系统内存地址映射