Uboot 内存初始化(2440)

本文深入解析Uboot内存初始化过程,详细解释DRAM和SRAM的区别,SDRAM、DDR、DDR2的工作原理,并具体阐述2440开发板内存初始化的实现方式,包括内存芯片的选择、地址空间分配、存储控制器配置等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Uboot 内存初始化(2440)

内存分类,DRAM:需要定期充电(刷新),否则数据会丢失,存取速度慢。SRAM:具有静止存储功能的内存,不需要定期刷新操作就能保存它内部存储的数据,存取速度快,CPU内部的steppingstone部分使用,但是成本高,开发板很少使用。板载内存一般使用DRAM,DRAM又分为SDRAM,DDR,DDR2。

SDRAM(Synchronous Dynamic Random AccessMemory):同步动态随机存储器。同步:内存工作需要同步时钟,内部命令的发送和传输都以该时钟为准,仅仅在时钟脉冲的上升沿传输数据。动态:DRAM需要充电刷新保证数据不丢失。随机:数据不是线性依次存储,而是可以任意指定数据读写,2440开发板使用的内存通常都是SDRAM。

DDR(Double Data Rate SDRAM),双倍速率同步动态随机存储器:在时钟脉冲的上升沿和下降沿都可传输数据,在相同的工作频率下,DDR的传输速率是SDRAM两倍,DDR2在DDR的基础上再次进行改进,使得数据传输速率在DDR的基础上再次翻倍。6410开发板通常使用DDR内存,210通常使用DDR2内存。

内存的内部结构:表结构:内存的内部如同表格,数据就存放在每个单元格中,数据读写时,先提供行号,再提供列号,就可准确找到单元格,这张表格称为Logical Bank(L-Bank),行号为行地址,列号为列地址。


一块内存要包含多个L-Bank,现在内存内部基本都会分割成4个L-Bank。寻址信息:L-bank选择信号,行地址,列地址。内存芯片容量计算公式:

4*L-bank容量=4*(单元格数目*每个容量)

2440内存初始化

2440地址空间:

分析s3c2440芯片地址线,A0~A27共有27根地址线,能够访问128MB个外设空间,S3c2440又提供8个片选信号nGCS0~nGCS7,对外访问能力扩大到128MB*8,


左边是norflash启动,右边是nandflash启动,当选择nandflash启动时,片选0区域为4K的SRAM stepping stone,图上表明了每个片选的起始地址。内存芯片一般都在片选6和片选7,内存起始地址0x30000000。在处理器访问设备时只会给出地址,CPU通过存储控制器设备分解地址成内存需要的片选信号、行地址和列地址,进行相应的处理访问内存,编写内存初始化代码就是初始化存储控制器,然后才能访问内存芯片。

内存芯片和开发板的硬件连接:

使用的内存芯片规格:4M*4Bank*16bit,给芯片一个地址读出的数据是16位,d0~d15,2440芯片数据线32位,DATA0~DATA31,假如将内存芯片和2440连接,还要空出16位数据线,为了避免浪费,采用两个芯片并联,高16位接第一个内存芯片,低16位接第二个,当CPU发出地址,能够第一,二个芯片读两个16位数据共计32位,2440采用俩个32M并联的方式构成一个64M内存容量。

存储控制器:

控制对外设的访问比如网卡、SDRAM内存、norflash.......,都是透过存储控制器完成,需要对它配置初始化,告诉以什么样的工作方式工作,通过寄存器设置。

1. BWSCON:32位寄存器被分成8个组,用来设置8个Bank总线宽度和等待状态,利用每4个位控制一个Bank。0x220000000

2. 一组寄存器Bank Control Register(0~5),由于内存在Bank(6,7),所以这些默认。

3.  Bank Control Register(6,7)设置为0x00018001。

4. REFRESH:定期刷新0x008c04f5。

5. BANKSIZEREDISTER:bank突发模式(访问内存一次性使用批量数据,提高内存访问效率)大小,0x000000b1。

6.MPSR:bank6,bank7的模式寄存器,0x00000030

bl init_sdram

#define mem_contrl  0x40000000

init_sdram:

ldr r0,=mem_contrl

add r3 , r0 ,#4*13

adrl r1,mem_data

0: 

ldr r2, [r1] ,#4

str r2, [r0] ,#4

cmp r0, r3

bne 0b
       mov pc, lr                                                                                                              

mem_data:

.long 0x22000000

.long 0x00000700

.long 0x00000700

.long 0x00000700

.long 0x00000700

.long 0x00000700

.long 0x00000700

.long 0x00018001

.long 0x00018001

.long 0x008c04f5

.long 0x000000b1

.long 0x00000030

.long 0x00000030

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值