查看完整版本: 非易失存储器X24C45的使用技巧

liyf 发表于 2014-10-5 12:58:59

非易失存储器X24C45的使用技巧

非易失存储器X24C45的使用技巧

摘   要   X24C45是一种性能非常优良的具有掉电自动存储功能的非易失存储器。本文介绍了利用X24C45解决实际应用中由于MCU非上电复位造成的数据丢失的方法;同时还提出了一种双MCU 共享一片X24C45 数据的方法。
关键字      X24C45         非上电复位            数据共享      冲突检测


1引言
X24C45是Xicor公司出品的串行 256位NOVRAM(非易失性RAM),它是按16×16组织的静态RAM,与非易失性E2PROM阵列位对位(bit by bit)重叠。它允许利用软件命令或外部硬件输入端在两个存储器阵列之间传送数据。存储操作(指RAM数据送至E2PROM)在5ms或更短的时间内完成;调出操作(指E2PROM数据送至RAM)在2μs或更短时间内完成。其引脚排列及功能见图1。

2利用X24C45解决非上电复位造成的数据丢失
在常规E2PROM(如24C01,93C46等)的实际应用中,如果要在E2PROM中存储需要经常修改的数据,鉴于E2PROM写次数有限(一般为100万次),因此一般不能随时重写E2PROM,而是将工作数据暂存在MCU的内存中,只有当MCU检测到掉电时,才将数据存入E2PROM中,并在重新上电时调入MCU的内存中使用。这样,就不可避免的存在一个问题:MCU在上电复位后,将E2PROM中的数据调入自带的内存中,开始正常工作,新采集或处理得到的数据取代了上电时从E2PROM中得到的数据,但直到掉电以前MCU内存中的这些数据不会存入E2PROM中。由于各种方面的原因,如看门狗超时,外部干扰等,MCU在电源正常时,也是有可能复位的(注意:此时暂存在MCU 内存中的数据,在本次上电后已改变,但由于MCU没有检测到掉电信号,其值并未存入E2PROM中),于是,非上电复位后的MCU重新读出了本次上电时E2PROM中原来的数据,MCU内存中已经变化的数据被冲掉,造成了有效数据的丢失。
对于上面的问题,目前还没有人提出较好的解决办法。就笔者看来,如果采用常规的E2PROM很难解决这个问题,因为MCU程序根本就无法区分上电复位与非上电复位,即使通过附加其它的硬件电路可以区分出上电复位与非上电复位,但在MCU 非上电复位时其内存中数据的安全性也得不到保障。而在采用了X24C45之后,由于其特殊的存储器结构,这个问题就变得容易解决啦。
X24C45的工作状态转换情况见图2。
从图中可以看出,在上电后X24C45处于只有内部RAM区可读的状态下,为了允许任何写或存储操作,必须由MCU通过串行接口发送“重新调出(RCL)”命令或将X24C45的“RECALL”引脚置为有效,接下来才能再顺序执行“写使能(WREN)”命令和“自动存储使能(ENAS)”命令使X24C45处于RAM读写有效、存储有效、自动存储有效的工作状态。
    从上面的分析可以看出,正常的X24C45的初始化流程应当如图3(a)所示,此时,前面所提出的问题仍然得不到解决(原因如前面所述),但是我们充分利用X24C45的上电自动调出特性,改用图3(b)的流程后,问题就得到了解决。
图3(b)的流程中,在执行“重新调出(RCL)”命令之前,先将X24C45 RAM中数据取入MCU内存中,在执行完X24C45状态图要求流程后,又将MCU内存中的数据重新写回到X24C45的RAM中。在正常上电复位时,MCU读入内存又写回X24C45的是由自动上电调出机制从E2PROM中调出的正确数据,因此不存在数据丢失问题;在非上电复位时,MCU读入内存的是在上电后已经改变的数据,在执行完X24C45状态图要求流程后,X24C45 的RAM中是本次上电时的旧数据,但接下来MCU内存中保护下来的新数据又写回到了X24C45的RAM中作为工作数据,保证了数据不丢失。
3         双MCU共享X24C45数据
随着现代电子技术的发展,在较复杂的系统设计中,往往需要两个或多个MCU通过协作来共同完成一项设计。此时,数据的共享就成为一个急需解决的问题。本文提出了一种采用软件冲突检测机制实现双MCU共享一片X24C45数据的方法,稍加改动也可广泛应用于其他的串行存储器中。
在硬件方面,其简化原理图见图4。将两个MCU的三条I/O线分别直接并联至X24C45的CE(片选)、SK(时钟)、DIO(数据)线,并用下拉电阻接地。由资料可知,X24C45的CE线为高电平有效,当MCU不对X24C45操作时,MCU将其相应的三条I/O口均置为输入,此时由于下拉电阻的存在,拉至低电平,X24C45不被选中。另外,这样的连接也不会产生由于两个MCU同时输出不同的电平而导致MCU损坏的情况。当其中一个MCU要对X24C45操作时,则可以利用CE线与DIO线,在不增加任何硬件资源的情况下,通过图5的冲突检测机制,实现对X24C45数据的共享。
从图4中看出,MCU分为主MCU和副MCU,当某个MCU要对X24C45进行操作时,先检测CE线是否为“0”,如果为“0”,则将其置为1,对于主MCU来讲,在进行操作之前,先将DIO线置“1”一段时间(据MCU的指令周期而定,一般为10个最短指令周期),表示已对SPI总线的占用,然后进行正常的数据读写操作;而对于副MCU,在进行操作正常的数据读写之前,首先要检测DIO线是否为“1”,如果为“1”则表示主MCU已占用SPI总线,重新进行CE状态查询,直到CE变为“0”;如果DIO线为“0”,表示此时可以对X24C45进行读写操作。
通过分析上面的工作流程可以看出,当两个MCU同时进入对X24C45的操作时,主MCU会依靠它的优先权首先实现对SPI总线的占用,副MCU只有在主MCU 操作完成后再进行操作。在其他情况下,首先将CE线置高的MCU将获得对SPI总线的占用,另一片MCU只有等其完成操作后,再进行操作。
参考文献
1X24C45 串行自动存储非易失性RAM数据手册。武汉力源电子股份有限公司,1998

李小路 发表于 2021-7-11 18:27:46

谢谢分享!:D
页: [1]
查看完整版本: 非易失存储器X24C45的使用技巧