图1中的MCU为单片机主控制器,用于控制与作业装置的通信和数据采集、保存、显示,以及键盘扫描等;FRAM是铁电存储器,可保存采集到的数据和采集数据的时间及读写FRAM的地址;身份识别是ID卡只读模块,可用于读取操作员的工作号码以便于责任管理;数据采集通道用的是工业上最常见的RS232总线.它有两个功能,即与作业设备的通信和单片机程序的下载;USB控制器工作在主模式时,可连接海量存储器如U盘,以将数据集中取出后拷贝到PC机进行分析;液晶模块可实时显示工作状态信息;键盘可方便工作人员设置系统参数并向作业装置发送命令。
本系统的软件可用C语言和汇编语言混合编程。C语言简洁高效、可读性好,系统的整体结构和大部分操作都由C完成。但在时序要求比较严格的存储器读写中,采用汇编语言可降低代码编写长度和执行时间。C语言和汇编语言各有特点,混合编程可以利用各自的优点,但编程略有难度,尤其是在有参数传递的情况下。下面重点介绍铁电存储器与单片机的连接和编程方法。
2单片机读写FRAM的方法
本系统中单片机与FM20L08的连接电路如图2所示。
图2中的控制器为国产宏晶STC89LE58RD+型号的8位单片机。它具有增强型8051内核,1 K字节外部RAM,32 K字节FLASH程序存储器。该芯片采用3.3 V电压供电,而且在PLCC封装上额外增加了4个I/O口(即P4口),正好能够满足系统引脚数目需求,可通过串口在系统编程。
为了利用FM20L08陕速的页操作功能,可将单片机的P0口通过地址锁存器LVC573接FM20L08的低8位页地址A10-A3;P2口的低6位接存储器的高6位页地址线,高两位则连接3-8译码器选择芯片,这样,当P27P26为01时,就可以使FM20L08的片选CSM有效;然后将P4口的低三位接FM20L08的最低三位COL地址线。编程时,先设置P4口为0,使能FRAM,然后在P4口每次加一对存储器页读写,每页8个字节,当P4口加到08H时,CSM变高,以完成一次页操作。
FM20L08的页读写时序如图3所示。
由于参考例程非常少,笔者在仔细研究了FM20L08的读写时序后,用汇编语言编写了FM20L08的I/O模拟和总线模式的页读写子程序,下面是其总线模式的测试代码:
/*把EOH为首地址的内部RAM中连续8个字节写入FM20L08,再读出后写入FOH为首地址的单片机内部RAM,再用串口上传到PC机检查*/
/*总线模式页写子程序*/
由于FM20L08在片选信号CSM下降沿时锁存地址信号,所以,此处必须提前将地址送上P0、P2口,否则就会出错。在页读写期间,CSM要保持低有效,芯片将自动检测地址信号变化并做相应操作,如果A16-A3有效不变,A2-A0变化,就可根据写信号WR的高低决定是页写还是页读。
第一次循环时,若P4=0,FM20L08的片选CSM将产生下降沿,并在增加8次后使P4口的最高位(即P4:3)为1,使循环结束,页操作完成。
需要注意的是,LVC573的锁存信号(11脚)不能直接用ALE,否则CSM的下降沿将锁存不到正确的A10--A3地址,从而可能引起FM20L08的读写错误。另外,虽然FM20L08的器件手册上说,在页读写时COL地址并不要求给出,但经过测试,A2-A0(即P4口)的低三位在页读写时,应当给出要读写的正确地址,而COL地址为高阻态时,是否可以正确页操作,笔者未测试。 同时,笔者编写了I/O模式的页读写程序并与之进行比较,结果证明:总线模式比I/O模式在程序空间上要少占用一、两个字节,而在执行时间上,每次页操作至少节省8个指令周期,而且,总线模式的可读性也比较好。但是,设计者在使用不熟悉的芯片时,可以先用I/O模拟总线方式进行操作,这样可以清楚地认识芯片的操作时序,然后再用总线方式编写实际使用程序。
经过测试的I/O模拟总线方式的页读写程序如下:
页读和页写的差别在于:页写时,RD信号可以保持为低或用低有效脉冲取走FM20L08中的数据;页写时,WR信号必须是脉冲,并在下降沿写数据,低电平时,COL地址将发生变化。
以上程序都是在uVision2编译环境中测试的,这个系统的其他部分程序都用C语言完成.在对FM20L08操作时。C程序调用带参数的汇编程序比较复杂,主要是通过寄存器传递,其参数存放规则如表1所列。
本文主要通过指针来传递参数,具体传递操作时,可以在uVision2的DEBUG下观察寄存器的变化。
3结束语
铁电存储器因其读写次数几乎可以接近无限,而且具有速度快、功耗低和操作方便等优点,日益受到芯片生产商和电子工程师的关注,本文尝试了在数据采集系统中用FRAM实时保存数据的方法。这个系统在硬件设计上还可以根据需要再进行改进。以使软件编程更能发挥铁电存储器的易用性。