加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Nand Flash启动,Nor Flash启动,SDRAM总结

发布时间:2020-12-15 17:51:54 所属栏目:百科 来源:网络整理
导读:? ? ?? S3C2440的启动时读取的第一条指令是在0x00上,分成为Nand Flash和Nor Flash上启动。 Nand Flash:适合大容量数据存储,类似硬盘; Nor Flash:适合小容量的程序或数据存储,类似小硬盘; SDRAM:主要用于程序执行时的程序存储、执行或计算,类似内存
? ? ?? S3C2440的启动时读取的第一条指令是在0x00上,分成为Nand Flash和Nor Flash上启动。

Nand Flash:适合大容量数据存储,类似硬盘;

Nor Flash:适合小容量的程序或数据存储,类似小硬盘;

SDRAM:主要用于程序执行时的程序存储、执行或计算,类似内存。

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

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

????????? 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等等功能。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读