nand flash和nor flash启动区别

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

S3c2440的nand flash 256M,而nor flash仅有2M,系统的bootloader一般很小,只有200多KB,而作为一个完整的系统,需要bootloader(200KB),kernel(2M),rootfs(100M),这些加起来就有100多M了,这三个部分需要一直存在系统中,掉电非易失,当然就不能放在内存(SDRAM)中了,需要放在非易失存储器nandflash中,norflash因为很小(2M),只可以容纳下bootloader(200KB),所以s3c2440的nandflash中存放bootloader(200KB),kernel(2M), rootfs(100M),norflash中存放bootloader。因此s3c2440既可以从nandflash启动也可以从norflash启动,但是运行操作系统的话只能从nandflash中启动,从nandflash中启动的时候整个操作系统也并不是在nandflash中运行,而是映射到内存SDRAM中运行。值得注意的是,在norflash启动模式下进入bootloader菜单项,可以通过DNW下载程序或文件到nandflash中,也可以把nandflash中的东西上传到PC机,而并不是只能在norflash中和PC机之间传送文件和程序等。
S3c2440启动时读取的第一条指令是在0x00上,分成nandflash和norflash启动。Norflash有自己的地址和数据线,可以采取类似于memory的随机访问方式,在nor flash上可以直接运行程序,所以nor flash可以直接用来做boot,采用nor flash启动的时候会把地址映射到0x00上。Mini2440就是直接把vivi(bootloader)直接烧录在norflash上。
Nand falsh是IO设备,数据、地址、控制线都是共用的,需要软件区控制读写时序,所以不能像nor flash、内存一样随机访问,不能EIP(片上运行),因此不能作为boot。
S3c2440把bootloader烧到nandflash上启动,因为S3c2440里有一个内置的SRAM,叫做steppingstone(垫脚石,很形象),系统启动加电后,会把nandflash上的起始4KB的内容拷到SRAM里执行,这样就实现了nandflash的启动。如果bootloader小于4K的话(像vboot),在sram中就能boot,大于4KB的话(u-boot,vivi),在SRAM做一些基本初始化后,再把bootloader的剩余部分拷贝到SDRAM中(>0x30000000)。
注:bootloader是在操作系统内核运行之前运行的一段小程序。通过这个小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,bootloader是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的bootloader几乎是不可能的。
我们使用s3c2440的时候,经常通过norflash启动,进入vivi的菜单(s3c2440的norflash已经烧录好了vivi),之后通过vivi的USB下载功能,把其他的bootloader下载到nandflash里,下载完成后,再通过nandflash启动,测试我们的bootloader。Norflash适合做代码储存并片上运行,nandflash适合用来做大量数据存储的。

Nandflash启动,nandflash存储器的前4k被自动加载到steppingstone(内部SRAM缓冲器),同时把这段片内SRAM映射到nGCS0片选的空间(即0x00000000)。cpu是从0x00000000开始执行,也就是NAND flash里的前4KB内容。因为NAND FLASH连地址线都没有,不能直接把NAND映射到0x00000000,只好使用片内SRAM做一个载体。通过这个载体把nandflash中大代码复制到RAM(一般是SDRAM)中去执行。所以nandflash前4k空间放启动代码,SDRAM速度较快,用来执行主程序代码。
当从nor flash启动时nor flash被映射到0x00000000地址(就是nGCS0,这里就不需要片内SRAM来辅助了,所以片内SRAM的起始地址还是0x40000000). 然后cpu从0x00000000开始执行(也就是在Norfalsh中执行)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值