作者:GWD 时间:2019.7.10
概述:开机上电时程序放在nor、nand中但是为了运行的速度,在初始化sdram(是一种外设,相当于电脑的内存条,不是片内资源)后要把程序复制到sdram中运行。4K片内ram的功能实际上等同于nor(速度上有区别)因为有nor时不用片内4K RAM,无nor时把nand的启动代码复制到片内4K RAM。
一、nor、nand、sdram在嵌入式应用的简介
1、SDRAM:掉电后不保存数据,运行时需要动态刷新。读取速度比Flash快,适合启动后的程序执行,使用前需要初始化。主要用于程序执行时的程序存储、执行或计算,类似PC的内存,SDRAM 只能用来做内存,它就是为了做内存而生的。2、NOR Flash:掉电保存数据/程序。可以直接执行指令,读取速度较快,写入不太方便(利用这一性质可以判断代码是在nor中运行还是非nor中运行),擦除速度较慢。适合存储小容量的程序(U-Boot)或数据,类似于PC存放BIOS的ROM。
3、NAND Flash:掉电保存数据/程序。读取速度比NOR Flash慢,但写入、擦除都较快。可靠性略低,需要做损耗平衡、数据校验等。适合存储大容量数据(如操作系统),类似PC的硬盘。
4、不管是 nor flash还是nand flash, 都是为了存储数据而生的,不能用来做内存。在裸板开发中用来跑代码纯粹是学习需要,要用连接脚本进行重定位到SDRAM中运行。
二、三者在ARM中的关系及相关流程
1、片内的ram用来存储启动代码,在2440初始化sdram之前,代码就在片内ram中运行。片内ram装载的应该与norflash中的内容是一样的(在nand启动时,片内4k自动从nand中读取),即u-boot。
2、uboot放在norflash里,nandflash就存放的操作系统。所以norflash相当于电脑的bios,nanflash才是硬盘。sdram就是内存了
3、uboot是一级启动代码,即bootloader,用来加载操作系统(nandflash)到sdram并且执行,当然uboot还能格式化nandflash和安装新系统的功能。
4、nor flash 和 nand flash里面有程序,ARM启动后,有个自动的逻辑先从norflash开始执行程序(就像51单片机复位后PC=0000H,从这里开始执行程序),norflash是允许片内执行程序的,这个特性需要了解。(下面所述的功能需要重定位编程才可以实现)执行程序时,就把部分代码复制到内部sram,再跳转到sram执行完成sdram初始化,再将nandflash中的系统复制到sdram并运行,这样就启动了。
三、具体到S3C2440,和STM32等各型号的搭配有些差异:
1、三星的S3C44B0X(ARM7),必须有NOR Flash和SDRAM。启动时可以直接运行NOR Flash中的代码,也可以将NOR Flash拷贝到SDRAM中运行;
2、三星的S3C2440(ARM9),处理器里面就有4K的SRAM用来做CPU启动时用的,可以没有NOR Flash,一般使用NAND Flash和SDRAM。启动时必须将NAND Flash中的代码和数据拷贝到SDRAM中运行,这是自动完成的,画一个启动流程,对于nor启动,CPU看到0地址就是nor的0地址;对于nand启动(没有nor芯片的时候),CPU看到的0地址时片内4K ram的首地址,其中,S3C2440支持两种启动模式:NAND和非NAND(一般是NOR Flash)。具体采用的方式取决于OM0、OM1两个引脚。