当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]嵌入式系统中实时时问的获取

摘要:针对在嵌入式系统中,当系统重启或异常断电的情况下,实时时间信息丢失的问题,本文提出了两种获取实时时间的方法:时钟芯片方法和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驱动程序设计[!--empirenews.page--]
    Linux系统中有三种类型的设备:字符设备、块设备和网络设备。字符设备是指发送和接收数据以字符的形式进行,无需缓冲直接存取,在对字符设备发出读写请求后,实际的硬件I/0随即发生;而块设备则是对数据缓冲区进行读写并可以随机访问,操作是以块为单位。而网络设备与字符设备、块设备有很大的不同,用于对网络设备的控制和管理。DSl302显然属于字符设备。
    2.6版本的Linux内核和2.4版本存在很大的不同,在模块的开发和设计上也是如此。在这里使用的内核版本是Linux一2.6.13。首先,驱动程序作为一个模块可以动态加载进内核也可以动态的从内核中卸载掉,在加载和卸载的过程中实际伴随的是驱动程序向内核的注册与注销。在驱动程序的代码中会有两个函数分别在模块加载和卸载过程中调用DSl302_init()、DSl302_exit(),在其中再调用register_chrdev()、unregister_chrdev()用以向内核注册和注销一个设备驱动程序。在2.6内核版本中,用如下方法声明这两个函数给内核:
    Module_init(DS1302_init):
    Module_exit(DSl302_exit):
    在DSl302_init()函数中除调用字符设备的注册函数外,还有一个重要任务,就是配置需要用到的三条I/0口线:PBO、PBl0、PBll。配置过程包括:B端口控制器时钟使能、通用I/O口使能、输出使能、上拉电阻使能、三个口线上的同步数据输出使能,另外通过置PIOB_CODR寄存器使三个引脚输出低电平。代码如下:


    其中va_sys是一个结构体,包含了AT9lRM9200处理器内的全部寄存器,通过一条语句:AT91PS_SYS va_sys=(AT91PS SYS)AT91C_VA_BASE_SYS,把所有寄存器的最低地址赋给va_sys,这样结构体中的寄存器名称就和实际的地址对应起来了。注意:这里用到的地址都是经过映射过的虚拟地址,在实际运行中会通过处理器内部的MMU单元转换为实际的物理地址发往地址总线。上述代码中的AT91C_PI0_PBO等等是一些常数的宏定义用于寄存器赋值,比如:#define AT9lC_PIO_PBO(1<<0),它们定义在AT91RM9200.h头文件中。
    在驱动程序中,file_operations是一个重要的结构体,通过它把针对设备的具体操作注册给内核的统一接口。结构体中全是函数指针,DSl302驱动程序中用到的函数有:open、release、ioctl,用于设备的打开与释放、设备的读写以及设备的控制。对DSl302的读写都是在dsl302_ioctl()中调用相应的读写函数实现的。
    下面具体分析一下驱动程序中向DSl302发送单个字


    代码中用到的at91_set_gpi0_value()函数定义在内核的Gpio.c文件中,最终是对10控制器的PIO_SODR(置位输出数据寄存器)或PIO_CODR(清零输出数据寄存器)赋值以使相应引脚输出需要的电平。
    经过测试,短时间内误差不明显,但时钟芯片存在积累误差并且易受环境影响,连续几天运行下来,误差有数秒之多。所以,嵌入式系统需要通过某种方法定期使用标准时间向时钟芯片对时,以消除误差。下面要介绍的GPS接收机方案就可以做到这点。

[!--empirenews.page--]
2 从GPS接收机获取实时时间
    GPS是美国开发研制的最初主要作为军用的一种全球定位系统,有三个部分组成:空间部分、地面监控部分和用户部分。一般来说,在地面上的GPS接收机能接收5~12个卫星信号,而为了获得地面上的定位坐标,至少需要4颗卫星的信号,三个用来确定GPS接收机的纬度、经度和海拔高度,第四个则提供同步校正时间。
    GPS接收机只要处于工作状态就会源源不断地把计算出的GPS导航定位信息通过串口传送到计算机中。GPS接收机送出的数据都是格式化的,NMEA一0183协议是GPS接收机应当遵循的标准协议,大多数常见的GPS接收机、GPS数据处理软件、导航软件都遵守或者至少兼容这个协议。下面介绍下如何从符合NMEA—0183协议的接收机接收数据中提取时间信息。
    接收机通过串口发送到计算机的数据主要由帧头、帧尾和帧内数据组成,根据数据帧的不同,帧头也不相同,主要有“$GPGGA”、“$GPGSA”、“$GPGSV”以及“$GPRMC”等。这些帧头标识了后续帧内数据的组成结构,各帧均以回车符和换行符作为帧尾标识一帧的结束。对于通常的情况,我们所关心的定位数据如经纬度、速度、时间等均可以从“$GPRMC”帧中获取得到,该帧的结构及各字段释义如下:
    $GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>*hh<CR><LF>
    <1>当前位置的格林尼治时间,格式为hhmmss
    <2>状态,A为有效,V为接收警告,即当前天线视野上方的卫星个数少于3颗。
    <3>纬度,格式为ddmm.mmmm
    <4>标明南北半球,N为北半球、S为南半球
    <5>径度,格式为dddmm.mmmm
    <6>标明东西半球,E为东半球、W为西半球
    <7>地面上的速度,范围为0.ON999.9
    <8>方位角,范围为000.O到359.9度
    <9>日期,格式为ddmmyy
    <lO>地磁变化,从000.0到180.O度
    <ll>地磁变化方向,为E或W
    在Linux操作系统中,从$GPRMC数据帧中提取时间信息的代码如下:


    程序首先打开串口,然后对串口参数进行配置,随后进入无限循环主体。这段代码是作为主进程的一个线程实现串口数据的接收,当串口接收缓冲区中无数据时,read函数阻塞。程序中只提取了时间信息,若需导航数据可以类似方法提取。


3 结束语
    本文分别介绍了两种嵌入式系统中获取实时时间的方法:时钟芯片方法和GPS接收机方法。时钟芯片方法的优点是硬件连接简单、成本低;缺点是存在积累误差、易受环境影响、可靠性差。GPS接收机的优点:由于GPS卫星使用的是可以精确到十亿分之一秒的原子钟,所以不存在时间误差问题。同时也应该看到,目前GPS核心技术在国外,国内GPS市场主要还是做代理或是在购买国外GPS模块的基础上做产品开发,这就使得开发成本偏高。GPS方法中还有一个问题就是在某些情况下接收不到GPS信号,如在高楼林立的环境下或是在地下室之类的地方。此时就应该让GPS接收机方法与处理器内部的实时时钟(RTC)配合工作,这样在短时接收不到GPS信号的情况,仍可以从RTC读取时间。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