历史上的今天
返回首页

历史上的今天

今天是:2025年02月13日(星期四)

正在发生

2018年02月13日 | 提高MSP430G系列单片机的Flash 擦写寿命的软件流程

2018-02-13 来源:eefocus

    在嵌入式设计中,许多应用设计都需要使用EEPROM 存储非易失性数据,由于成本原因,某些单片机在芯片内部并没有集成EEPROM。MSP430G 系列处理器是TI 推出的低成本16 位处理器,在MSP430G 系列单片机中并不具备EEPROM。为了存储非易失性数据,MSP430G 系列处理器在芯片内部划分出了256 字节的Flash 空间作为信息Flash,可用于存储非易失性数据,但是由于Flash 与EEPROM 在擦写寿命上存在一定差距,所以在实际应用中,这种应用方式并不能够满足所有客户的需求。本应用笔记介绍了使用代码区域Flash 来模拟EEPROM,通过一定的软件处理算法,可以大大增加数据存储周期的一种方法。本文给出了实现上述功能的软件流程。


    1. 嵌入式Flash 存储介质与EEPROM 的主要特性对比

    电可擦除和编程只读存储器(EEPROM)是在绝大多数嵌入式应用中都会使用到的用于保存非易失性数据的关键器件,用于在程序运行期间保存数据。Flash 闪存(Flash Memory,简称为"Flash")是一种非易失性( Non-Volatile )存储器,广泛应用于各种嵌入式处理器中,用于存储程序代码。

    由于硬件成本原因,在许多嵌入式处理器中并没有集成EEPROM 模块,通常我们可以采用在片内Flash 存储器中保存非易失性数据的应用方式来达到使用要求。对一些普通的应用场合,这种使用方式可以满足要求。

表一 EEPROM与Flash 对比分析

