一 通用存储设备:
在介绍内存工作原理之前有必要了解下存储设备的存储方式:ROM,RAM
l ROM(Read-Only Memory):只读存储器,是一种只能读出事先所存数据的固态半导体存储器。其特性是一旦储存资料就无法再将之改变或删除。通常用在不需经常变更资料的电子或电脑系统中,资料并且不会因为电源关闭而消失。如:PC里面的BIOS。ROM还可以细分为不可编程ROM,可编程ROM(PROM),可擦除(PROM)和电可擦除(EEPROM)。
目前ROM有被flash替代的趋势,NOR和NAND是目前市场上两种主流的flash技术。
l RAM(Random Access Memory) :随机访问存储器,存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。可以理解为,当你给定一个随机有效的访问地址,RAM会返回其存储内容(随机寻址),它访问速度与地址的无关。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间内随机访问使用的程序。计算机系统里内存地址是一个四字节对齐的地址(32位机),CPU的取指,执行,存储都是通过地址进行的,因此它可以用来做内存。
RAM按照硬件设计的不同,随机存储器又分为DRAM(Dynamic RAM)动态随机存储器和SRAM(Static RAM) 静态随机存储器。
l DRAM:它的基本原件是小电容,电容可以在两个极板上短时间内保留电荷,可以通过两极之间有无电压差代表计算机里的0和1,由于电容的物理特性,要定期的为其充电,否则数据会丢失。对电容的充电过程叫做刷新,但是制作工艺较简单,体积小,便于集成化,经常做为计算机里内存制作原件。比如:PC的内存,SDRAM, DDR, DDR2, DDR3等,缺点:由于要定期刷新存储介质,存取速度较慢。
l SRAM:它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。因此其存取速度快,但是体积较大,功耗大,成本高,常用作存储容量不高,但存取速度快的场合,比如CPU的L1 cache,L2cache(一级,二级缓存) ,寄存器。
为了满足开发的需要MINI2440在出厂时搭载了三种存储介质:
(1)NOR FLASH(2M):ROM存储器,通常用来保存BootLoader,引导系统启动
(2)NAND FLASH(256M,型号不一样,Nandflash大小不一样):保存操作系统映像文件和文件系统
(3)SDRAM(64M):内存,执行程序
l NOR FLASH:它的特点是支持XIP芯片内执行(eXecute In Place),这样应用程序可以直接在Flash闪存内运行,不必再把代码读到系统RAM中,也就是说可以随机寻址。NOR FLASH的成本较高。
l NAND FLASH:它能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。其成本较低,不支持XIP。可做嵌入式里的数据存储介质。如:手机存储卡,SD卡等。
Nand Flash:适合大容量数据存储,类似硬盘;
Nor Flash:适合小容量的程序或数据存储,类似小硬盘;
SDRAM:主要用于程序执行时的程序存储、执行或计算,类似内存。SDRAM从发展到现在已经经历了四代,分别是:第一代SDR SDRAM,第二代DDR SDRAM,第三代DDR2 SDRAM,第四代DDR3 SDRAM。
Nor Flash有自己的地址线和数据线,可以采用类似于memory的随机访问方式,在Nor Flash上可以直接运行程序,所以Nor Flash可以直接用来做boot,采用Nor Flash启动的时候会把地址映射到0x00上。
Nand Flash是IO设备,数据、地址、控制线都是共用的,需要软件区控制读取时序,所以不能像Nor Flash、内存一样随机访问,不能EIP(片上运行),因此不能直接作为boot。
简单点说:
norflash 读取快,写入慢,总线结构,能运行代码,价格贵。 nandflash 读取慢,写入快,非总线结构,不能运行代码,价格便宜。 sdram 读取和写入都很快,掉电不能保存数据,价格贵。 1,SDRAM+nand flash 是因为SDRAM快,nand flash 便宜,现在最好的搭配。 2,nor flash + nand flash nor fash慢,nand flash便宜,估计没哪个公司会用。 3,SDRAM + nor flash SDRAM快,norflash使用比nand flash简单。
二 S3C2440的启动
Nand Flash启动:Nand Flash控制器自动把Nand Flash存储器的前4K复制到Stepping Stone(内部SRAM缓冲器),并把0x0000_0000设置为内部SRAM的起始地址,CPU从内部SRAM的0x0000_0000开始启动,这个过程不需要程序干涉。(CPU会自动从Nand Flash中读取前4KB的数据放置在片内SRAM里(s3c2440是soc),同时把这段片内SRAM映射到nGCS0片选的空间(即0x0000_0000)。CPU是从0x0000_0000开始执行,也就是Nand Flash里的前4KB内容。因为NAND FLASH连地址线都没有,不能直接把NAND映射到0x0000_0000,只好使用片内SRAM做一个载体。通过这个载体把Nand Flash中大代码复制到RAM(一般是SDRAM)中去执行)。
程序员要完成的工作是把最核心的代码放在Nand Flash的前4K中。4K代码要完成S3C2440的核心配置以及启动代码(U-boot)的剩余部分拷贝到SDRAM中。这4K的启动代码需要将Nand Flash中的内容复制到SDRAM中执行。Nand Flash的前4K空间放启动代码,SDRAM速度较快,用来执行主程序的代码。ARM一般从ROM或Flash启动完成初始化,然后将应用程序拷贝到RAM,然后跳到RAM执行。
Nor Flash启动:支持XIP即代码直接在Nor Flash上执行,无需复制到内存中。这是由于Nor Flash的接口与RAM完全相同,可随机访问任意地址数据。Nor Flash速度快,数据不易失,可作为存储并执行起到代码和应用程序的存储器,Nor Flash可像内存一样读操作,但擦除和写操作效率很低,远不及内存,一般先在代码的开始部分使用汇编指令初始化外接的的内存部件(外存SDRAM),最后跳到外存中继续执行。对于小程序一般把它烧到Nand Flash中,借助CPU内部RAM(SRAM)直接运行。
Nor Flash被映射到0x0000_0000地址(就是nGCS0,这里就不需要片内SRAM来辅助了,所以片内SRAM的起始地址还是0x4000_0000)。然后CPU从0x0000_0000开始执行(也就是在Nor Flash中执行)。
Nor Flash速度快,数据不易失,可作为存储并执行起到代码和应用程序的存储器,Nor Flash可像内存一样读操作,但擦初和写操作效率很低,价格很昂贵。SDRAM和Nand Flash的价格比较适中。根据这些特点,一些人产生了这样一种想法:外部Nand Flash中执行启动代码,SDRAM中执行主程序。Nand Flash控制器自动把Nand Flash存储器的前4K载到Steppingstone(内部SRAM缓冲器),并把0x0000_0000设置为内部SRAM的起始地址,CPU从内部SRAM的0x0000_0000开始启动,这个过程不需要程序干涉。这4K的启动代码需要将Nand Flash中的内容复制到SDRAM中执行。Nand Flash的前4K空间放启动代码,SDRAM速度较快,用来执行主程序的代码。ARM一般从ROM或Flash启动完成初始化,然后将应用程序拷贝到RAM,然后跳到RAM执行。
总结:ARM的启动都是从0地址开始,所不同的是地址的映射不一样。在ARM开电的时候,要想让ARM知道以某种方式(地址映射方式)运行,不可能通过你写的某段程序控制,因为这时候你的程序还没启动,这时候ARM会通过引脚的电平来判断。
1.当引脚OM0跟OM1有一个是高电平时,这时地址0会映射到外部nGCS0片选的空间,也就是Nor Flash,程序就会从Nor Flash中启动,ARM直接取Nor Flash中的指令运行。
2.当OM0跟OM1都为低电平,则0地址内部bootbuf(一段4k的SRAM)开始。系统上电,ARM会自动把Nand Flash中的前4K内容考到bootbuf(也就是0地址),然后从0地址运行。这时Nand Flash中的前4K就是启动代码(他的功能就是初始化硬件然后在把Nand Flash中的代码复制到RAM中,再把相应的指针指向该运行的地方)
为什么会有这两种启动方式,关键还是两种Flash的不同特点造成,NOR FLASH容量小,速度快,稳定性好,输入地址,然后给出读写信号即可从数据口得到数据,适合做程序存储器。Nand Flash总容量大,但是读写都需要复杂的时序,更适合做数据存储器。这种不同就造成了Nor Flash可以直接连接到ARM的总线并且可以运行程序,而Nand Flash必须搬移到内存(SDRAM)中运行。
在实际的开发中,一般可以把bootloader烧入到Nor Flash,程序运行可以通过串口交互,进行一定的操作,比如下载,调试。这样就很可以很方便的调试你的一些代码。Nor Flash中的Bootloader还可以烧录内核到Nor Flash等等功能。