利用基于闪存的MCU实现用户数据存储
采用微控制器的大多数设备还需要某种机制来存储在断电时仍要被记住的那些设置数据。例如,在更换电池后记不住预设电台的收音机肯定不会在市场上取得很大的成功。用户希望喜爱的电台、预设温度、参数选择和其他永久性信息能长久保存下来供每次开机时直接取用。为了满足这种用户需求,设计师一般使用串行EEPROM。这些器件又小又便宜,具有很长的历史,设计工程师用起来得心应手。但在今天对成本极其敏感的市场下,即使这样一个廉价的器件也可能突破成本预算。因此许多设计师试图寻求并利用已经包含在微控制器芯片中的资源:程序闪存中剩余的空间。
过去,许多微控制器使用ROM或可紫外线擦除的EPROM来存储程序指令。但现在越来越多的微控制器转用闪存技术存储代码。选择闪存的主要理由是,如果在程序代码中发现错误,闪存数据很容易被擦除和更新。
大多数微控制器具有读取程序空间中存储数据的机制。基于冯·诺伊曼架构的处理器,如TI MSP430,可以使用任何寻址模式读取程序闪存。哈佛架构处理器一般利用特殊的机制将数据从程序空间传送到数据空间。具有闪存管理功能的其他MCU包括:
1. 包含MOVEC(移动常数)指令的非常流行的8051处理器系列;
2. 包含TBLRD和TBLWR(表读和表写)指令的Microchip PIC18系列;
3. 具有伪冯·诺伊曼架构的美信MAXQ微控制器系列,它们允许通过简单的MOVE指令访问闪存程序存储空间(见图1)。
[i]
[img]http://usbing.com/uploads/embed/store/2008625745244677801.jpg[/img]
图1:在像美信MAXQ2000这样的伪冯·诺伊曼MCU中采用的数据交换允许任何存储器块被用作代码或数据存储器。 [/i]
但即使能够从随机闪存位置读取数据,完整的非易失性存储器子系统也必须能够随机修改闪存中的数据。这意味着需要解决两个问题:首先,一旦某个闪存位置被写入,那个位置的数据只能通过擦除整个闪存块(通常128字节或以上)进行修改;其次,闪存的读写次数非常有限。
本文将介绍如何构建一个能够解决这些问题、并使用闪存块模拟随机写入的机制。虽然本文的用例是MAX2000,但原理适用于支持读写和擦除闪存的用户代码的任何处理器。本文讨论的方案已经被用于采用MAXQ3180三相模拟前端和MAXQ2000的三相电表参考设计。
[b]
[color=red'][1][/color]
[2] [3] 下一页[/b]