国嵌上学期笔记-自己实现bootloader-第三节

摘要:上节讲述了mini2440的时钟初始化,本节讲述内存的初始化

1、内存的分类:

(1)SRAM和DRAM

(2)寻址:根据行地址和列地址从L-BANK中找到对应地址,内存芯片内部通常会分成4个L-BANK。

        首先选择L-BANK选择信号,然后再给行列地址。内存容量=L-BANK数量*单元格数目*每个单元格的容量(也就是数据宽度)。

2、mini2440的内存初始化:

(1)2440地址空间。2440对外提供27根地址线,如下图所示。理论寻址空间:128M字节。为了扩大寻址空间,可以增加片选信号。2440对外提供8个片选信号nGCS0-nGCS7。因此,寻址空间:8*128=1G。

SDRAM在片选6和7位置。

外设统一编制,CPU不清楚某个位置具体外设,通过内存控制器访问。CPU直接给出地址,存储控制器把地址解析为行地址,列地址和L-BANK选择信号。初始化内存,就是初始化存储控制器。



(2)内存芯片硬件连接。


由图可知,内存芯片数据宽度16位,2440芯片数据宽度32位。用两个内存芯片并联,就产生32位数据。给一个地址,得到32位数据。

(3)存储控制器。

看数据手册,开始配置寄存器。

第一个:BWSCON:分为8个组,2440的8个BANK。下图是其中一组。

原理图没有UB/LB,31->0,等待状态不需要,30->0,所用内存L-BANK宽度16,但是用了两个,宽度拼成32,BANK7的数据宽度设置为32。BANK6和BANK7放的是内存,配置相同,0-5先不用,为默认值。

0x2200 0000


第二个到第九个:BANKCON

内存用的6和7,0-5保值默认。Tcrd看2440数据手册,内存数据手册中有时间值,根据2440的周期,判断用几个CLK。列地址行地址看内存数据手册。

BANK6和7寄存器值相同:0x00018001。




第十个:trp 2个时钟,Tsrc  7个时钟。之前HCLK设置的100M,因此RefreshCount取1269(芯片手册)。

0x008c04f5


第十一个:BANKSIZE。BANK6和7选择64M。

0x000000b1

第十二个和第十三个:

0x00000030

0x00000030


猜你喜欢

转载自blog.csdn.net/wllinux12138/article/details/80852063