3.9 报警及LCD显示电路
uPD789167单片机以串行通信的方式驱动LCD模块实现显示,但LCD平常不显示时断开电源以节省电能。另外,设置有蜂鸣器报警电路,以便在刚发现故障时提醒用户。
4 低功耗设计技术
本燃气表的设计是:不旦要有CPU保持实时时钟走时、带看门狗,而且功耗要很低(平常的工作电流略大于30μA),为此采用了如下一些措施,以保证本机的低功耗运行。
4.1 采用低功耗的器件
本设计中尽可能采用低功耗器件,如3V稳压器采用了理光的低功耗产品;采用低功耗的可自保持的阀门,只有在开关过程中才会耗电。
4.2 采用低耗电的电路设计
(1)电池电压降至3V后才给CPU及其他外围电路供电,使芯片工作于低电压时消耗电流较少。
(2)SAM模块和IC卡座平常断电,只在读写认证时才供给电源。
(3)在不影响CPU电平判断的情况下,使用大一些的电阻(如开盖检测和电池检测电路中)。
脉冲采样电路也只在有脉冲时瞬间耗电。
4.3 软件配合实现低功耗
(1)让单片机尽量低速工作,软件只在访问SAM模块及CPU IC卡时才让3.58MHz的晶体振荡,平时只用32kHz的晶体就可以完成工作。
(2)合理配置CPU的各个管脚,输出脚输出合适电平,使平常不输出或吸入电流;输入脚平常一般不用内部上拉电阻而用外部电阻,因为内部上拉电阻较小,掩模时典型值为30kΩ,当输入低电平时耗电较多;CPU多余的管脚设置为输出模式,且输出低电平。
(3)CPU在32kHz晶体下工作时,处于HALT模式,每0.5秒时间到、或中断唤醒一次,软件检查几个中断标志、计数、走时、清狗后立即转入HALT睡眠,从而有效节省电能。
5 预付费型智能IC卡燃气表的软件设计
5.1 软件功能模块
软件用NEC78k0S C语言编写,采用模块化、层次化的编程方法。核心部分包括以下几个模块:SAM、CPU卡的通信模块(T=0,字符方式,串行速率9.6Kbps);SAM、CPU卡的认证和读写模块;燃气计量模块;电源管理模块;LCD显示模块;报警模块;工厂测试模块等(由于篇幅原因,在此不细述)。
5.2 SAM和CPU卡的认证过程
本燃气表中,软件必须接收和处理多种CPU卡:用户购气卡、检查卡、厂家生产测试卡(如阀门检测卡等6种)、修改主密钥卡等。每种CPU卡的目录文件结构和认证访问方式不尽相同,以使用用户购气卡购气后在燃气表上插卡为例,说明软件认证过程:
(1)从卡的可读二进制文件中识别出卡的类型,即用户购气卡。
(2)燃气表从用户卡中读取卡序列号和用户号,并比较用户号是否与SAM中存储的一致,不一致则拒绝读卡。
(3)若用户号一致,IC卡燃气表将卡序列号送至SAM模块。SAM模块对卡序列号进行加密,并生成相应的内部认证密钥。
(4)燃气表用内部认证密钥对用户卡做内部认证。
(5)燃气表用气表外部认证密钥对用户卡做外部认证。
(6)燃气表从用户卡购气应用二进制文件中读取购气数据,判断其完整性,同时判断购气次数是否与IC燃气表内一致。若不一致则向IC卡燃气表返写应用二进制文件(返写数据)退出;若判断一致,则进入(7)。
(7)由IC卡燃气表用气量外部认证密钥对SAM模块进行外部认证,若一致则将购气量及状态数据存入SAM模块,并返写数据退出,完成购气操作;否则只返写数据退出。
6 结束语
基于NEC单片机和SAM模块的CPU IC卡预付费型燃气表,在安全保密性、防攻击、低功耗、低成本等方面作了有益的探索,经过几个月的实际使用,已证明达到了预期的效果。