DIY编程器网

标题: 基于X24C45芯片的非易失性数据存储设计 [打印本页]

作者: liyf    时间: 2012-1-21 23:45
标题: 基于X24C45芯片的非易失性数据存储设计
在智能化电子产品的设计过程中,经常会遇到一些重要数据的非易失性保存问题。早期普遍采用的是电池维持RAM供电以实现整机掉电后的数据保存。但这样做会由于电池本身的原因,如电池的使用寿命相对较短及某些恶劣环境(高湿高温等)导致电池失效,而引起数据丢失的情况出现。同时电池体积相对较大,会严重限制某些电子产品的微型化设计。   目前非易失性的数据保存方法多采用EEPROM。但EEPROM也有其弱点,一是擦次数有限(多为10万次),二是定入速率慢,这样就限制了其在许多需要频繁更新数据且需高速传输数据场合中的应用。

  本文介绍的存储器芯片X24C45,可以较好地解决上述非易失性数据存储过程中遇到的难题。  1 X24C45的功能特点  X2C45是Xicor公司开发的一种设计思想独特的非易失性存储器。这种器件将RAM和EEPROM制作在同一块芯片上,RAM存储阵列(16×16)的各个bit与EEPROM存储阵列的各个bit一一对应,通过软件指令或外部输入能够使数据在两个存储阵列之间相互传送。其中的RAM存储阵列正常工作时能实现数据与外部芯片的随机存取功能,这样可保证该芯片适合数据快速存取的场合;而在电源电压降至阈值电压时,该芯片能自动将RAM中的当前数据传输至EEPROM中,这样就保证了掉电时的数据非易失性保存。掉电情况在绝大多数系统中都不会频繁出现,故对EEPROM的擦写次数相应地不会太多。而X24C45中EEPROM的擦写闪数又高达100万次,可见X24C45完全能胜任在数据频繁更新的场合实现非易失性存储的任务。  X24C45的引脚图如图1所示。  脚1为片选端,当该脚为高时片选有效,当该脚为低时芯片处于低功耗待机状态,且X24C45中的指令寄存器被复位;脚2为串行时钟端;脚3为串行数据输入;脚4为串行数据输出;脚5为接地端,脚8为电源端;脚7为漏极开路输出,当电源电压降至低于自动存储阀值电压VASTH(VASIT在4.0V~4.3V范围)时,脚7为低,对外部电路发出一个掉电报警或掉电复位信号,可见该芯片同时具有电源监视功能。脚6输入一个低电平时,将会执行由EEPROM将数据传输到RAM的操作。  2 X24C45的指令集及工作时序  X24C45的各种功能主要是由软件来实现。CPU通过DI端口向X24C45中的指令寄存器传送一个指令,以实现某个功能。其指令集如表1所示。  表1 X24C45指令集
