基于STM8S微处理器内部EEPROM的数据存储方法
扫描二维码
随时随地手机看文章
EEPROM(Electrically Erasable Programmable Read-Only Memory)指的是电子擦除式只读存储器,它是一种非易失的存储器,供电消失后,存储的数据依然保留,要擦除或改写其中的内容只要以电子信号的方式直接操作即可。EEPROM广泛应用于单片机数据存储领域,主要形式是串行I2C总线控制独立EEPROM元器件。随着单片机的集成度越来越高,许多芯片厂家在单片机的内部集成有一定数量的EEPROM存储空间,如Microchip、ST等等。本文首先介绍了比较典型的串行EEPROM和集成EEPROM的单片机并比较了各自的优点与缺点,并在分析单片机数据存储特点的基础上引用实例说明如何采用STM8S内置EEPROM设计数据存储。
1.器件简介
1.1.STM8S系列微处理器
ST公司的STM8S系列通用8位微处理器采用STM8内核,具备真嵌入式EEPROM和可校准RC晶振,大大降低了产品的研发和生产成本。以STM8S105xx为例,该微处理器是具备16MHz时钟主频的8位单片机。最大可提供32K字节ROM和2K字节RAM。其片内的真EEPROM存储器最大1K字节,至少可以擦写循环30万次。同时具备四路定时器和丰富的外设接口,如UART、SPI、I2C等等。
1.2.串行EEPROM
串行EEPROM中,较为典型的有ATMEL公司的AT24CXX系列产品。AT24CXX支持I2C总线数据传送协议,最高时钟频率400KHz,器件连接到总线上串行器件不仅占用很少的资源和I/O线,而且体积大大缩小,同时具有工作电源宽、抗干扰能力强、功耗低、数据不易丢失和支持在线编程等特点。
1.3.不同存储方式的比较
表1中罗列了三种不同存储方式的不同,由于片内EEPROM和串行EEPROM的存储介质均为EEPROM,所以其擦写的操作时间是差不多的,不同之处是串行EEPROM在进行写操作时会受到I2C总线速度的影响。相比而言读时间则是片内器件占有优势,因为片内EEPROM是直接访问片内地址的方式读出数据,效率上比总线方式访问会快很多。
表 1两种EEPROM的比较
2.单片机存储的特点
单片机的数据存储模式与一般计算机系统的有所不同,主要特点有数据量一般不大,很少每次刷新整个存储区域,如果是作为记录作用的单片机系统,一般数据呈线性方式增长,少有删除或插入的操作。另一方面,单片机存储对数据的安全性要求比较高,要求至少有两个以上的热备份数据以防止意外造成的数据丢失。因此,在实际应用场合时就需要考虑如下几个方面的因素:存储的数据量的大小;每次更新数据量的大小;数据量更新的频度;是否为增量数据的存储;对于数据校验和冗余的考虑。
3.应用实例
本节以应用实例分析不同场合的数据存储应用。以下应用方案的主控单片机均采用STM8S105K4,片内集成1K字节EEPROM存储器。
3.1.智能电表应用
在智能电表应用中的一个重要的问题就是数据的保存和数据的安全,不仅要求数据要及时的保存而且要求所保存的数据不能有错误,所以重点需要考虑的是数据的冗余和校验。出于成本和数据安全的考虑,可以采用两种方案实现电量计量,一是当电量有变化时周期性将当前的电量存入EEPROM中;二是只在意外断电时将当前电量存入EEPROM中。第一种方案需要考虑的是EEPROM的擦写次数是否能满足使用要求。第二种方案需要考虑的是备用电源的供电时间能否满足存储时间的要求。
前一种方案,单片机每隔10秒向EEPROM存入写入一次当前的电量,如果当前电量与前一次写入的值相等则不写入以节约EEPROM的写入寿命。存储时采用不固定的存储地址,从0地址开始每次写入两次数据,占用8个字节,作为备份。下次写入时将写入地址向后移动2个数据的宽度,即8个字节。循环写入整个EEPROM的空间,如此可以计算出(1024 * 300,000次) / 8 = 38,400,000次,每隔10秒存储一次大约可以使用12年。
后一种方案,单片机的ADC管脚连接电压采集转换,利用采集到的ADC值判断当前主电源的供给状况。一旦ADC值降低的某一阀值则认为主电源断电,开始采用备用电源供给。备用电源采用大电容的方案,单片机写入双备份8个字节的时间大约为50ms,写入时的电流约为2mA,单片机的运行电流(5V)约为8mA。假设电容从5V放电到3.8V,通过计算可以得知0.05s * 0.01A / (5V - 3.8V) = 417uF。故在系统的供电电源上并联两个470uF的电容即可完全满足主电源掉电后的存储电源供给。
3.2.车载收音机应用
车载收音机的应用方案需要考虑两块存储空间的安排,一块是寄存 器表区域,存储收音机调谐器寄存器表的信息。数据量大约68个字节,这部分存储信息在出厂时写入后禁止修改。一块是用户参数值区域,用于保存收音机运行时用户设置值的空间。大约需要100个字节,其中包括开关机信息、收音机频率信息、音量音色信息等等,存储时不会一次刷新整片存储区域,一般只会修改几个字节的信息。
按照车载收音机存储空间的安排,可以将1K的EEPROM空间按照128个字节一块的大小分割成8个块。第0块用于存储寄存器表,出厂时一次写入后禁止改写。从第1块到第7块组成一个循环链表作为用户数据的存储,每次上电选择相邻的两个块作为当前存储空间,下一次上电选择的两个存储空间向后移一个。如第一次上电选择1、2两个块,第二次上电选择2、3两个块,以此类推,使得EEPROM的每个块的擦写次数平均化。EEPROM空间分配如下图1所示,开机流程如下图2所示,遍历每个块直到找到有效的块并读出上次断电前存储的设置值,如果直到第7块都没有找到有效块则载入默认值。确定有效的设置值后初始化写入主数据块和备份数据块一次,程序运行时如果有设置值的改变则依次修改主数据块和备份数据块。如果遇到意外断电,至少可以保证一个数据块中的内容是合法有效的。
图 1存储块分配
图 2程序开机流程
4.总结
综上所述,本文介绍了两种常见的单片机存储应用实例,均通过STM8S内置EEPROM实现存储。设计的方案符合设计要求并具备低成本、抗干扰等优点,适用于一般单片机存储的应用。
参考文献:
[1]STM8 CPU programming manual, STMicroelectronics, 2009.
[2]How to program STM8S Flash program memory and data EEPROM, STMicroelectronics, 2009.
[3]AT24WCxx DataSheet,ATMEL,2000.
[4]《一种延长EEPROM使用寿命的方法》,《航空计算技术》1995年 第2期
[5]《24系列串行EEPROM的正确选用》,《电子技术(上海)》1998年 第2期