nand flash 和 nor flash 的区别

NAND FLASH

地址线和数据线是共用的

访问方式:以页为单位读取

擦写:先块擦除再块写

NAND Flash相对NOR Flash更可能发生比特翻转,就必须采用错误探测/错误更正(EDC/ECC)算法,同时NAND Flash随着使用会渐渐产生坏块

 

NOR FLASH

地址线和数据线是分开的

访问方式:以字节为单位读取

擦写:先块擦除再块写

单片机内部的FLASH是NOR FLASH,程序是固化在flash中,cpu运行时直接从flash中读取程序,从RAM中读取数据 (哈佛结构,有程序存储器和数据存储器)

W25Q64等型号的winbond公司的SPI flash 都是 nor flash

 

 

为何 NAND FLASH 不能直接执行代码(XIP, eXecute In Place),而 NOR FLASH 可以

所谓 FLASH 直接执行代码,是CPU可以直接从 FLASH 取出指令并执行,不需要将代码加载到 RAM 中运行。

 

PC指针:无论什么单片机或者SOC,都有一个PC寄存器,这个寄存器保存了下一条待取指令的地址。正常情况下自动加“4”,遇到分支跳转的时候,由跳转指令设置值。那么指针是什么?指针是一个变量的地址,在含有操作系统(比如Linux、Windows)即硬件层面含有内存管理单元(MMU)的情况下,指针是虚拟地址,不含操作系统的情况下,是物理地址,虚拟地址和物理地址经过MMU转换。PC寄存器在CPU中,在CPU上电时由硬件设置一个特定的值(例如:ARM Cortex-M3的PC寄存器上电默认是0x4)。

 

CPU需要在存储器中读取指令,指令地址由PC寄存器给出,每执行完一条指令PC会自动的指向下一条指令,如果指令的长度不等会使得给出的地址不总是有一致的对齐,其次程序运行总会伴随跳转,这使得指令的寻址更具有随意性,所以说要直接在某种存储器中执行程序,至少读取数据时要能够任意寻址,而NOR Flash是刚好能满足要求的,市面上常见的MCU内置的Flash就是这种类型,所以能够直接在上面运行存储的程序,而不需要加载到RAM中。其他不具备这种访问特性的存储器是不能直接在上面执行程序的,必须转移到满足这种特性的存储器当中执行,比如加载到RAM。



 

posted @ 2022-09-12 15:57  流水灯  阅读(532)  评论(0编辑  收藏  举报