Uboot 内存初始化(2440)

时间:2022-12-22 19:49:31

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),行号为行地址,列号为列地址。

Uboot 内存初始化(2440)

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

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

2440内存初始化

2440地址空间:

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

Uboot 内存初始化(2440)

左边是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