arm存储模块

来源:互联网 发布:gtx970 gpuz数据 编辑:程序博客网 时间:2024/06/06 21:42

在arm系统中存储模块主要分为flash和SDRAM。flash相当于计算机的硬盘,SDRAM相当于计算机的内存。但二者本质的区别是什么呢?在一个系统里我们执行程序需要存储什么内容呢?首先我们必须有源代码告诉控制器应该干什么,其次代码的执行过程其实是数据的处理过程,因此我们必须有一个空间来储存数据。在执行程序的过程中我们的源代码是不会改变的,控制器通过PC的指引一条一条(实际上利用流水线技术可以同时执行多条指令,我们暂时这么表述)的执行指令,处理的数据存储在特定的空间(也就是内存)。因此存储代码的空间不需要频繁的擦除重写,但需要较快的读取速度,并且可以掉电保存。内存需要很快的擦除重写速度,不需要掉电保存。

所以在嵌入式系统中,flash一般用来存储代码。flash分为nor flash和nand flash二者的一些区别如下:

1)接口区别:
NOR FLASH地址线和数据线分开,来了地址和控制信号,数据就出来。
NAND Flash地址线和数据线在一起,需要用程序来控制,才能出数据。
通俗的说,就是光给地址不行,要先命令,再给地址,才能读到NAND的数据。而且都是在一个总线完成的。
结论是:ARM无法从NAND直接启动。除非装载完程序,才能使用NAND Flash.

2)性能区别

nor的读速度比nand快点;

nand的写入速度比nor快很多

nand的擦除速度比nor快很多

nand擦除单元更小,相应的擦除电路就少

sdram在系统中主要用作程序的运行空间,数据及堆栈区。

根据这些存储设备的不同特点,arm系统可以从nand flash启动和nor flash启动,二者具体过程如下:

-------以下内容来源于网络---------

Norflash的有自己的地址线和数据线,可以采用类似于memory的随机访问方式,在norflash上可以直接运行程序,所以norflash可以直接用来做boot,采用norflash启动的时候会把地址映射到0x00上。

 NandflashIO设备,数据、地址、控制线都是共用的,需要软件区控制读取时序,所以不能像norflash、内存一样随机访问,不能EIP(片上运行),因此不能直接作为boot

 NANDFlash启动:NANDFlash控制器自动把nandflash存储器的前4K载到Steppingstone(内部SRAM缓冲器),并把0x00000000S设置为内部SRAM的起始地址,cpu从内部SRAM0x00000000开始启动,这个过程不需要程序干涉。

cpu会自动从NANDflash中读取前4KB的数据放置在片内SRAM里(s3c2440soc),同时把这段片内SRAM映射到nGCS0片选的空间(即0x00000000)。cpu是从0x00000000开始执行,也就是NANDflash里的前4KB内容。因为NANDFLASH连地址线都没有,不能直接把NAND映射到0x00000000,只好使用片内SRAM做一个载体。通过这个载体把nandflash中大代码复制到RAM(一般是SDRAM)中去执行)。

程序员要完成的工作是把最核心的代码放在nandflash的前4K中。4K代码要完成S3C2440的核心配置以及启动代码(U-boot)的剩余部分拷贝到SDRAM中。

4K的启动代码需要将NANDFlash中的内容复制到SDRAM中执行。NANDFlash的前4K空间放启动代码,SDRAM速度较快,用来执行主程序的代码。ARM一般从ROMFlash启动完成初始化,然后将应用程序拷贝到RAM,然后跳到RAM执行。


NORflash启动:支持XIP即代码直接在NORFlash上执行,无需复制到内存中。这是由于NORFlash的接口与RAM完全相同,可随机访问任意地址数据。NORflash速度快,数据不易失,可作为存储并执行起到代码和应用程序的存储器,norflash可像内存一样读操作,但擦初和写操作效率很低,远不及内存,一般先在代码的开始部分使用汇编指令初始化外接的的内存部件(外存SDRAM),最后跳到外存中继续执行。对于小程序一般把它烧到NANDflash中,借助cpu内部RAMSRAM)直接运行。

norflash被映射到0x00000000地址(就是nGCS0,这里就不需要片内SRAM来辅助了,所以片内SRAM的起始地址还是0x40000000.然后cpu0x00000000开始执行(也就是在Norfalsh中执行)。


原创粉丝点击