指 令格 式功 能
WRDS   STO  ENAS  WRITE  WREN  RCL  READ1XXXX000   1XXXX001  1XXXX010  1AAAA011  1XXXX100  1XXXX101  1AAAA11X写使能复位(写和存储被禁止)   将RAM中数据存储进EEPROM  自动存储使能  将数据写入RAM,地址为AAAA  写使能置位(写和存储被允许)  将EEPROM中数据送回RAM  从RAM中读出数据,地址为AAAA
  由表1可见,所有指令的最高位都为“1”。所以在片选信号CE为高有效时,DI口由低电平跳变出一个时钟周期的高电平,表明开始输入一个指令,其工作时序如图2所示。  由RAM将数据存入EEPROM的操作条件限制较严格,为的是防止对EEPROM的意外写操作(因为EEDPROM的擦写次数有限,不必要的写操作应避免)。所以该存储功能的实现,必须满足以下三个条件同时成立:接收到STO指令;接收到WREN指令;接收到RCL指令或脚6电平被拉低。在将EEPROM的数据送回到RAM中的同时,应使X24C45内部的“前次数据恢复”锁存器置位。另外需要说明的是,在将RAM中的数据存入EEPROM的操作过程中,X24C45的其它所有功能都被禁止。  ENAS指令将X24C45内部的“自动存储器使能”锁存器置位,从而允许在电源电压降至低于自动存储阀值电压VASTH时,自动执行将RAM中的数据存入EEPRO的操作。
                          
                       
                          
                               

  为了少占用CPU的I/O端口,X24C45的DI脚和DO脚通常连接到CPU的同一个I/O口(如图1所示)。READ指令将RAM中AAAA地址的数据读出,该指令的最低位为无关位,这样正好允许在READ指令的第八个时钟周期内将I/O口由输出转换为输入。RAM的读操作时序如图3所示。  WRITE指令将数据写入RAM的AAAA地址中,其时序如图4所示。需要说明的是,RAM中的每个地址存储16bit数据。  3 X24C45应用时需注意的问题  X24C45实际应用时与CPU的连接如图1所示。前面已经提到为节省CPU的I/O端口,可以将DI脚和DO脚连接到CPU的同一个I/O口(PA4)。  在此要特别强调的是,电容C和二极管D本来是没有加上去的,X24C45芯片手册中也没有这样说明。但在实际应用中笔者发现,在没有加上电容C和二极管D的情况下,X24C45会出现掉电时备份数据出错的现象。究其原因,是因为在X24C45中将当前数据由RAM存储到EEPROM时需要一定的时间(该时间典型数值为2ms,最长可达5ms),而且启动自动存储的阈值电压在4.0V~4.3V之间,数据由RAM存储到EEPROM所需要的最低电源电压为3.5V,掉电后电源电压由阀值电压电路和负载的不同而不同。显然,掉电后电源电压由阀值电压下降到3.5V所需的时间如果少于数据由RAM存储到EEPROM所需的时间,就会出现一部分数据因不能被及时备份而丢失的问题,而这种问题的出现如果不采取相应的措施是可能被避免的。图1中的电容C和二极管D可以保证掉电后X24C45电源端的电压由阀值电压下降到3.5V所需时间足够长,从而杜绝掉电时备份数据出错的情况。  4 X24C45相关操作的软件实现

  X24C45与MC68HC05C4单片机的硬件连接如图1所示。下面给出与其对应的有关X24C45的前次数据恢复到RAM和自动存储功能能使设置等操作的软件编程。SAMP:LDA #$1C $1C=00011100STA $04 设置PA2、PA3、PA4为输出LDA #$00STA $00 初始化PA2、PA3、PA4为0LDA #$85 $85=10000101为RCL指令STA $81 将RCL指令送至待发送地址JSR CEHI 调用置CE为高子程序JSR OUTB 调用输出8bit子程序JSR CELO 调用置CE为低子程序LDA #$82 $82=10000010为ENAS指令STA $81 将ENAS指令送至待发送地址JSR CEHI 调用置CE为高子程序JSR OUTB 调用输出8bit子程序JSR CELO 调用置CE为低子程序……CEHI:BSET 2,$00 置CE(PA2)为高RTSOUTB:LDA #$08 准备移出8个bitSTA $84 将8送至计数器LOOP:ROL $81 待发送内容循环左移BCC IS0 C=0转移至IS0BSET 4,$00 送1至DI/O(PA4)BRA IS1 跳转至IS1IS0:BCLR 4,$00 送0至DI/O(PA4)IS1:JSR CLOCK 调用时钟信号子程序DEC $84 计数器减1BNE LOOP 计数器内容≠0跳转RTS 计数器内容=0结束CELO:BCLR 4,$00 将DI/O(PA4)拉低BCLR 2,$00 置CE(PA2)为低RTSCLOCK:BSET 3,$00 置SK(PA3)为高BCLR 3,$00 置SK(PA3)为低RTS

  限于篇幅,CPU对X24C45其它操作的软件编程不再赘述。按照上述硬件、软件的设计思想,已将X24C45成功地应用在电话计费器的设计中。
                          
                       
                          
                               




欢迎光临 DIY编程器网 (http://diybcq.com/) Powered by Discuz! X3.2