目前已经很多ARM9的处理器都至少支持nand flash启动 和nor flash启动。那此两种启动方式到底有什么区别呢?下面以S3C2440为例说明。
NandFlash 与 NorFlash 区别
如下表所示
|
NOR |
NADN |
容量 |
1~32MB |
16~512MB |
XIP(芯片内执行) |
Yes |
No |
性能 |
擦除非常慢,写慢,但是读非常快 |
擦除、写、读都较快 |
可靠性 |
高,位反转比例小于nandflash的10% |
比较低,位反转比较常见 |
接口 |
与RAM一样 |
I/O接口 |
访问方法 |
随机访问 |
顺序访问 |
主要用途 |
保存代码和关键数据 |
用于保存数据 |
价格 |
高 |
低 |
文件系统支持 |
Jffs2 |
Yaffs |
记住最重要一点,NOR Flash的接口与RAM一样,所以可以随机访问任意地址,效率高,所以读的效率非常高。而NAND FLASH一般以512字节为单位进行读写。前者更适合保存程序,而后者保存数据。
启动方式对比
Nand启动
分两种情况,应用程序小于4K和应用程序大于4K。
如果应用程序小于4K:
(1) 一上电,nand前4K自动拷贝到2440内部的SRAM中。(2440的片内存储为4K)
(2) CPU从0地址执行(此时,0地址在SRAM中)
如果应用程序大于4K,那么应该怎么办呢。还是一样:
(1) 上电后,从nand前4K拷贝到片内的SRAM
(2)关看门狗、初始化存储器管理器、SDRAM等
(3) 把代码拷贝到SDRAM中,并继续执行。
不同的是,需要订制这4K的代码,完成从nandflash到sdram代码的复制。
Nor启动
最根本的区别在于从nor启动,由于nor也是并行传输,可以像内存(SRAM)一样读数据,但不能像内在一样写数据,所以可以将0地址定位在norflash中
(1) 一上电,将0地址定位在nor flash中
(2) 同样,CPU从0地址取址执行。