使用带有双组闪存的MCU优点

发布者:清新天空最新更新时间:2013-11-01 来源: eefocus关键字:MCU  Flash  EEPROM 手机看文章 扫描二维码
随时随地手机看文章
  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提供一种拖延代码执行的方法。[page]

这两种方法都另有一个限制:由于中断矢量通常位于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中的另一个好处是不需要禁用中断功能,因为中断矢量表是Flash A的一部分。这意味着所有串行通信、模数转换、定时器等都可以保持运行,启用中断功能,代码可以在命令执行的过程中进行跳转,提取中断矢量,执行中断服务例程,并返回,以验证Flash操作是否完成,以及是否需要启动新操作。

  另外一个特点是向执行整个设计远程升级的应用添加故障容忍功能。可以将新项目版本保存在一个Flash组中,在另一个组中作为备份进行保存。一旦上传了新版本并通过了验证,那么以前的版本便可以擦除。在系统设计级,可以总是使用Flash A在Flash B中写入新版本,反之亦然。这样,即使在更新过程中发生了故障,也不会丢失工作版本。

  EEPROM仿真

  使用Flash存储非易失性信息的一个限制是字节必须处于已擦除状态(所有位都设为逻辑“1”)才能够写入。这意味着擦除操作将所有位都从扇区转换为“1”,而写入操作将某些或全部位都改为“0”。这样产生的问题是,如果一个变量发生了改变,需要进行非易失性备份,那么首先需要擦除字节,但是由于Flash不能逐个字节擦除,因此需要擦除整个扇区。

  执行EEPROM仿真的例程旨在使用Flash而不是单字节写入和擦除功能来提供EEPROM功能。一般做法是使用需要存储在Flash中的所有变量创建一个结构;该结构添加一个字段,指示该扇区是否活动(这应该是写入的最后一个字节,以验证所有数据是否已经正确写入)。当需要在Flash中更新某些信息时,复制整个结构。每当字节改变时都进行非易失性更新,或根据定时器持续进行备份作为应用执行的一部分。

  根据应用类型,可能进行某些改变,以减少执行EEPROM仿真或增加系统强劲性所需的Flash容量。例如,如果使用一个Flash扇区,非易失性结构将写入同一扇区,只要适合扇区大小,能写入多少次就写多少次(因此,建议结构大小适合扇区内的准确次数,通常是两种大小的功率)。在Flash扇区填满后,代码需要擦除扇区并重新开始。这种方法的好处是只使用一个Flash扇区,限制是如果在扇区擦除步骤发生断电,那么所有信息都会丢失。 另外,Flash耐用性也将加倍。

  另一种方法是使用两个扇区进行EEPROM仿真。只有在把信息写入新扇区后才擦除一个扇区,因此在Flash中总是有信息的有效副本,从而更加强韧,能够确保即使在擦除或写入过程中发生掉电,信息也不会丢失,还增加了存储非易失性信息所需的Flash容量。 根据应用要求来确定应该使用哪种方法。

  案例研究: 如何在飞思卡尔S08系列中写入/擦除Flash

  在S08系列中执行写入或擦除操作的步骤与此类似。如果要独立进行写入、突发写入、擦除或整体擦除,第一步是用一些数据写入Flash位置(区别在于如果命令是擦除或整体擦除,那么所写入的数据是没有影响的)。之后,寄存器FCMD(Flash命令)需要写入要执行的操作,然后在Flash状态寄存器中写入一个位来下发命令,代码需要检查下发的Flash命令是否会产生错误。在单组Flash部署中,代码需要等待设置Flash命令完成标志,以便它可以返回正常的代码执行,对于双组Flash,在检查了下发Flash命令没有导致错误产生后将立即返回执行其它代码部分。建议在下发新命令前,代码总是检查以前的命令是否已经完成,以避免潜在的问题。

  下面的文本框是关于如何为MCU部署Flash命令的代码示例。

  #define Flash_Busy() FSTAT_FCCF

  #define EraseSectorFlashB(Addr) FlashB_Command(Addr, 0xff, FLASH_ERASE_CMD)

  #define WriteByteFlashB(Addr, Data) FlashB_Command(Addr, Data, FLASH_PROGRAM_CMD)

  void main(void)

  {

  unsigned char FlashErasedAddress = 0x4000;

  unsigned char FlashWrittenAddress = 0x4000;

  unsigned char FlashWrittenData = \'A\';[page]

  if (!Flash_Busy())

  {

  EraseSectorFlashB(FlashErasedAddress);

  }

  if (!Flash_Busy())

  {

  WriteByteFlashB(FlashWrittenAddress, FlashWrittenData);

  }

  对于双组Flash:

  本节显示了Flash B部分主要文件调用擦除和单字节写入例程的典型实施方案。宏定义允许为两种目的使用相同的例程,因为这两种操作非常相似。下面是一种推荐的写入/擦除Flash例程的部署方法。

  #pragma CODE_SEG FLASH_A

  unsigned char FlashB_Command(unsigned int FlashAddress, unsigned char FlashData, unsigned char Command)

  {

  /* Write Data into Flash*/

  (*(volatile unsigned char *)(FlashAddress)) = FlashData;

  /* Write Command */

  FCMD = Command;

  /* Launch command by setting FSTAT.FCBEF to 1 */

  FSTAT = 0x80;

  /* Wait at least 4 cycles to read the Error Flags */

  _asm NOP;

  _asm NOP;

  _asm NOP;

  _asm NOP;

  /* Check if Flash Access Error or Protection Violation Error are Set */

  if (FSTAT & (FSTAT_FACCERR_MASK|FSTAT_FPVIOL_MASK))

  {

  /* If so, finish the function returning FLASH_ERROR to indicate error */

  FlashClearErrorFlags();

  return (FLASH_ERROR);

  }

  /* Return FLASH_OK to indicate that the function executed Ok */

  return (FLASH_OK);

  }

  #pragma CODE_SEG DEFAULT

  所有寄存器和位名称对应于飞思卡尔S08系列MCU中现有的名称。

  结论

  飞思卡尔双组Flash是一个简单的想法,通过增强性能、避免CPU拖延情况、在代码执行过程中保持中断服务例程、不需要把例程复制到RAM,简化了应用设计。有了这些功能,可以更容易地设计和部署在代码执行过程中需要写入或擦除Flash存储器的最终应用。

  引导程序或EEPROM仿真等应用通过考虑正确的存储器分配并消除一些限制(如在Flash例程执行过程中停止通信外设),利用该功能,从而提高效率。

关键字:MCU  Flash  EEPROM 引用地址:使用带有双组闪存的MCU优点

上一篇:基于PROTEUS软件的数字电压表印刷电路板设计
下一篇:把32位微控制器性能带入工业和汽车应用

推荐阅读最新更新时间:2024-03-16 13:29

一种基于单片机的函数发生器的设计实现
1 引 言      在自动控制系统设计及调试过程中,不同频率的正弦波、三角波和方波常作为信号源,应用十分方便。过去常由分立元件及集成运放构成振荡器,后来出现的ICL8038其最高频率仅能达到100kHz。而MAX038芯片性能更好,最高频率可达20MHz,且三种波形由同一端输出。单片机控制品质卓越,基于单片机的函数发生器运行可靠,操作方便。 2 高频信号发生器芯片MAX038简介      MAXIM公司生产的MAX038芯片是一种高频精密的函数发生器,可产生三角波、锯齿波、正弦波、方波及脉冲波,且频率及占空比的控制可独立进行。      Lin管脚电流范围在10~400μA时电路获得最佳工作性能。输出波形的选择由逻辑地
[单片机]
MCS-51查找相同数个数程序
  在2000~200FH中查出有几个字节是零,把零的个数放在2100H中。      程序框图   ORG 0AA0H 0AA0 7810 L5800: MOV R0,#10H ;查找16个字节 0AA2 7900 MOV R1,#00H 0AA4 902000 MOV DPTR,#2000H 0AA7 E0 L5811: MOVX A,@DPTR 0AA8 B40001 CJNE A,#00H,L5816;取出内容与00H相等吗? 0AAB 09 INC R1 ;取出个数加1 0AAC A3 L5816: INC DPTR 0AAD D8F8
[单片机]
MCS-51查找相同数个数程序
STM32单片机的启动文件及FLASH分配
STM32的启动文件 STM32作为一款单片机,它的启动方式很简单,即当Boot配置了从内部Flash启动模式之后,一上电程序就会从0x8000000地址处开始执行文件,因此我们在使用Keil设置程序起始地址的时候,需要将这个Flash地址设置成0x8000000,只有将这个地址设置成0x8000000,生成的hex文件才可以被正常烧录到此地址,单片机上电之后才可以正常启动。而如果使用J-Flash工具烧写Hex文件时,这个地址会自动根据Hex文件解析出来。然而如果当你烧写二进制Bin文件时,还需要手动将单片机的起始地址制定出来,关于Hex文件和Bin文件的异同点,这个又是可以长篇大论一番了,我们下次特别写文章来讲。
[单片机]
STM32<font color='red'>单片机</font>的启动文件及<font color='red'>FLASH</font>分配
ST免费STM32 MCU自检软件,简化家电安全认证
第一个32位平台自检例程软件促进最新的32位微控制器在家电中的应用 中国,2007年11月28日 — 意法半导体(纽约证券交易所代码:STM)今天针对不久前推出的基于具有突破性的ARM Cortex-M3内核的STM32系列闪存微控制器发布一个新的软件库,这套软件的开发目的是简化对含有微控制器的家电进行的IEC 60335-1标准*测试和认证。从2007年10月起,IEC 60335-1要求基于微控制器的家电设备的软件须按照对家电总体安全性影响的原则接受评估。当某些故障与微控制器有关时,嵌入式软件必须含有自检例程,必须按照B类要求评估软件的检测重要安全故障的能力。 这些新的自检软件模块是ST为STM32系列专门开发的,已经通
[新品]
51单片机基础计算器
电路原理图如下: 单片机源程序如下: /* 接盘按键说明: -------------------------------------------------- | 1 | 2 | 3 | + | - - - - - - - - - - - - - | 4 | 5 | 6 | - | - - - - - - - - - - - - - | 7 | 8 | 9 | * | - - - - - - - - - - - - - | C | 0 | = | / | ------------------------------
[单片机]
51<font color='red'>单片机</font>基础计算器
使用单片机STM8S 驱动 CT1642
/*定义LED 数码管的位数,本驱动只实现3位和4位的操作,所以LED_BIT_COUNT的值只能是3或4*/ #define LED_BIT_COUNT 4 /****************************************************************************************************** ***************** * 按键值定义 *********************************************************
[单片机]
国民技术-车规MCU | 确认申报2023“芯向亦庄”汽车芯片大赛
申报奖项丨汽车芯片50强 申请产品丨车规MCU 产品描述: N32A455系列采用40nm先进工艺制程,基于32 bit ARM Cortex-M4F内核,最高工作主频144MHz,支持浮点运算和DSP指令,集成高达512KB嵌入式Flash和144KB SRAM,集成丰富的高性能模拟器件,内置4个12bit 5Msps ADC,4路独立轨到轨运算放大器,7个高速比较器,2个1Msps 12bit DAC,集成多路U(S)ART、I2C、SPI、QSPI、CAN、SDIO等通信接口, 内置密码算法硬件加速引擎。产品兼具通用性、硬件级安全性、车规级高可靠性,已通过AEC-Q100车规认证,用途广泛。 独特优势:
[汽车电子]
国民技术-车规<font color='red'>MCU</font> | 确认申报2023“芯向亦庄”汽车芯片大赛
MCX A:新的通用MCU和资源丰富的FRDM开发平台
恩智浦正式发布MCX A14x和A15x系列“通用”微控制器。MCX A隶属于MCX产品组合,基于Arm® Cortex®-M33内核平台。 MCX的理念是将主流恩智浦器件的卓越特色与创新功能结合起来,打造下一代智能边缘设备 。 可扩展性是MCX产品组合的一个重要优势。MCX A系列在该产品组合中发挥着重要作用,是各类应用的基础。它面向多个市场的广泛应用,包括: 工业通信 智能计量 自动化与控制 传感器 低功耗/电池供电设备 MCX A14x的工作频率为48MHz,MCX A15x的工作频率为96MHz。器件的封装选项包括32引脚QFN、48引脚QFN和64引脚LQFP。MCX A器件的所有封装类型在IO
[单片机]
MCX A:新的通用<font color='red'>MCU</font>和资源丰富的FRDM开发平台
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved