IC卡数据循环存储及文件管理
文章出处:http://www.nexussmartsolutions.com 作者:中国电子网 人气: 发表时间:2011年09月18日
绝大多数的IC卡采用的都是I2C总线型的EEPROM存储器。在现场数据记录系统中,经常需要保存的是当前时刻之前一段时间内的数据。由于EEPROM单字节写入时间太长,不易采用数据在存储器中内整体位置移动的方法管理;而单纯采用自存储器顶端向下顺序写入的方法,会出现存储器写满的现象。为解决这个问题,我们设计了环型存储的管理方法,使用首尾相接的存储环,配合以目录管理功能,完成顺的循环写入,实现了EEPROM存储器内文件的的高效保存和管理。
1 存储器及文件目录结构
这里以1片4KB的I2C总线型EEPROM为例。微处理器采用Atmel的AT89S52;EEPROM的0000H~003FH作为IC卡内文件的目录管理区,为直线结构;目录区最多可以记录30个数据文件。存储器及目录结构如图1所示。0040H~0FFFH设计成首尾相接的环型存储结构,用来作为文件存储区。数据文件从0040H处开始依次记入,每写入一个字节,地址指针自动加1,然后判断该指针是否到了存储环的交界处。地址过界,即地址大于0FFFH时,将写入地址指针再修改成0040H,将最早形成的文件记录自动覆盖掉。AT89S52内部RAM的40H~7FH作为EEPROM文件目录区的映像,系统复位后由单片机将EEPRM中0000H~003FH的内容读出并记入到该映像区。每一组现场数据作为一个记录文件输入后,单片机都要及时修改目录映像中当前文件的结束地址。每建立一个新文件记录,映像区整个数据都要向地址增大方向移动2个字节,超出7DH的自动丢弃。新建立的文件首位地址记入40H~43H,最后将该映像再重新写回到EEPROM目录区。文件目录中只有当前文件记录了起始地址和结束地址。当前文件的起始地址是前一文件结束地址的下一个地址,因此在前文件只记录其起始地址。目录区没有文件的空间用#0FFH填充。另外,每一个文件的长度不应超过文件数据存储区的总长度。单个文件的长度越短,存储器可存储的文件数越多。存储器的大小可视一般记录文件和系统要求而定。
2 存储器清除及文件建立
在IC卡第一次使用之前,首先应该通过功能程序将卡内目录管理区清空,即将0000H~003DH写入#0FFH.。003EH写入#00H,表示卡内没有文件。003FH写入自定义的卡编写,这一过程需要0.6s完成。只有使用经过初始清除处理的IC卡,才能保证后续文件建立和数据写入的正确性。
文件的建立依赖于系统的功能指令。当系统得到建立新文件的指令时,立即启动新文件建立程序,完成文件起始地址配置以及目录区管理,具体过程见图2。
图2
3 文件写入及目录管理
文件数据的写入按照I2C总线规约逐字节写入。特殊之处在于,每写完一个字节之后,地址指针加1,调整后的指针如果超过0FFFH,则重新高速为0040H,这将意味着“吃掉“(覆盖掉)最早建立的文件或其它在前文件。这里,通过目录管理了程序找出被“吃掉”的文件,并将从目录中删除。由于在所选用存储时已经有效使存储空间远大于单个文件的长度,因此不会出现同一个文件“吃掉”自身的情况。只有当多个文件的总长度超过存储空间时,才会出现在前文件被“吃掉”的现象。不过,被吃掉的文件永远是最早形成的文件,是按照系统设计已经可以丢弃的文件。
目录管理的主要功能是:实时统计IC卡内实际文件的数量,记载新建立的文件,及时删除已经被覆盖掉的文件。文件检索过程只有目录映像区进行,根据文件目录映像区的结构,读出所有已记录的在前文件的地址,与当前文件地址比较。如果所检查的在前文件地址进入当前文件首尾地址范围内,则认定为该文件已经被当前文件覆盖,应用从目录中删除。
由于存储器空间被安排成环状结构,会出现当前文件的结尾地址大于开始地址的情况,因此不能简单地根据地址的绝对大小判断覆盖问题。考虑到单一文件的长度远小于存储数据空间,以及目录映像区文件次序的前后排列关系,我们采取自前一文件到最早文件的次序检索方法。如果遇到某个文件被覆盖,则后续文件一定被覆盖。由于在前文件的起始地址存在大于或小于当前文件结尾地址的情况,因此应分两种情况进行分析,统计出有效文件的数量并找到到被覆盖的文件,将其从目录中删除,过程见图3。R2为文件数量计数器,初值为零。
图3
结语
EEPROM循环写入的方法避免了大块数据在存储器内移动的问题,同时消除了存储器写满后影响后续写入的问题,充分使用了存储空间;文件检索和目录修改在RAM映像区完成,加快了程序运行速度。循环写入方案在运达公司一种记录棋谱的电子棋盘中已经得到了应用,实用可靠。此方法在类似产品或记录设备中具有相当的实用价值。