摘要: 本文结合PIC16F877A单片机采集系统,采用二线制I2C串行总线方式,给出铁电存储器FM24C64与PIC16F877A单片机的硬件接口电路图,简化线路板的空间。而且,还介绍了关于铁电存储器FM24C64的基本时序,读写过程,及其软件设计的步骤。这种设计方案节省功耗、成本,克服了EEPROM或者其他非易失性存储器的不足,提高了采集系统工作稳定性和可靠性,可以广泛的用于PIC单片机产品的开发和研制。关键字: 铁电存储器;FM24C64;PIC16F877A;I2C总线;单片机中图分类号: TlP274.5 文献标识码: A The Application of Ferro-Electric RAM FM24C64 to Data Processing
and Correspondence of PIC16F877A Single Chip Microcontroller Data
Acquisition System Li Fuwei (Changsha Institute of Mining Research, Hunan Changsha, 410012)Abstract: With the system of PIC16F877A Single Chip Microcontroller Data
Acquisition, This paper describes the hardware interface circuit
between ferroelectric RAM FM24C64 and PIC16F877A MCU by second-line
I2C serial bus. And, the basic timing, reading and writing process,
and the steps of software designing on ferroelectric RAM FM24C64,
are introduced in this paper. This design proposal saves power
consumption and cost, overcomes the shortcoming of EEPROM or other
non-volatile memory, improves the stability and reliability of
Acquisition system, and can be widely used for research and
development of PIC products.Key Words: FRAM; FM24C64; PIC16F877A; I2C—Bus; Single Chip Microcontroller1.引言 铁电存储器FM24C64是Ramtron采用先进的铁电技术制造的64K位非易失性存储器,使用工业标准两线接口,8 脚SOP
封装,操作温度范围为:-40℃至+85。与其他易失性存储器相比,铁电存储器FRAM有三个明显的优势:第一是其执行写操作的速度与读操作的速度一样快。就总线速度写入而言,FRAM对写入数据变成非易失性数据并没有任何延迟。此外,由于没有首选或默认状态,FRAM并没有擦除操作。同其它随机存储器
(RAM) 技术如SRAM一样,写入数据时无需考虑以前的状态。第二,FRAM
实际上不限制擦写操作次数,不像其它非易失性存储器那样擦写操作次数多了就会失效。第三,FRAM的运行无需电荷泵因此能够降低功耗。当较低的功耗乘以更快的写入速度时,FRAM所消耗电能会降低几个数量级,以更加先进的处理过程进行写操作。而且铁电存储器FM24C64的二线制串行总线及其传输规约进行双向传输,这种方式占用脚位少,占用线路板空间小。 结合以上优点,本文中重点介绍一种以铁电存储器FM24C64为存储器的数据采集系统,使其具有更快的写操作速度和更少的系统开销。此系统使用的处理器是美国Microchip公司生产的PIC16F87X系列芯片中功能最为齐全的微控制器PIC16F877A,可以实现在线调试和在线编程,内部带有8路10位A/
D转换器,8K×14位FLASH程序存储器,368×8位RAM,256×8位的EEPROM,14个中断源和3个定时/
计数器,片内集成多达15个外围设备模块,因此外围电路大大简化,成本降低。最为关键的是美国Microchip公司按I2C总线规范开发的内部配了I2C总线接口的PIC16F877A单片机,其I2C总线接口的主要技术性能有: (1)工作速率可以兼容两种标准,在标准模式下采用100kbit/s,在快速模式下采用400kbit/s; (2)既支持主控制工作模式,也支持被控制工作模式; (3)支持多级通行方式,以及时钟仲裁和总线仲裁; (4)既可以用7位寻址方式,也可以用10位寻址方式; (5)可以支持广播式寻址(或叫通通用呼叫地址寻址)方式; (6)信号线电平可以兼容I2C和SMBus两种总线规范; (7)硬件上可以自动监测总线冲突、启动信号和停止信号,并且自动产生中断标志; (8)支持CPU的睡眠工作方式,即在CPU睡眠方式下I2C端口电路可以接受地址和数据,并且只要MSSP(主控同步串行端口)中断允许,当地址匹配或一个字节传输完毕,都将会唤醒CPU。 将两者有机的结合,对于开发便携式、频繁采集数据的产品有很大的优势。2.铁电存储器FM24C64与PIC16F877A单片机的硬件接口及其工作原理
图1 PIC16F877A单片机采集系统的硬件接口电路图 基于PIC16F877A单片机采集系统的接口电路如图1所示。本系统主要有前端传感器采集系统和PIC16F877A单片机数据处理部分组成。为了采集系统的准确可靠,前端的传感器采集系统共有四路,将有用的模拟信号采集下来,然后通过PIC16F877A单片机的RA0脚,RA1脚,RA2脚和RA3脚(分别为模拟通道1,模拟通道2,模拟通道3和模拟通道4),送入到单片机中,进行处理。处理后的数据再通过RC3脚和RC4脚与FM24C64的SCL脚和SDL脚相连,分别作为时钟线和数据线。 铁电存储器FM24C64采用I2C串行总线接口.符合I2C总线传输协议的规范.其固定地址为1010.同一系统中最大可扩展8片,其器件地址由A2、A1、A0外接电路决定。Philips公司开发的这种I2C总线以两根连线实现了完善的全双工串行数据传送。由于端口输出为开漏结构,所以总线上必须有上拉电阻,如图1,2所示本系统联接了一个4.7Ω的上拉电阻。
图2 多铁电存储器FM24C64与PIC16F877A单片机的硬件接口电路图 WP引脚的接法也是非常灵活的,可以软件控制,也可以用硬件固定,由于本系统中需要更新存储器的数据,不需要写保护,采用硬件直接接地。另外,只需要扩展一个存储器即可,所以为了接线方便,将铁电存储器FM24C64中的A0,A1,A2三个引脚全部接地。如果需要扩张多个存储器(理论上可以扩张8个存储器),可以通过改变A0,A1,A2三个引脚来控制,如图2所示。3.铁电存储器FM24C64的软件编程 此系统软件编程共有三部分组成:数据的采集,数据的处理,数据的存储。本文重点介绍铁电存储器FM24C64与PIC16F877A单片机的通信,其他两部分可以参考其他的书籍和论文。由于美国Microchip公司按I2C总线规范开发的内部配了I2C总线接口的PIC16F877A单片机,为软件编程提供了很大的方便。下面分别介绍I2C总线协议的基本时序及其铁电存储器FM24C64多字节读/写程序过程。 3.1 I2C总线协议的基本时序 I2C总线进行通信的过程就是双方不断握手信号的过程,其握手信号就是如下的基本时序:启动信号、重启动信号、应答信号、停止信号等。它们是通过实现MSSP(主控同步串行端口)内部配置了一个专用的波特率发生器BRG,用来设置串行式中SCL的频率来实现的。 3.1.1 启动信号及其重启动信号 为建立和发送一个启动信号(S)时序,需要用户程序将启动时能位SEN置位。具体地讲,当主机把SDA从高电平拉为低电平,同时SCL信号为高电平时被认为是开始信号,所有的读写操作均由开始信号开始。任何时候发布一个开始信号,一个进行中的操作都会被中止。使用开始信号中止一个操作的同时,FM24C64也会处于开始一个新操作的就绪状态。在操作过程中,如果电压降低到规定电压的最低值以下时,FM24C64执行另外一个的操作之前,也会认为出现了一个开始信号。 重启动信号时序建立过程与启动信号的建立过程相似。当用户程序将RSEN为置1时,如果同时I2C总线处于空闲状态,则会产生一个重启动信号(Sr)时序。 3.1.2 应答信号 当用户程序将应答使能为ACKEN置1时,同时需要应答位ACKDT配合使用,就产生一个应答信号时序。具体地讲,在任何传送中,应答信号出现在第8位数据位被传送之后,在这个状态下,发送方应该释放SDA信号以便由接收方驱动。接受方驱动SDA为低电平,以应答收到一个字节数据。如果接收方没有发出应答信号,那么这是一个无应答状态,操作将被中止。有两个明显的理由使得接收方没有发出应答信号,第一是数据传送失败,在这种状态下,无应答会中止当前操作以便器件被重新寻址,这允许在发生通讯错误时恢复最后一个传送字节。第二种情况也是最常见的情况,接收方有意不做应答以便结束操作。举例说,在读操作中,只要接收方发出应答信号(以及时钟信号),FM24C64会继续把数据发送到总线上,当读操作结束时,接收方不应答最后传送的字节。如果接收方应答最后传送的字节,那么FM24C64在下一个时钟来临时会试图继续驱动总线,而此时主机正在发送一个新的命令,比如停止信号。 3.1.1 停止信号 当用户程序将停止信号使能位PEN置1时,在数据字节发送或者接收完毕之后,在总线上就讲产生一个停止信号(P)时序。具体地讲,当主机把SDA从低电平拉为高电平,同时SCL信号为高电平时认为是停止信号,FM24C64所进行的所有操作都必须以此信号结束,如果一个操作还未完成而此时出现了一个停止信号,那么这个操作将被中止。为了发布停止信号,主机必须控制SDA总线。 这几种基本的时序图可以参考Microchip公司或者Ramtron公司网站相关的资料,也可以参考相关的书籍和文献,参考文献已详细列出。 3.2 铁电存储器FM24C64多字节写操作 所有写操作都是从传送器件地址和内存地址开始的。主机通过设置从机地址的最低有效位为0,来表示一个写操作。寻址后,主机传送数据的每个字节到存储器,存储器收到后发送应答。如图3所示为FM24C64多字节写操作时序。 任意数量的顺序字节可以被写入存储器。如果内存地址到达顶端,地址计数器将从1FFFH翻转到0000H。与其它的非易失性存储器技术不同,FRAM在本质上没有写延时。整个存取周期有时比一个总线周期还短,这样,在一个写操作后,可以进行任何操作,包括写操作或者读操作。 一次典型的FM24C64多字节写操作的过程如下: (1)用户软件将寄存器SSPCON2的启动使能位SEN置1,建立一个启动信号时序,等待SSPIF位为1; (2)用户软件把发送的器件地址字节(最低位置0,表示写操作)写入SSPBUF缓存器中,然后被SSPSR寄存器逐位的送到SDA引脚上,直到8位发送完毕; (3)PIC单片机的MSSP模块自动接收来自FM24C64的应答信号写入SSPCON2的ACKSTAT位,然后置位SSPIF向CPU发送中断; (4)接着用户软件将地址高字节写入SSPBUF缓存器,启动发送字节,按照第(2),(3)步将地址高字节送入FM24C64中;
图3 FM24C64多字节写操作时序
图4 FM24C64多字节读操作时序 (5)同样,用户软件将地址低字节送入FM24C64中; (6)然后将要传输的数据送入SSPBUF寄存器中,通过MSSP模块写入FM24C64中,依次循环,分别将多字节数据写入到FM24C64中; (7)最后,用户软件将SSPCON2的停止使能位PEN置1,建立一个停止信号时序,等待SSPIF=1产生中断请求,并宣告本次数据写入过程结束。 3.3 铁电存储器FM24C64多字节读操作 多字节读操作的时序,要比多字节读操作的时序复杂的多。执行多字节读操作,主机提供最低有效位置1的器件地址,标明了一个读操作。当接收到完整的器件地址后,FM24C64从下一个时钟开始串行移出所选地址单元的数据,从所选地址开始,主机可以顺序读出任意字节的地址,这样,顺序连读就是多个数据传输的当前地址读操作,每读出一个数据后,内部地址锁存器自动递增。主机每次应答一个字节后,标明FM24C64将读出下一个顺序字节。当读完数据后,用正确的方式终止读操作。如图4所示为FM24C64多字节读操作时序。共有四种正确终止读操作方法: (1)主机在第9个时钟不发应答信号,在第十个时钟发出停止信号。这将在下面图示说明,这也是首选的方法。 (2)主机在第9个时钟不发应答信号,在第十个时钟发出开始信号。 (3)主机在第9个时钟发出停止信号。有可能造成总线竞争。 (4)主机在第9个时钟发出开始信号。有可能造成总线竞争。 一次典型的FM24C64多字节读操作的过程如下: (1)用户软件将寄存器SSPCON2的启动使能位SEN置1,建立一个启动信号时序,等待SSPIF位为1; (2)用户软件把发送的器件地址字节(最低位置0,表示写操作)写入SSPBUF缓存器中,然后被SSPSR寄存器逐位的送到SDA引脚上,直到8位发送完毕; (3)PIC单片机的MSSP模块自动接收来自FM24C64的应答信号写入SSPCON2的ACKSTAT位,然后置位SSPIF向CPU发送中断; (4)接着用户软件将地址高字节写入SSPBUF缓存器,启动发送字节,按照第(2),(3)步将地址高字节送入FM24C64中; (5)用户软件将SSPCON2的启动使能位PSEN置1,建立一个重启动信号时序,等待SSPIF位为1; (6)用户软件把发送的器件地址字节(最低位置1,表示读操作)写入SSPBUF缓存器中,然后被SSPSR寄存器逐位的送到SDA引脚上,直到8位发送完毕,同时,PIC单片机的MSSP模块自动接收来自FM24C64的应答信号写入SSPCON2的ACKSTAT位,然后置位SSPIF向CPU发送中断; (7)将接收使能位RCEN置1,PIC单片机通过SDA引脚开始接收I2C总线上的数据到寄存器SSPSR中,在8位接收完毕后,自动将RCEN清零,同时将寄存器SSPSR数据送到SSPBUF中,
BF,SSPIF自动置1, (8)在第9个时钟脉冲中,用户软件将应答允许位ACKEN置1,把应答信息位ACKDT清0,同时等待SSPIF自动置1,表示一个字节读操作完毕。 (9)依次按照(7),(8)两步连续读取FM24C64中的数据。 (10)当读到最后一个数据后,第9个时钟脉冲中,用户软件将应答允许位ACKEN置1,把应答信息位ACKDT也置1,等待SSPIF自动置1,表示这次读操作结束。 (11)最后,用户软件将SSPCON2的停止使能位PEN置1,建立一个停止信号时序,等待SSPIF=1产生中断请求,并宣告本次数据写入过程结束。 在读写多字节的操作中要特别注意I2C总线初始化,包括数据线和时钟线传输方式,波特率和控制方式的选择以及对各个控制寄存器的赋初值。4.结束语 数据采集包括记录和贮存数据,更重要的是能在失去电源的情况下,不丢失任何资料。在数据采集的过程中,数据需要不断高速写入,对旧资料进行更新,
EEPROM的写入寿命和速度往往不能满足要求。 本文结合PIC16F877A数据采集系统,对铁电存储器FM24C64存储部分作了详细的介绍。按照上述硬件、软件的设计思想,FM24C64在采集系统中得到了成功应用,其中最为典型的应用是仪表(电力表,
水表, 煤气表, 暖气表, 记程车表), 测量, 医疗仪表, 非接触式聪明卡(RFID), 门禁系统,
汽车记录仪(了解汽车事故的黑匣子)等等。随着铁电存储器FRAM的快速发展和优势的突出,使工程师可以运用非易失性的特点进行多次,高速写入,为整个系统节省功耗,
成本,空间,同时增加了整个系统的可靠性。参考文献: [1] 李学海. PIC单片机实用教程——提高篇[Z]. 北京: 北京航空航天大学出版社, 2002.8. [2] 马力人. 铁电存储器FM24C04原理及应用[J].电测与电表. 2002, 39(9): 53~56. [3] 孙树印. 铁电存储器原理及应用[J]. 世界电子元器件. 2004,6: 65~67. [4] 孟臣, 李敏.高性能铁电存储器FM24C256及其在单片机中的应用[J]. 电子技术. 2003,1:38~41. [5] 李晓辉. FRAM铁电存储器的技术原理[J]. 国外电子元器件. 2002, 4: 70~72. [6] FM24C64技术手册. Ramtron公司网站:http://www.Ramtron.com. [7] 郑剑翔. 基于FRAM铁电存储器的可移动数据采集器[J]. 电子技术. 2004, 2: 7~10. [8] 董春霞, 安连祥, 张胜利, 尚丽辉. I2C总线技术及其在智能仪表中的应用[J]. 中国仪器仪表. 2003, 4:
38~40. [9] 李敏,孟臣. 基于I2C总线的铁电存储器及其应用. 电子元器件应用. 2003, 5(12):7~10. [10] 陈志辉. I2C总线在MCS 51系列单片机数据采集系统中的实现.微计算机信息. 2005, 23(1):67~68.作者联系方式 姓名:李富伟 出生年月:1983.04 籍贯:山东沂水 工作/学习单位:长沙矿山研究院检测中心 最后学历/学位:硕士研究生 详细通信地址:长沙市麓山南路343号长沙矿山研究院检测中心 主要研究方向:多普勒微波传感器 邮编:410012 电话:0731-8944994 手机:13873120004 电子邮箱:lfw403@163.com