表一 EEPROM与Flash 对比分析

    1.1 写访问时间

    由于EEPROM 和Flash 的工作特性不同,所以写访问时间也不相同。Flash 具有更短的写访问时间,所以更适用于对存储速度有要求的场合。

    1.2 写方法

    外置EEPROM和采用Flash 模拟EEPROM的最大不同之处在于写的方法。

    EEPROM:对EEPROM 的写操作不需要额外的操作,只需要提供电源供给;但是一旦启动写操作流程后,写操作不能够被打断。所以需要外接电容器等措施来保证在芯片掉电时能够维持供电,保证完成数据操作。

    Flash 模拟EEPROM:当芯片上电后,写操作可以被电源掉电和芯片复位打断。和EEPROM 相比,需要应用设计者增加相关的处理来应对可能存在的异常。

    1.3 擦写时间

    EEPROM和采用Flash 模拟EEPROM在擦除时间上存在很大的差异。

    与Flash 不同,EEPROM 在进行写操作之前不要擦除操作。由于Flash 需要几个毫秒时间进行擦除操作,所以如果在进行擦除操作的过程中出现电源掉电的情况,需要软件做相关的保护处理。为了设计一个健壮的Flash 存储器的管理软件,需要深入的了解和掌握Flash 存储器的擦除过程特性。

    2. 增加Flash 模拟EEPROM 擦写寿命的方法

    可以根据用户的需求采用不同的方法实现Flash 存储器模拟EEPROM。

    2.1 虚拟地址加数据方案

    通常需要两个页以上的Flash 空间来模拟EEPROM。上电后,初始化代码先查找出有效页,同时将另外一个页初始化为擦除状况,以提供字节写的能力,并用作备份和随时准备执行写入操作。需要存储EEPROM 的变量数据首先写入有效页,当有效页写满后,需将所有数据的最后状态保存到备份页,并切换到备份页进行操作。每一页的第一个字节通常用来指示该页的状态。

    每个页存在3 种可能状态:

    擦除态:该页是空的。

    已写满数据状态:该页已经写满数据,准备切换到下一个页进行操作。

    有效页状态:该页包含着有效数据并且标示状态尚未改变,所有的有效数据全部拷贝到了已经擦除的页。

    下图以采用两个页模拟EEPROM的方式为例,描述了页状态字的在页0 和页1 之间的切换过程。

    采用这种方式,用户不知道数据刷新的频率。

    下面的图例以采用两个页模拟EEPROM 的应用方式为例进行描述。为了方便获取模拟EEPROM数据和更新数据内容,每个存储变量元素都在Flash 里定义了一个操作单元,在该操作单元中对每个存

    储变量元素都分配一个虚拟操作地址,即一个EEPROM 操作单元包含一个虚拟地址单元和一个数据单元。当需要修改数据单元内容时,新的数据内容和之前分配的虚拟地址一同写入一个新的模拟EEPROM存储器单元中,同时返回最新修改的数据内容。EEPROM存储单元格式描述如图二。

    使用虚拟地址加数据的方案总结如下。

    • 为每一个目标存储变量分配一个虚拟地址,该虚拟地址需一同存入Flash 中。当读取存储变量内容时,需根据该变量的虚拟地址搜索虚拟EEPROM并返回最后更新的内容。

    • 在软件处理上,需要记录下一次写入的物理目的地址;在每一次执行写入操作后,根据EEPROM存储单元大小(操作粒度),将目的操作指针自动累加。

    • 当一个页(Page)写满后,需要将所有变量的EEPROM数据拷贝到下一个页,再执行该页的擦除操作。

    • 在嵌入式软件处理上需加入合适的校验机制,保证写入数据的正确性并监Flash 是否已经失效。

    2.2 划分子页方案

    在Flash 中划分出至少2 个页(Page)用作模拟EEPROM,根据应用需求将需写入EEPROM 进行保存的变量数据划分成一个定长的数组(子页),例如16 个字节或者32 字节,将页划分成若干子页后,需对Flash 中的所有子页按照地址顺序进行逐次编号。每个子页的第一个字节通常用来指示该子页的状态,子页状态可以为:空、已写入或者失效。

    在芯片上电初始化时,首先查找出第一个尚未写入数据的子页,并进行标识,在进行写EEPROM操作时,应用程序需将待写入EEPROM 子页的所有数据按照事先约定好的顺序整理好,再一次性将所有变量数据写入空的子页中,最后将模拟EEPROM 的操作指针指向下一个空闲的子页,等待下一次写入。待将一个页的数据写满后,再进行一次擦除操作。需要处理好指向子页的指针的跳转。


    每个页存在3 种可能状态:

    擦除态:该页是空的。

    已写满数据状态:该页已经写满数据。

    有效页状态:该页包含着有效数据并且该页尚未写满,仍可向子页写入数据。


    图三介绍了使用子页的方式实现Flash 模拟EEPROM的数据处理方法。

    2.2.1 软件描述

    在软件实现上,为了便于软件处理,建议定义一些关键宏定义和结构体,指定Flash 模拟EEPROM 的起始、结束地址、页的大小、子页的大小、每个页的子页数目等参数,同时将需要操作的参数封装起来,便于软件操作和管理,不建议定义许多离散的标志变量。

    在软件操作上,Flash 模拟EEPROM模块需要提供几个API 接口给应用程序调用。

    • 通过typedef 关键字定义设备类型,typedef unsigned char u8;

    • ChkFstPowerOnInfo()用于检测芯片是否为第一次上电并初始化EEPROM 参数到内存,原型如下。

    Void ChkFstPowerOnInfo(void);

    • FlashWrite()用于写Flash,传递的形参包括指向待写入数据的指针,待写入数据在子页中的起始字节编号,写入数据的长度,原型如下。

    void FlashWrite( u8 *array, u8 startNum, u8 length );

    • FlashErase()用于擦除Flash,传递的形参是子页的编号,在擦除函数中需要根据子页的编号判断是否需要执行页的擦除操作,原型如下。

    void FlashErase(u8 seg_sn);

    2.2.2 软件流程图

    软件启动后,初始化模拟EEPROM流程图描述如下。

    调用API,向模拟EEPROM 写入数据的软件流程如图五所示。在软件处理中,要特别注意目标指针的切换和保证写入数据的正确性,在代码空间允许的情况下,可以增加一些校验算法来保证。

    采用划分子页的方案总结如下。

    • 每次写入模拟EEPROM的数据长度为定长,即为子页的长度。

    • 软件需要定义一个存储变量结构体,用于刷新和同步模拟EEPROM内容。在将数据写入模拟EEPROM之前,程序员需要按照约定的数据格式,在内存中将所有的目标存储变量进行整理。

    • 在软件处理上,需要计算当前写入和下一次写入的物理地址;在每一次执行写入操作后,根据子页长度大小,将指向子页的目的操作指针自动累加。

    • 待一个页(Page)写满后,需要将最后更新的模拟EEPROM数据拷贝到下一个页,再对写满页执行一次擦除操作。

    • 在嵌入式软件处理上需加入合适的校验机制,保证写入数据的正确性并监测用于模拟EEPROM功能的Flash 子页是否已经失效。

    2.3 两种方案的对比分析

    两种方案的对比分析见表二。

表二 两种方案的对比分析

表二 两种方案的对比分析


    3. 实际的嵌入式应用

    根据软件需要,建议采用字节(8bit)做为操作的最小粒度,适用性会更广泛。

    3.1 Flash 存储器擦写寿命的提升

对于MSP430G 系列的Flash 存储器,可以保证至少10000 次的编程和擦除寿命。如图六所示。



图六 MSP430G 系列单片机Flash 编程和擦除寿命

