摘要
在嵌入式规划中,许多运用规划都需求运用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 存储器中保存非易失性数据的运用办法来到达运用要求。对一些一般的运用场合,这种运用办法能够满意要求。
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 次的编程和擦除寿数。如图六所示。
选用区分小页结合至少分配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 指定,如下图七所示。
图七 运用要害字__ramfunc 将程序指定到Ram 中运转
5. 总结
本文从软件方面,以及安全性方面探讨了运用MSP430G 系列单片机在运用Flash 模仿EEPROM方面的运用,供应了两种不同的办法供挑选。两种办法都能够大幅度进步模仿EEPROM 的编写、擦除寿数,而且满意高可靠性的运用规划,用户能够结合详细的运用进行挑选。