Chinaunix首页 | 论坛 | 博客
  • 博客访问: 21599
  • 博文数量: 40
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 210
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-28 14:26
文章分类
文章存档

2013年(4)

2012年(36)

我的朋友

分类:

2012-10-02 19:53:57


1,板上的存储资源

 

两个32MSDRAM.(内存)

一个2MNOR FLASH(可运行代码,一般放bootloader)

一个128M(有些是64M)NAND FLASH(硬盘)

以上这些资源看原理图便知.

 

2,板上的I/O资源

 

       这块板子上(准确的说是S3C2440)I/O空间是用存储映射的方法映射到存储空间上,也就说I/O空间是要占用存储空间的.


 

3,NOR FLASH 启动与NAND FLASH 启动

 

       开发板上有一个S2开关,当它打在NOR一端是就是NOR启动.相反,打在另一端就是NAND FLASH启动了.先说这两种启动的不同,再说说硬件上是如何启动的,空间又是如何分配的。

S2打在NAND FLASH启动,那么程序就是在NAND FLASH上跑起来。其实,在内部还有一个4K字节的steppingstone的缓冲器(其实这是一个SRAM),当选择NAND FALSH 启动时,这个缓冲器映射在地址0x0000_0000,而它负责将NAND FLASH上的代码复制到4K字节的steppingstone的缓冲器中(硬件自动完成),只是4KB,这4KB的代码中需要自己写nandflash的初始化代码(代码的搬运实际上是对nandflash的读写操作,所以要初始化后才能读写操作)和搬运代码(将nandflash中剩余代码搬运到SDRAM中,所以nandflash的初始化代码和搬运代码必须放在nandflash的开头(4KB之内),否则steppingstone没意义了,代码搬运完成之后,使用一条跳转指令到SDRAM的地址处运行。这是uboot的启动机制。nandflash的程序就这样跑起来了。

SDRAM(大家都知道,程序运行时都是在RAM上运行的,怎么可能是在FLASH上运行呢,其实就是将FLASH上的代码复制了而已)而负责复制这段代码的东西就是传说中的BIOS.

S2打在NOR FLASH一端时,又有什么区别呢?当选择用NOR FLASH启动时,2MNOR FLASH就映射到地址0x0000_0000,程序就是从这里运行了.那难道程序就能从NOR FLASH上运行吗?当然不行,那为什么可以在这里启动呢,其实这个NOR FLASH内部已经安装了BIOS的了(若有读者不知什么是BIOS,那就暂且认为它的功能就是从FLASH上复制代码到SDRAM就可以了),这样的话程序就直接可以在norflash上运行啦。

------------------------------------------------

图:

------------------------------------------------

4,S3C2410 S3C2440NAND 存储系统

 

       大家都知道,32位可以寻址4G空间.但是S3C2440却的存储空间里把4G这样子分的:

 

(途中只显示最低的1G)

00x4000_0000(只有1G

 

还有3G空间是这样分配:

 

OM[1:0]=01或者是10 时(NOR FLASH):

 

0x4000_0000-0x4000_0fff

-----这4K字节的就是前面说的stepingstone的啦0x4000_0fff_0x4800_0000是没用到的。

0x4800_0000-0x6000_0000

-----这空间是特殊功能寄存器的.你发现,所有的寄存器都是在这个范围内的。

0x6000_0000—0Xffff_ffff

-----还是未用到的

 

OM[1:0]=00时(NAND FLASH):

 

这个时候如上图所示。刚刚说的steppingstone映射到0x000_0000那里,也即是图中的BOOT INTERNAL SRAM。其他的一样.

 

其实,S3C2440把低1G的空间分成了8,由图可知,06这七块的起始地址是不变的。而第七段的地址是可变的(它的地址有第六块需要用到多少来决定,反正就是第六第七是连在一起的)。前6块可以是ROM SRAM 。最后两块不但可以是ROM,SRAM,还可以是SDRAM.其实啊,简单点的说,就是只有最后两块才能是SDRAM.也就是说SDRAM必须要映射到这两块里面.mini2440就是选择映射在BANK6上,所以SDRAM的起始地址是0x3000_0000(这就是手册上为什么在加载测试程序时DNW的初始值要设为这个,它就是为了想程序直接加载到SDRAM,这只是做实验而且,掉电后还是会丢失的.所以做产品时是不可能这样做的).

 

刚刚说S3C2440把存储空间分为8,它为什么要这么做呢?其实很简单,即使它不这么做,我们也会这么做的。算一算数:每块128M,那就是需要27根地址线来寻址.8块呢就跟着引出与之一一对应的8跟片选引脚.讲到这聪明的读者必能想到.其实这8根片选引脚就是里面用3根地址线译码出来的(2的3次方).所以一共用了30根地址线,30根不正好是1G.


2440为什么只有27根地址线引出来?

理论上可以寻址的空间为(2的32次方,32根地址线)4GB,但其中有3GB的空间都预留给处理器内部的寄存器和其他设备了,留给外部可寻址的空间只有1GB,也就是0X00000000~0X3FFFFFFF,总共应该有30根地址线。这1GB的空间,2440处理器又根据所支持的设备的特点将它分为了8份,每份空间有128MB,这每一份的空间又称为一个BANK。为方便操作,2440独立地给了每个BANK一个片选信号(nGCS7~nGCS0)。其实8个片选信号可以看作是2440处理器内部30根地址线的最高三位所做的地址译码的结果。正因为这3根地址线所代表的地址信息已经由8个片选信号来传递了,因此2410处理器最后输出的实际地址线就只有A26~A0


阅读(75) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~