图六 MSP430G 系列单片机Flash 编程和擦除寿命

    采用划分小页结合至少分配2 个大页的操作方式,则可以大大增加Flash 模拟EEPROM 的擦写寿命。例如,对于MSP430G 系列单片机,如果将每个小页的尺寸划分为16 字节,采用2 个大页(每页512 字节)作为模拟EEPROM 使用,则可以提供64 个操作子页((512/16)x2=64),可以保证至少640000 次的擦写寿命。

    3.2 掉电时的异常处理

    如果正在进行Flash 数据存储时发生掉电,数据可能会保存不成功,存在异常。为了增强健壮性,在软件处理上,需要考虑设备异常掉电等可能会导致Flash 擦写失败的情况。

    在软件处理中,当成功保存Flash 数据后,再写入该子页的状态标志。单片机上电后,用户程序将查找最后一次写入的子页,再将该子页的数据内容并恢复到内存中的数据结构中。

    4. 系统可靠性设计

    4.1 时钟源的选择

    由于驱动Flash 的时钟源(ACLK、MCLK、SMCLK)和时钟频率可以设定,为了保证在将数据写入模拟EEPROM时的可靠性,建议在将Flash 的时钟频率降低后,再对其进行操作。例如将Flash 的时钟频率降低到1MHz 后,进行写入操作。需要注意,在降低了时钟频率后,若此时钟源也是定时器(Timer)的时钟源,则可能会影响到定时器的定时准确性,需要软件上做好处理。

    4.2 代码在RAM中运行

    由于向Flash 写入数据操作是通过执行Flash 中程序代码,对Flash 进行擦除和编程操作。由于对Flash 的编程需要mcu 内部执行一个升压操作,所以如果有足够的内存空间,建议将编程、擦除等关键代码拷贝到RAM中运行,可以使用关键字__ramfunc 指定,如下图七所示。


    5. 总结

    本文从软件方面,以及安全性方面探讨了使用MSP430G 系列单片机在使用Flash 模拟EEPROM方面的应用,提供了两种不同的方式供选择。两种方式都可以大幅度提高模拟EEPROM的编写、擦除寿命,并且满足高可靠性的应用设计,用户可以结合具体的应用进行选择。


推荐阅读

史海拾趣

Geyer Electronic E K公司的发展小趣事

Geyer Electronic E.K.公司的发展故事

故事一:创立与初步发展

Geyer Electronic E.K.公司由Rudolf Geyer于1964年创立,最初是一家位于慕尼黑莱姆区的电子产品零售店。在那个年代,电子产品行业正处于快速发展阶段,Geyer凭借其敏锐的市场洞察力和对技术的热情,逐渐在市场中站稳了脚跟。起初,店铺销售各类电子产品,从简单的收音机到复杂的电子设备,一应俱全。随着时间的推移,Geyer Electronic凭借其优质的服务和丰富的产品线,逐渐赢得了当地消费者的信任和支持。

故事二:转型与专业化

1992年,Geyer Electronic经历了一次重要的转折点。在Jürgen Reichmann的领导下,公司被收购并进行了战略调整,正式转型为一家专门从事频率产品和特殊电池的公司。这一转型标志着Geyer Electronic开始专注于某一特定领域,并致力于在该领域成为行业的领导者。公司投入大量资源进行技术研发和产品创新,不断推出符合市场需求的高质量频率产品和特殊电池,逐渐在行业内树立了良好的口碑。

故事三:全球化布局

随着业务的不断扩展,Geyer Electronic开始将目光投向全球市场。公司不仅在欧洲建立了稳固的市场地位,还逐渐将业务拓展到亚洲和美国等其他地区。为了实现全球化战略,Geyer Electronic加强了与全球合作伙伴的合作与交流,共同推动频率产品和特殊电池技术的创新与发展。同时,公司还建立了完善的全球销售网络,确保产品能够在短时间内送达全球各地的客户手中。

故事四:认证与品质保证

为了进一步提升产品质量和客户满意度,Geyer Electronic积极寻求国际认证。公司通过了DIN ISO 9001:2015等国际质量管理体系认证,这标志着Geyer Electronic在质量管理方面已经达到了国际先进水平。通过严格的质量控制和持续的技术创新,Geyer Electronic不断推出高品质的频率产品和特殊电池,赢得了全球客户的广泛认可和信赖。

故事五:搬迁与未来发展

为了满足未来发展的需要,Geyer Electronic于2022年搬到了位于Planegg的新公司所在地。这次搬迁不仅为公司提供了更加宽敞和现代化的办公和生产环境,还为公司未来的发展奠定了坚实的基础。在新的起点上,Geyer Electronic将继续秉承“质量第一、客户至上”的经营理念,不断推动技术创新和产品升级,为全球客户提供更加优质、高效的服务和解决方案。同时,公司还将积极探索新的市场领域和发展机遇,努力成为全球电子行业中的佼佼者。

