新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于嵌入式MCU数据Flash的数据存储及管理方法研究与实现

基于嵌入式MCU数据Flash的数据存储及管理方法研究与实现

作者:刘源杨 马建辉 庄汝科 王岗时间:2013-09-23来源:电子产品世界收藏

  摘要:本文设计了一种利用内部数据存储非易失性数据的方法,它将数据的若干扇区划分为多个数据分区,不同数据分区存储数据在不同历史时间的拷贝,最新数据分区存储最新的数据拷贝;在数据读操作进行时,计算最新数据拷贝的存储位置,直接读取该地址;在数据写操作进行时,判断数据写入位置是否已经被擦除,如果写入位置未擦除,将数据写入下一个分区,同时将当前分区中的其他数据复制到下一个分区;如果写入位置已经擦除,直接将数据写入当前分区中。该方法实现了类似的数据读写方式,操作方便,应用接口简单,而且可以尽量避免扇区擦除操作,提高存储效率,同时提高内部数据Flash的使用寿命。

本文引用地址:http://www.eepw.com.cn/article/170167.htm

  引言

  在系统设计中,经常需要存储一些非易失性的数据,在笔者开发的电动汽车仪表盘中,需要存储总里程、小计里程、电机故障等其他信息,采用支持对字节读写的实现,操作起来和RAM一样简单方便,但同时会在大批量产品的生产中带来成本问题和维护问题。在有数据Flash的中,采用数据Flash代替实现非易失性的存储,便可以节约成本且无需维护,笔者所设计的仪表盘采用内置4KB数据闪存的MC9S12HY32做为处理器,足以满足仪表盘要求。用Flash存储数据的传统方式是为每个数据分配固定的存储地址,由于Flash在进行写操作时需要先擦除数据所在的整个扇区[1],对一个数据进行写操作便会造成对扇区内其他数据的擦除,由于擦除操作耗时较长,不仅效率低,影响系统的实时性,而且为了避免丢失其他数据需要相当复杂的处理,对MCU的RAM空间也有一定的要求。如果写入数据失败,会造成所写入数据的丢失,如果在擦除扇区后发生掉电,便会造成扇区内所有数据的丢失。不仅如此,由于每次写入操作都需要先擦除扇区,以擦除次数表征的Flash使用寿命也无法满足产品生命周期的要求。本文提供一种利用MCU内部数据Flash存储非易失性数据的方法[2],它不仅操作方便,应用接口简单,而且可以尽量避免扇区擦除操作,提高存储效率,同时提高MCU内部数据Flash的使用寿命。

  总体设计

  通过在MCU数据Flash上建立多个数据分区,存储数据的多个拷贝,避免对Flash固定地址的反复擦除,提高Flash的使用寿命,同时通过数据读写方法的设计和数据分区的管理,避免对Flash扇区的不必要擦除,并最终实现和EEPROM读写很类似的应用接口。具体地,首先根据系统的应用需求和MCU内部数据Flash的扇区大小,合理设置数据分区大小和个数,将数据Flash的若干扇区划分为多个数据分区。在每个数据分区的起始地址设置分区状态字[3],反映数据分区的存储历史时间,不同数据分区存储数据在不同历史时间的拷贝,当前数据分区存储最新的数据拷贝;同时为每个数据条目建立数据状态字,反映该数据在所在分区内存储地址是否已经被擦除。

  系统上电后,首先根据数据分区状态字查找存储最新数据的分区,将之设置为最新数据分区,并设置其分区状态字为最新分区状态字。在数据读操作进行时,根据最新数据分区及数据在分区内的偏移地址计算最新数据拷贝的Flash存储位置,直接读取该地址。在数据写操作进行时,首先计算该数据的Flash存储地址,然后根据数据状态字判断数据所在的Flash存储地址是否已经被擦除[4],如果写入位置已经擦除,直接将数据写入当前分区中,其他数据保持不变;如果写入位置未擦除,进行分区拷贝操作,即将数据写入下一个分区,将当前分区中的其他数据依次复制到下一个分区,同时将下一个分区设置为最新数据分区,更新最新分区状态字并存储在最新数据分区首地址位置。其设计流程如图1所示。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

上一页 1 2 3 4 下一页

评论


相关推荐

技术专区

关闭