铁电存储器在多MCU系统中应用(附fm24c16的作用FM24C16引脚图及工作程序)

卢伟,周永强 发表于 2021-01-13 05:24:00 收藏 已收藏
赞(1) •  评论(0
400万+工程师在用
400万+工程师在用

铁电存储器在多MCU系统中应用(附fm24c16的作用FM24C16引脚图及工作程序)

卢伟,周永强 发表于 2021-01-13 05:24:00

  作者:卢伟,周永强 来源:现代电子技术

1、铁电存储器技术原理、特性及应用

美国Ramtron公司铁电存储器(FRAM)的核心技术是铁电晶体材料。这一特殊材料使铁电存储器同时拥有随机存取记忆体(RAM)和非易失性存储器的特性。铁电晶体的工作原理是:当在铁电晶体材料上加入电场,晶体中的中心原子会沿着电场方向运动,达到稳定状态。晶体中的每个自由浮动的中心原子只有2个稳定状态,一个记为逻辑中的0,另一个记为1。中心原子能在常温、没有电场的情况下,停留在此状态达100年以上。铁电存储器不需要定时刷新,能在断电情况下保存数据。由于整个物理过程中没有任何原子碰撞,铁电存储器有高速读写、超低功耗和无限次写入等特性。 铁电存储器和E2PROM比较起来,主要有以下优点:

(1)FRAM可以以总线速度写入数据,而且在写入后不需要任何延时等待,而E2PROM在写入后一般要5~10ms的等待数据写入时间;

(2)FRAM有近乎无限次写入寿命。一般E2PROM的寿命在十万到一百万次写人时,而新一代的铁电存储器已经达到一亿个亿次的写入寿命。

(3) E2PROM的慢速和大电流写入使其需要高出FRAM 2 500倍的能量去写入每个字节。

由于FRAM有以上优点,其特别适合于那些对数据采集、写入时间要求很高的场合,而不会出现数据丢失,其可靠的存储能力也让我们可以放心的把一些重要资料存储于其中,其近乎无限次写入的使用寿命,使得他很适合担当重要系统里的暂存记忆体,用来在于系统之间传输各种数据,供各个子系统频繁读写。从FRAM问世以来,凭借其各种优点,已经被广泛应用于仪器仪表、航空航天、工业控制系统、网络设备、自动取款机等。

在设计的碳控仪系统中,由于对控制碳势适时性的要求较高,而且系统由2个子系统构成,每个子系统都要频繁读写存储器,所以我们把原来的X25045换成FM24C16以满足要求。

2 FM24C16引脚说明及工作过程

FM24C16-P(8脚双列直插)外形图及引脚定义如图1及表1所示。

 

FM24C16是串行非易失存储器,存储容量为2 048×8b,共分8页,每页256B;工作电压为+5V;接口方式为工业标准的2线接口:SDA和SCL;功能操作和串行E~PROM相似,有读和写两种操作状态,读、写时序和I2C总线类似。

FM24C16的写操作可以分为2种:字节写和页面写。字节写就是每次写入单个字节,页面写可以一次写入整页(256B)的数据。而且,由于没有写延时,数据写入速度很快(一般为μs级),特别是在页面写的时候,不需要数据缓冲,可以一次写入256B的数据,真正实现页面写,这是其他E2PROM做不到的,比如AT24C16,在页面写的时候,每次最多能写入16B数据。

FM24C16的写操作时序中可分为起始位(START)、数据位、从应答位、停止位(STOP),其中,从应答位(因为FM24C16为从器件,MCU为主器件,所以称为从应答)是FM24C16在每接收一个字节数据后发出的应答信号,是检验数据写入是否成功的惟一标志。写入过程为:MCU通过SDA,SCI。发出起始位,然后从SDA输出从器件固定地址位:1010,再输出3b页选择位(选择写入数据到FM24C16的哪一页),再输出写控制位0(读为1,写为0),然后接收来自FM24C16的从应答位,如果没有收到从应答,则退出操作。在接收到从应答后,MCU从SDA串行输出8位FM24C16字节地址以确定写入数据的字节单元,并在收到从应答后发送1b数据写入到FM24C16,然后等待从应答信号确认数据写入成功。如果是字节写,则由MCU发出停止位,结束写操作。如只是页面写,MCU输出第2个字节数据,FM24C16判断出MCU要继续写入数据后,自动使其内部的地址指针加1,并把数据写入到加1后的字节单元,然后给出从应答,MCU就继续写入数据到FM24C16。页面写操作时,当地址指针到7FH(页尾地址)单元的时候,在下一个写入周期时自动翻转到00H,写入的数据覆盖掉00H单元原来的数据。

具体写操作时序图和后面的读操作时序图比较繁琐,在这里不给出,如果需要,可以登录到Ramtron公司网站查阅技术资料.也可以仿I2C总线时序图。

FM24C16读操作比写操作较为复杂,相应也可以分为2种:字节读和页面读,相应于字节写和页面写,两种读的功能也是单字节和整页的区别。读操作的另一种分法可分为:立即读和任意读(包括连续读),其区别在于立即读是在写人数据后马上读数,而任意读和连续读则是随时读,所以,在他们操作时,必须先执行伪写,然后再读数。所谓伪写,是指执行写操作到写入数据之前,其目的是确定要读出的字节单元地址。下面对任意读的操作过程给予说明:执行写操作到写人数据前,也就是在收到输入字节单元地址后的从应答后,MCU再发送起始位,然后发送从器件固定地址(1010)、3b页选择位和读控制位1,在收到从应答后,MCU从FM24C16里面读出1 B的数据。如果只读1 B的数据,则MCU发送一个无需应答信号,然后发送停止位结束读操作。如果是页面读,MCU就发一个主应答信号,继续读下一个字节数据,直到读出最后一个字节数据后,MCU发出无需应答信号和停止位结束读操作。

在对FM24C16进行读、写操作的过程中,应该注意以下2个问题:

(1)时序问题,这主要是指SDA,SCL的高低电子的时序。如果在读、写过程中时序不对或者不稳定,都会引起读、写失败,所以为了保证稳定,可以在程序中适当加入NOP语句延时,但不要过多,以免影响读、写速度。

(2)SDA数据只能在SCL为低期间变化,在SCL为高期间,SDA数据要保持不变否则会被错误地认为是控制位而不是数据位,导致读、写失败。

3、应用接口及程序

FM24C16与单片机接口电路非常简单,下面以碳控仪系统中的应用为例给予说明,并给出部分子程序。应用接口图如图2所示,系统中采用2片AT89C55单片机,用其P2.0和P2.1口与SDA,SCL相连接,在SDA和SCL引脚接1.8kΩ的上拉电阻到+5V,工作
电源也为+5V,WP引脚接电源地以保证可以任意写入数据。2片AT89C55用P1.0,P1.1作为通讯口,来确定谁操作FM24C16:片1操作前,检测P1.0口,如果为高,则置低P1.1口,向片2发出占用FM24C16信号,然后再检测P1.0口,还为高,则进入操作,若为低,则退出操作并把P1.1口置高;如果P1.0口为低,则说明片2占用FM24C16,片1就放弃操作,等待下次查询和操作。片2的操作相对应于片1。这样,FM24C16不仅作为了公共数据区,而且也成为了2片MCU的一个模拟的通讯口,而且理论上来说,1片FM24C16上可以挂很多MCU,而可以省去不必要的MCU间的通讯。这就需要FM24C16承受快速、频繁读写,这是其他E2PROM望尘莫及的。

下面给出FM24C16的页面写和任意字节读汇编子程序。程序经过应用验证,效果良好(为保证稳定性,可以在相应地方加入空语句以延时)。


页面写子程序:
PAGE-WR: ACALL START_BIT
MOV A,#10100000B
MOV R7,#4
ACALL SHFTO
;SHFTO为送位子程序,以上3行送
1010到FM24C16
MOV A,#20H
MOV R7,#3
ACALL SHFTO
;以上3行确定写FM24C16的00l页
MOV A,#00H
MOV R7,#1
ACALL SHFTO ;以上3行送写控制位0
ACALL SlAVE_ACK
;SLAVE-ACK为从应答子程序,在此检测
从应答位
MOV A,#00H
MOV R7,#8
ACALL SHFTO
;以上3行确定写入数据首地址为00H
ACALLSLAVE-ACK ;检测从应答位
MOV R0,#00H ;R0中为被写人数据
所在单元首地址
MOV R4,#7FH ;R4中为写入字节数
(现为256B)
NEXT-DATA:MOV A,@R0 ;调入第1个写入数据
INC R0 ;R0指向第2个数据所在单元地址
MOV R7,#8
ACALL SHFTO;写入数据
ACALL SLAVE-ACK ;检测从应答位
DJNZ R4,NEXT-DATA
;循环写入下一个字节数据
ACALL STOP-BIT
;STOP-BIT为停止位,结束写操作(此处没有写延时等待)
RET ;返回,程序结束


读任意地址子程序:
SELECT-RD:ACALL START-BIT
ACALL START-BIT
MOV A,#10100000B
MOV R7,#4
ACALL SHFTO
MOV A,#20H
MOV R7,#3
ACALL SHFTO
MOV A,#0FOH
MOV R7,#1
ACALL SHFTO
ACALL SlAVE-ACK
MOV R5,#00H
MOV R7,#8
ACALL SHFTO
ACALL SlAVE-ACK
;以上为伪写,确定读FM24C16的001
00H单元数据
ACALL START-BIT
MOV A,#10100000B
MOV R7,#4
ACALL SHFTO
MOV A,#20H
MOV R7,#3
ACALL SHFTO
MOV A,#0FOH
MOV R7,#1
ACALL SHFTO ;上面3行送读控制位1
ACALL SlAVE-ACK
MOV R5,#00H ;清R5,以存储读出数据
MOV R7,#8 ;R7作读出位记数器
CLOCK8: SETB SCL
MOV C,SDA
CLR SCL
MOV A,R5
RLC A
MOV R5,A
;以上6行读出FM24C16送来的1位
DJNZ R7,CLOCK8 ;循环读出1B数据
ACALL NO_ACK
;NO_ACK为无需应答位子程序
ACLL STOP_BIT ;停止
RET ;程序结束

打开APP阅读更多精彩内容
赞(1)

收藏

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉

相关话题

评论(0)

加载更多评论
相关文章

分享到

QQ空间 QQ好友 微博
取消