这个问题你要抓住本质来看。
Nand Flash和Nor Flash是做什么用的,为什么嵌入式系统里要用到他们?
其实,上述两个Flash只是存储芯片,相当于电脑的内存,另外还有一个DRAM或者SDRAM。
嵌入式系统里为什么要用到Flash或者DRAM呢,很显然,是用来存储东西的,Flash特点是掉电能保存,所以,一般用来存储程序代码或者常数数据,或者是掉电必须保存的数据。DRAM掉电不保存,但是几乎可以无限修改,所以一般用来做变量的存储和跑程序。
那么是不是嵌入式系统里必须有Flash和DRAM呢?答案是必须的,不然你的程序和变量怎么保存和运行呢?
那么嵌入式系统里必须要有Nand Flash和NorFlash吗?答案是不是必须的。
如果你用的主MCU,芯片内部集成了大容量的Flash和DRAM,就不必要扩展外部的Flash,比如说MTK62系列的芯片,就是我们常说的山寨手机,就没有外扩的DRAM和Flash.
如果你用的主MCU,芯片内部没有集成,或者集成的很小容量的Flash,你就要自己扩展Flash,可能是单独的Nand Flash,也可以能是单独的NorFlash,也可能是两者都有。如果你的程序很大,需要保存的数据也很大,比如说,你用三星的S3C24XX做主MCU,而跑Linux系统,那么,就两者都需要。如果你用三星的S3C44B0,跑uCOS-II,那么,只要其中一个就行了,一般只要NorFlash就行了,当然,上述的两个还要DRAM。
而现在的高端手机,通常用的高端的MCU,比如Cortex-A9 系列的MCU,这些MCU通常集成的Flash和DRAM容量比较小,而跑的程序量比较大,所以,都要外扩上述两种Flash.
简而言之,就是,一个嵌入式操作系统,到底是否需要用到NandFlash和NorFlash,是由系统的大小和你所采用的MCU来决定的,这是一个系统规划问题,早在进行系统开发之前,就应该规划好的。
要启动,就要有bootloader,它需要保存在非掉电易失的存储器上,所以系统中至少有一种,一般是nor放bootloader, nand 放内核,文件系统,环境变量等
不必须。
主要看什么应用。举例子,有的需要大容量存储,可能就会选nand;有的可能要用xip,基本上就用nor了。有的直接用芯片内部的存储器就够了,那时候啥扩展都不用了。