带有双组闪存的MCU优点
MCU(微控制器)在过去几十年里在CPU性能、通信接口、模数和数模外设、内存大小及读写次数等方面呈指数发展。我们专注于带有非易失性嵌入式存储器的MCU(我们在USB闪存驱动器、存储器等内拥有闪存),从首批带有一次性编程(OTP)的器件到EPROM(电可编程只读存储器),再到EEPROM (在方程中增加了“可擦”一词,能够在不需要紫外线灯的情况下擦除它),到现在的嵌入式闪存(在某些情况下称为Flash EEPROM),这是目前最常用的闪存。
EEPROM和Flash在概念上类似,两者都是可电擦除和写入的存储器,但是它们之间也存在某些差异。最初Flash只能在大数据块上写入,但是现在两者比较接近了,一个单字节、词或双词都可以写入,取决于架构是支持8位、16位还是32位写入操作,是否需要与偶数地址对齐,因此主要的区别是擦除过程。EEPROM的擦除大小很小(在大多数情况下,只能擦除一个单字节),而Flash需要在大扇区中(在某些情况下为数据块或页面)擦除,而且还取决于所使用的器件,扇区可以是几个字节或是几千个字节。
Flash受欢迎主要有两个原因:一是随着扇区的增加,其擦除流程与典型的EEPROM相比,速度更快。使用EEPROM工作时,擦除过程很慢,通常一个字节以ms为单位。尽管Flash的擦除时间大致相同,但是它适用于擦除整个扇区。这样,减少了对设备进行编程的时间,因此也减少了制造流程所需的时间。另一个原因是Flash存储器的造价低于EEPROM,因此构建有许多Flash存储器的MCU可实现更高的成本效益。
带有嵌入式闪存的MCU支持系统内编程。这意味着MCU可以在用于最终应用的印刷电路板(PCB)上进行编程。在某些情况下,需要增加一些额外电路,以进入或退出编程模式,但是能够在不移除设备的情况下进行或先在套接字中进行编程是值得的,这意味着即使软件开发没有完成,板卡也能够完全填充。还可以在原始版本出来后升级软件而不更改硬件,从而加快面市速度,因为基于OTP或ROM的设备需要完整的软件版本才能够推出。
演进的下一步是向MCU的Flash存储器添加自编程功能,允许MCU在运行时执行写入/擦除操作。这样会带来两大好处:一是代码本身可以包含再次对整个应用进行编程的例程,允许通过外设进行远程更新(这些通常称为引导程序,所使用的外设通常是串行接口),因此具有很高的灵活性,能够在安装后更新设计;二是能够在运行时存储非易失性数据,如空调的温度或电视上编程后的频道。
Flash自编程
下面阐述了在没有双闪存阵列的情况下如何在系统中和运行时写入闪存。
要在运行时进行写入和擦除流程,则需要对任何一侧施加较高电压或清除各个位。当对Flash库施加高电压时,无法读取整个存储器,因此有两种典型的替代方案让系统保持工作:一种是其它存储器运行写入/擦除(通常是RAM)Flash的代码,第二种方法是在执行Flash操作时,为CPU提供一种拖延代码执行的方法。
这两种方法都另有一个限制:由于中断矢量通常位于Flash存储器,因此在执行Flash命令时需要禁用中断功能,因为CPU在那段时间无法读取Flash,而且在需要时,也不能获取中断矢量。在使用I2C、UART或USB等串行外设运行的系统中,这些外设可以每秒数kB(如UART或I2C总线)或每秒数MB(如USB)的速率交流信息;禁用中断功能几毫秒便可能导致丢失大量信息。因此,系统需要设计成在修改Flash时允许停止这些串行通信,然后当中断功能再次启用时,恢复所有信息。
双组Flash实施方案
双组Flash意味着同一器件中有两个不同的Flash块。本文从这里开始以飞思卡尔MC9S08MM128 MCU为例进行阐述。该器件拥有128kB的Flash存储器,分成两个64kB的阵列。上一章解释过在写入或擦除Flash的这段时间,整个Flash块都不能读取。提到有两种替代方法来执行Flash操作:CPU拖延或从RAM运行。同一逻辑适用于一个双组Flash,但是由于现在有两个不同的组,因此代码可以在Flash A中运行以写入或擦除Flash B,反之亦然。
当使用非易失性存储器来存储变量时,双组Flash可以设计为将所有非易失性变量都存储在一个Flash组中,即:一个块用作伪EEPROM,代码在另一个组中。 例如,所有数据都将存储在Flash B中,写入和擦除存储器的代码将在Flash A中,以便更加高效地使用RAM和堆栈。在双组Flash MCU中也不需要CPU 拖延。系统可以保持运行,因为只有一半的存储器需要高电压,另一半可以继续正常的代码执行。当构建应用来避免阻塞代码时,这尤为重要(代码的各部分,要么停止CPU,或在环路等待事件发生以继续代码执行,在这种情况下等待Flash命令完成)。
将数据保存在Flash B中的另一
- 用NiosII搭建的固态盘设备系统(03-23)
- DSP和Flash接口技术的实现(08-15)
- 基于闪存TMS320VC5409DSP并行引导装载方法(07-05)
- 从NAND闪存中启动U-BOOT的设计(05-16)
- 3D NAND这么火,比2D NAND到底优秀在哪?(01-08)
- STM32 产品唯一身份标识寄存器(96位) 闪存容量寄存器(11-13)