FM31256的基本结构及原理

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

FM31256的基本结构及原理

摘要FM31256是一种基于I2C总线、采用铁电体技术的多功能存储芯片。除了非易失存储器外,该器件还具有实时时钟、低电压复位、看门狗计数器、非易失性事件计数器、可锁定的串行数字标识等多种功能。文章主要介绍了FM31256的基本功能、原理,并结合实例给出了其在电磁铸轧电源控制装置中的具体应用方法。

关键词I2C总线铁电体技术 RTC MSP430F

FM31256是由Ramtron公司推出的新一代多功能系统监控和非易失性铁电存储芯片。与其他非易失性存储器比较,它具有如下优点:读/写速度快,没有写等待时间;功耗低,静态电流小于1 mA,写入电流小于150 mA;擦写使用寿命长,芯片的擦写次数为100亿次,比一般的EEPROM存储器高10万倍,即使每秒读/写30次,也能用10年;读/写的无限性,芯片擦写次数超过100亿次后,还能和SRAM一样读/写。

铁电存储器(FRAM)的核心技术是铁电晶体材料。这一特殊材料使铁电存储器同时拥有随机存取存储器(RAM)和非易失性存储的特性。本文介绍了FM31256的主要功能,并具体给出了基于嵌入式C语言编写的存储器读/写程序。

1 FM31256的基本结构及原理

FM31256由256 KB存储器和处理器配套电路(processor companion)两部分组成。与一般的采用备份电池保存数据不同,FM31256是真正意义上的非易失(truly nonvolatile)存储器,并且用户可以选择对不同的存储区域以软件方式进行写保护。

FM31256 器件将非易失FRAM与实时时钟(RTC)、处理器监控器、非易失性事件计数器、可编程可锁定的64位ID号和通用比较器相结合。其中,通用比较器可提前在电源故障中断(NMI)时发挥作用或实现其他用途。采用先进的0.35 μm制造工艺,这些功能通过一个通用接口嵌入到14个引脚的SOIC封装中,从而取代系统板上的多个元件。存储器的读/写以及其他控制功能都通过工业标准的I2C总线来实现。

图1为FM31256的原理图。其中,SDA和SCL引脚用于与CPU进行数据交换和命令写入,数据输出部分均具有施密特触发器,以提高抗干扰性能;同时,SDA 作为二线接口中的双向信号线,集电极开路输出,可与二线总线上其他器件进行“线或”。A1~A0为器件地址选择信号,即总线上可同时使用4个同类器件。正常模式下,PFI引脚分别为比较器的输入(不可悬空),CAL/PFO引脚输出PFI 引脚的输入信号与1.2 V参考电压之间的比较结果;校准模式下,CAL/PFO引脚将输出512 Hz的方波用于时钟校准。CNT2~CNT1是通过备份电池支持的事件计数器的两路输入端,通过边沿触发启动计数器,触发沿由用户自由选择。

X1和X2晶振引脚均为高阻引脚,两引脚之间的距离须小于5 mm;即使信号位于板内层,也不允许信号线靠近X1和X2引脚。在晶振引脚周围使用接地保护环,内部或板反面使用接地保护敷铜。

3.2 存储区访问程序设计

对FM31256存储器访问操作过程中,微处理器处于主机地位,器件始终处于从机地位。根据上述对FM31256的分析,可以把所有的通信过程归纳为3种类型:①单脉冲,如Start、Stop、Ack、Nack;②字节发送,如从机地址、目标地址和数据传送;③字节接收,如读操作中的数据传送。因此只要把这些操作以子程序的形式编写好,所有的通信操作就可通过调用这些子程序来完成。这里以MSP430F149微处理器的嵌入式C语言编写。设微处理器端口P6.6为数据线(SDA);P5.4为时钟线(SCL)。

限于篇幅,本文不作详细介绍,只给出模拟I2C总线及字节写入、读出的部分C语言程序:

#defineRTC_SDABIT6

#defineRTC_SCLBIT4

void FM31256_Start(void) {/*FM31256启动程序*/

P6OUT |=RTC_SDA;// SDA=1

P5OUT |=RTC_SCL;// SCL=1

delay(IIC_DELAY);

P6OUT &=~ RTC_SDA;// SDA=0

delay(IIC_DELAY);

P5OUT &=~ RTC_SCL;// SCL=0}

void FM31256_Stop( void ) {/*FM31256停止程序*/

P6OUT &=~ RTC_SDA;// SDA=0

delay(IIC_DELAY);

P5OUT |=RTC_SCL;// SCL=1

delay(IIC_DELAY);

P6OUT |=RTC_SDA;// SDA=1

delay(IIC_DELAY);}

void FM31256_Send_Ack( void ) {/*FM31256应答程序*/

P5OUT &=~ RTC_SCL;// SCL=0

P6OUT &=~ RTC_SDA;// SDA=0

P5OUT |=RTC_SCL;// SCL=1

delay(IIC_DELAY);

P5OUT &=~ RTC_SCL;// SCL=0}

void FM31256_Send_noAck( void ) {/*FM31256不应答程序*/

P5OUT |=RTC_SCL;// SCL=1

delay(IIC_DELAY);

P5OUT &=~ RTC_SCL;// SCL=0}

说明:SCL线是高电平时,SDA线从高电平向低电平切换,表示起始条件;当SCL是高电平时,SDA线由低电平向高电平切换,表示停止条件。相关的确认时钟脉冲由主机产生,在确认的时钟脉冲器件发送方释放SDA(高电平),在此期间接收方须将SDA拉低。

void FM31256_transfByte_to_IIC( unsigned char tran_byte ) {/* CPU 字节发送程序*/

unsigned char i , current_bit =0x80;

P5OUT &=~ RTC_SCL;

delay(IIC_DELAY);

for( i=0; i <=7; i++ ) {

if ( tran_byte & current_bit )

P6OUT |= RTC_SDA;

else

P6OUT &=~ RTC_SDA;

current_bit >>=1;

delay(IIC_DELAY);

P5OUT |=RTC_SCL;//SCL=1

delay(IIC_DELAY);

P5OUT &=~ RTC_SCL;//SCL=0

delay(IIC_DELAY);

}

}

unsigned char FM31256_receByte_from_IIC( void ){/*CPU字节接收程序*/

unsigned char mvalue, i, rece_data =0;

P6DIR &=~ RTC_SDA;//设置为输入方向

P5OUT &=~ RTC_SCL; //SCL=0

delay(IIC_DELAY);

for(i=0;i

rece_data = rece_data<<1;

P5OUT |=RTC_SCL;//SCL=1

delay(IIC_DELAY);

mvalue = P6IN & RTC_SDA;//当前位的值

if( mvalue )//接收位为高

rece_data = rece_data | 0x01;

else//接收位为低

rece_data = rece_data & 0xFE;

P5OUT &=~ RTC_SCL;//SCL=0

delay(IIC_DELAY);

}

P6DIR |=RTC_SDA;//P6.6输出

return(rece_data);//返回收到的字节

相关文档
最新文档