摘要:针对在嵌入式系统中,当系统重启或异常断电的情况下,实时时间信息丢失的问题,本文提出了两种获取实时时间的方法:时钟芯片方法和GPS方法。时钟芯片方法中以DSl302为例,介绍了它在嵌入式系统中的软硬件设计。GPS方法中使用GPS接收机接收卫星信号,然后将符合NMEA—0183协议的格式化数据通过串口送往嵌入式系统,再通过软件提取数据中的时间信息。
关键字:嵌入式系统;实时时间;时钟芯片;DSl302;GPS
O 引言
许多长时间无人值守的监控系统中,数据到来的时刻是不可预知的,数据及其出现时的时间信息要一并记录下来,以便后期的处理和查阅。在智能交通系统中,以交叉路口的闯红灯自动抓拍系统为例,系统抓拍的闯红灯车辆的图片中就要包含抓拍的时间信息,以作为日后交警进行违规处罚的有力证据。以往的自动抓拍系统都是用工控机搭建的,在其工控主板上有时钟芯片和板载电池,即使断电也不会丢失实时时间信息。但是,作为硬件资源丰富的通用型工业控制计算机,在具体的控制系统中,往往会有许多硬件资源被闲置,使得成本偏高。随着嵌入式技术的发展和逐步成熟,为了节约成本和提高系统的可靠性,大有用嵌入式取代通用型工控机的趋势。这就提出了一个问题:在嵌入式系统中,实时时间从何获得。
本文将给出两种在嵌入式系统中获取实时时间的设计方法:使用时钟芯片方法和使用GPS接收机方法。
1 使用时钟芯片获取实时时间
在这种方案中,实时时钟芯片以美国DALLAS公司推出的DSl302芯片为例,嵌入式平台选用ATMEL的基于ARM920T内核的AT9lRM9200微处理器配以Linux一2.6.13嵌入式操作系统。
1.1 时钟芯片概述
DIP封装的DSl302共有8个引脚,Vccl和Vcc2分别是主电源引脚和备用电源引脚,当Vcc2>Vccl+0.2V时,由备用电源向时钟芯片供电。X1、X2是晶振连接引脚。GND接地。剩下的三个引脚用于与微控制器通信,它们是RST、SCLK、I/O。
DSl302内部有31字节的静态RAM可用于记录重要数据、共有12个寄存器其中有7个用于存储时间和日期。更为详细的资料,可以参考DSl302的芯片手册。下面就DSl302读写操作中应注意的几点列举如下:
1、所有的数据传送均是以发送8位的指令字节开始。指令字节的最高有效位(位7)必须是逻辑l,如果它为O,则不能把数据写入到DSl302中。
2、RST输入引脚的两种功能:(1)接通控制逻辑,允许地址/命令序列送入移位寄存器:(2)提供了终止单字节或多字节数据传送的手段。当RST为高电平时,所有的数据传送使能,允许对DSl302进行操作。如果在传送过程中RST被置为低电平,则会立即终止此次数据传送,并且I/0引脚变为高组态。
3、当把RST驱动至逻辑l时,SCLK必须为逻辑0。
1.2 硬件电路设计
DSl302采用双电源方式,系统正常工作时由板载电源统一供电,当系统断电或复位时由板载电池供电,以保证时钟芯片始终处于运行状态。
微控制器AT9lRM9200的PBO、PBl0、PBll三个引脚用于与时钟芯片进行同步串行通信,因为这三个引脚在AT9lRM9200内部都是多功能复用的,所以在DSl302设备驱动程序的初始化代码中首先要把它们配置成通用I/O口。关于晶体振荡器,DS1302的芯片资料指出:32.768KHz的晶振可以直接连接到X1、X2引脚,同时外接晶振电路要有6PF的负载电容与内部震荡器配合运行。所以,在电路设计时X1、X2两引脚分别连接一个15pF的电容至地。硬件连接,如图1所示:
1.3 Linux 下OSl302驱动程序设计