EUPEC [eupec GmbH]公司的发展小趣事

随着市场的不断变化和客户需求的升级,EUPEC意识到品牌重塑的重要性。公司开始着手进行品牌升级和形象重塑工作,通过加强品牌宣传、提升产品质量和服务水平等方式,不断提升EUPEC品牌的知名度和美誉度。这些努力使得EUPEC在市场上树立了良好的形象,成为电力半导体领域的知名品牌。

Holt Integrated Circuits公司的发展小趣事

在军事和商用航空领域,MIL-STD-1553标准是一项至关重要的通信协议。Holt的MIL-STD-1553解决方案以其小巧的体积和高性价比,在行业内脱颖而出。这些解决方案在单个芯片上集成了整个MIL-STD-1553接口,为用户提供了极大的便利。Holt的旗舰IC产品更是因其易用性和高性能而广受好评,成为业界内的标杆产品。

EM Devices Corporation公司的发展小趣事

作为一家有社会责任感的企业,EM Devices Corporation不仅关注自身的经济效益,还积极履行社会责任。公司严格遵守环保法规,采取了一系列环保措施,减少生产过程中的污染排放。此外,公司还积极参与公益事业,为社会做出了积极的贡献。这种可持续发展的理念为公司赢得了广泛的社会赞誉和尊重。

Analogic Corporation公司的发展小趣事

在产品研发取得突破的同时,EM Devices Corporation也积极拓展市场,寻求与国际企业的合作。公司参加了多个国际电子展,展示了自己的产品和技术实力。通过与国外企业的交流与合作,公司不仅获得了更多的市场机会,还学习到了先进的生产和管理经验。这些经验为公司后续的发展奠定了坚实的基础。

Crouzet公司的发展小趣事

随着市场竞争的加剧,Crouzet开始注重提供定制化的解决方案,以满足客户不断变化的需求。公司凭借强大的研发能力和丰富的行业经验,能够根据客户的具体需求,提供量身定制的产品和服务。这种以客户需求为导向的经营理念,使得Crouzet在市场上赢得了更多的客户和合作伙伴。

问答坊 | AI 解惑

世界著名汽车品牌标识演化历史------梅赛德斯-奔驰

梅赛德斯-奔驰 Mercedes-Benz 梅赛德斯-奔驰汽车名字的历史,要回到1926年。当时的两家德国公司,戈特利普·戴姆勒(Gottlieb Daimler)与威廉·迈巴赫(Wilhelm Maybach)成立的Daimler-Motored-Gesellschaft(戴姆勒汽车公司,简称 ...…

查看全部问答>

呱呱的联系方式是??

寻找呱呱。 请加我QQ:44571366…

查看全部问答>

NRF2401 收发程序

本帖最后由 paulhyde 于 2014-9-15 03:34 编辑 NRF2401 收发程序 就卖了币意思一下!~!~!  …

查看全部问答>

寻找单片机高手....呵呵...请教

寻找单片机高手....呵呵...请教…

查看全部问答>

SD卡资料

secure digital input/output  card specification…

查看全部问答>

电工测量与电测仪表--很基础很实用的好书

序言 前言 第一章 电测技术基础 第一节 测量的定义和分类 第二节 测量误差 第三节 电测仪表的分类 第三节 电测仪表的主要技术指标 第二章 电气测量指示仪表 第一节 电气测量指示仪表的概念和分类 第二节 电气测量指示仪表的结构特点和技 ...…

查看全部问答>

从PDA向远程服务器(一台PC电脑)上发送照片,怎么弄?

如题:    从PDA向远程服务器(一台PC电脑)上发送照片,怎么弄?    是不是要用到GPRS网络通信?怎样进行设置呢?…

查看全部问答>

关于KEIL的问题

哪位高人给我看一下,我的KEIL C出现如下错误: *** FATAL ERROR L250: CODE SIZE LIMIT IN RESTRICTED VERSION EXCEEDED     MODULE:  C:\\KEIL\\C51\\LIB\\C51S.LIB (-----)     LIMIT:   0800H BYTE ...…

查看全部问答>

Zstack学习经验点滴:ZSTACK组播的原理

组播实际上是广播的一种,采用广播地址0xFFFD,接收如果加了相应的组就会过滤出数据,转发给应用代码。 由于group的维护和APS层都没有开放源代码,实现细节不是很清楚。不过几点问题值得注意: 1)由于采用0xfffd地址进行广播,就意味着RFD节点 ...…

查看全部问答>

不用仿真器能烧写程序吗?

2812的板子,不用仿真器,通过JTAG口,怎么烧写程序? 通过并口?…

查看全部问答>