新闻  |   论坛  |   博客  |   在线研讨会
[原创]如何使用片上flash来模拟EEPROM
jobs | 2012-06-22 23:32:45    阅读:2576   发布文章

Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable { mso-style-parent:""; font-size:10.5pt;"Calibri","sans-serif";}
如何使用片上flash来模拟EEPROM
简介
EEPROM是微处理器用于读、写及更新变量的最理想的非易失性存储器。在没有内置EEPROM的Stellaris微控制器里,我们可以将内部的Flash仿真成EEPROM来达到目的。虽然可以使用外部的EEROM,但是其受成本、引脚及PCB布局的限制。因此,使用内部flash来仿真EEPROM是一个很好的解决方案,本应用笔记将进行详细阐述,并提供了EERPOM仿真驱动器及一个示例程序。
概述
Flash内存允许变量单独改变(位1至位0),但是不能修改变量(位0至位1),只能将其删除。另外,flash的读写是通过页的擦除来执行的,这样,对于存放在页的变量来说,页的容量实在太大了。在stellaris微控制器上的页面大小是1K字节,而且这些flash是有读/写次数限制的。
通过对上面两者的优缺点分析,使用flash来仿真eeprom的方案已经可行。一个典型的方案就包括了使用对flash进行划分逻辑分区,将其分成多个eeprom使用的页。将使用频率最高的变量存放在一个称为活动页(active page)的eeprom页内。使用一个入口结构体变量(entry)来进行对活动页操作。入口结构体包括一个标识符变量(类似于首地址)及数据。在执行读操作时,程序从活动页的页尾开始搜索标识符变量,匹配后将与之指向的数据返回。在执行写操作时,程序将标识符与数据变量写入到在活动页内下一个有效的入口结构体变量里。一旦此活动页写满,程序会将使用频率最高的变量的入口结构体变量全部拷贝到另外一个页内,并将该页定义为活动页。之前的页将会擦除,在适当的时候重新使用。就像划分一个循环缓冲那样来存储数据。
部署EEPROM仿真
本应用笔记将提供一整套仿真EEPROM的驱动。在驱动程序集里,提供了读、写及清除eeprom的控制函数。使用这些驱动函数,工程师可以将内部flash的某些区域划分成为EERPOM来使用。工程师还可以设定eeprom页的大小,实际上,也可以eeprom的页数。
每个EERPOM页的起始处有两个32位的状态字。仿真软件通过这两个32位状态字来识别页面的属性,例如已清除,活动页,在使用页。具体的判断方法为:当两个状态字均为清除状态时,表示该页已完成清除;如果第一个状态字为非清除状态,第二个为清除状态,则表示为活动页;如果两个状态字均为非清除状态,而表示该页为在使用状态。(具体参见附件1表1)
页面其余数据位用来存储入口结构体变量。受stellaris的限制,每个32位字在两次擦除之间只能编程1次。也正是因此,每个入口结构体变量为32位长,包含8位标识符及16位数据。因此,每页入口结构体变量有((pageSize / 4) - 2 status words)。对于1KB的页长度,共有254个入口结构体变量。
EEPROM仿真驱动详解
这部分请查询附件1第6页
附件1

TI Stellaris,《Using Stellaris® Microcontrollers Internal Flash Memory to Emulate EEPROM》http://share.eepw.com.cn/share/download/id/76846

示例程序包 http://share.eepw.com.cn/share/download/id/76848

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客