Flash编程的原理是只能写1到0,而不能写0到1。因此,在Flash编程之前,必须擦除相应的块,而擦除过程就是将所有位写为1的过程,并且所有位都写为1。块中的字节变为 0xFF。 因此,可以说编程就是对应位写0的过程,擦除就是对应位写1的过程。 两者的执行过程完全相反。
(1)闪存芯片读写的基本单位不同
应用程序以“字”作为芯片操作的基本单位。 为了方便大容量闪存的管理,NOR闪存通常被划分为128KB或64KB的逻辑块,有时块还被划分为扇区。 读写时,需要指定逻辑块号和块内的偏移量。 应用程序基于“块”来操作芯片。 NAND闪存的块比较小,通常为8KB,然后每个块又分为页。 页大小一般为512字节。 要修改芯片中的单个字节,必须重写整个数据块。
(2)闪存是一种随机存储介质,在数据量较小时使用; 闪存是一种连续存储介质,适合存储大数据。
(3)由于地址线和数据线是分开的,因此芯片可以像SDRAM一样连接数据线。 NOR芯片的使用与普通存储芯片类似。 传输效率高,可执行程序可在芯片内执行(XI P,In Place)。 这样,应用程序就可以直接在闪存中运行,而无需将代码读入系统RAM。 由于这一特性,NOR芯片常被用作嵌入式系统中的启动芯片。 共享地址和数据总线需要额外连接一些控制输入和输出,因此很难直接使用NAND芯片作为启动芯片。
(4)由于闪存芯片共享地址和数据总线,不允许清除一个字节甚至一个块的数据,只能清除固定大小的区域; 该芯片可以对字进行操作。 因此,处理小数据量的I/O操作时速度应该更快。 例如,在芯片上写入一个字通常需要10us,在32位总线上写入需要512个字节; 闪存写入512字节所需时间包括:512×50ns/字节+10us寻页时间+200us芯片擦写时间=234us。
(5)闪存的容量较大,最大容量已达到8G字节。 为了方便管理,存储空间采用块和页的二级存储系统,也就是说它的存储空间是二维的,比如闪存块。 大小为16K,每页大小为512字节。 每个页还有 16 字节的空闲区域来存储错误检查代码空间(也称为带外、OOB 空间)。 在执行写操作时,闪存一次将一个字节的数据放入内部缓存区域,然后发出“写命令”来执行写操作。 由于闪存上的操作是基于块和页的,因此在向闪存读写大量数据时,NAND 比 NOR 闪存更快。
(6)可靠性
闪存的可靠性比闪存高,因为闪存的接口简单,数据操作少,位交换操作少。 因此可靠性高,坏块少。 一般用于可靠性要求较高的场所。 闪存的接口和操作都比较复杂,位交换操作较多。 关键数据需要检错/纠错(EDC/ECC)算法来保证数据完整性,因此出现问题的概率要大得多。 坏块也是不可避免的,而且由于坏块是随机分布的,甚至无法进行纠错。
(7)一般地址线和数据线是共用的,对读写速度有一定影响; 闪存数据线和地址线分离,读写速度相对较快。
芯片的共同特征
首先,向芯片写入数据时,必须先清除芯片中相应的内容再写入,即先擦除后写入。 只不过芯片只需要擦除一个字,而NAND需要擦除整个块。 其次,闪存可以擦除和写入的次数是有限的。 当闪存接近使用寿命时,写操作经常会失败; 当达到使用寿命时,闪存中存储的数据虽然可以读取,但不能再写入。 因此,为了防止上述问题的发生,不能对特定区域进行重复的写入操作。 通常可擦写次数要高于芯片的擦写次数。 然而,由于通常会擦除整个块,因此如果块内页中的一位发生故障,则整个块将变得无效。 而且,由于擦除过程比较复杂,失败的概率也比较高,所以从整体来看,NOR的寿命更长。
另一个共性是闪存的读写操作不仅仅是物理操作。 事实上,在闪存上存储数据必须通过算法来实现。 该模块通常位于驱动程序的MTD'()模块中或FTLZ(Flash Layer)层中。 实现上,具体算法与芯片厂商和芯片型号有关。 通过比较可以发现,NAND更适合复杂的文件应用,但由于NAND芯片的使用相对复杂,因此对文件系统的要求也更高。
(8)接口对比
具有通用SRAM接口,可以方便地连接CPU的地址和数据总线,对CPU接口要求低。 其特点是片内执行(XIP,In Place),这样应用程序可以直接在闪存中运行,而无需将代码读入系统RAM。 比如uboot中的ro段就可以直接在电脑上运行。 您只需将 rw 和 zi 段复制到 RAM 并运行它们即可。
该器件使用复杂的I/O端口串行访问数据,8个引脚用于传输控制、地址和数据信息。 由于时序比较复杂,一般最好将控制器集成到CPU中。 另外,由于它没有连接到地址总线,如果想将其用作系统的启动盘,则需要CPU具有特殊的功能,例如启动模式选择时的功能。 上电时4k数据会自动读入地址0的SRAM中。 如果CPU没有这个特殊功能,用户无法直接运行代码,则可以使用其他方法。 比如很多开发板除了使用,还使用了一小块来运行启动代码。
(9)产能及成本比较
相比较而言,LED的容量较小,一般在1~1左右。 一些新工艺采用芯片堆叠技术,使容量更大。 从价格上来说,是比较高的。 例如,目前市场上一件的零售价约为20元,而一件的零售价约为30元。 生产工艺更简单,NAND结构可以在给定的模具尺寸内提供更高的容量,从而降低价格。
(10)
设备中的坏块是随机分布的。 过去也曾尝试消除坏块,但发现良率太低,成本太高,根本不划算。 Nand 设备需要对介质进行初始扫描以查找坏块并将坏块标记为不可用。 在制造的设备中,如果不通过可靠的方法做到这一点将导致高故障率。 不存在坏块问题。
就Flash位翻转(a bit Flips)而言,在NAND中发生的概率要大得多。 这个问题在Flash存储关键文件时是致命的,所以建议同时使用EDC/ECC等验证。 算法。
(11)升级对比
升级比较麻烦,因为不同容量的地址线要求不同,更换不同容量的芯片也不方便。 通常我们会通过在电路板的地址线上制作一些不同容量的跳线电阻来解决这个问题。 不同容量接口固定,升级简单。
(12)读写性能对比
写入操作:对任何闪存器件的写入操作只能在空或已擦除单元中执行。
NAND器件执行擦除操作非常简单,而NOR则要求在擦除之前将目标块中的所有位都写入1。
擦除NOR器件时,以64至128KB为块进行,执行擦除/写入操作的时间约为5秒。 NAND 器件的擦除以 8 至 32KB 的块为单位进行,执行擦除/写入操作最多只需要 4ms。
读操作:NOR的读取速度比NAND稍快。
(13)文件系统比较
MTD在Linux系统中用于管理不同类型的Flash芯片,包括 和 。 支持在Flash上运行的常见文件系统有jffs、jffs2、yaffs等,该文件系统是只读文件系统。 如果我们要实现对Flash的读写操作,通常在Flash上选择jffs和jffs2文件系统,在Flash上选择yaffs或文件系统。 文件系统支持大页面(大于 512 字节/页)内存。