引言
网络时间协议NTP(Network Time Protocol)是由RFC 1305定义的时间同步协议,用来在分布式时间服务器和客户端之间进行时间同步。NTP采用UDP进行数据传输,端口号为123,可提供了1~50 ms 的精确度,精确度取决于同步源和网络路径等特性[1]。
简单网络时间协议SNTP(Simple Network Time Protocol)是一个简化了的NTP服务器和NTP客户端策略,SNTP在协议实现上没有什么更改,在最近也不会有什么变动。 访问范例与UDP/TIME 协议是一致的,实际上,SNTP应该更容易适用于使用个人计算机的UDP/TIME 客户,而且SNTP 也被设计在一个专门的服务器( 包括一台集成的无线电时钟)上操作[2]。SNTP主要通过同步算法来交换时间服务器和客户端的时间戳,从而估算出数据包在网络上的往返延迟,进而独立地估算系统的时钟偏差。SNTP报文格式如图1所示。
LI用于表示闺秒(闺秒);VN表示版本号;Mode为模式,该字段包括0(预留)、1(对称行为)、3(客户机)、4(服务器)、5(广播)、6(NTP控制信息);Stratum用于对本地时钟级别的整体识别;Poll表示有符号整数表示的连续信息间的最大间隔;Precision表示本地时钟精确度;Root delay表示主要参考源的总延迟;Root dispersion表示相对于主要参考源的正常差错;Reference identifier指示系统时钟最后一次校准的时间,该字段仅在服务器端有效;Originate timestamp表示客户端向服务品发起请求的时间;Receive timestamp是服务器接收到客户端同步请求的时间;Transmit timestamp是服务器向客户端发送响应的时间。假设客户端与服务器之间请求与响应的网络耗时相同,则客户端通过SNTP同步后的时间接近为:Transmit timestamp + (Receive timestamp - Originate timestamp)。
图1 SNTP报文格式
1 硬件设计
基于TI公司CortexM3内核的LM3S9D96平台的硬件系统框图如图2所示。
图2 硬件系统框图
Power:系统工作电源,采用DC 5 V,由外置Adaptor设备提供。整个系统的电源包括:5 V、3.3 V、1.8 V。
LED:通过4个LED指示一些重要功能模块的工作状态,如5 V电源、RTC、LAN及软件的运行状态等。
LAN:Internet通信接口,实现标准TCP/IP互联网通信,TI公司的CortexM3系列片上集成一个以太网控制器PHY和媒体访问控制器MAC,遵循IEEE802.3规范,完全支持10BASET和100BASETX标准,所以LAN电路就变得格外简单,仅需要一个带隔离变压器的RJ45端子和几个电阻电容即可。
Clock:为整个系统提供16 MHz和25 MHz时钟源。
EEPROM:采用512 Kb SPI接口EEPROM,存储一些采集到的重要运行数据及系统配制参数,如IP地址、子网掩码、网关及DNS服务器、SNTP时间服务器、时区等。
Recover:恢复出厂设置,当上电时按住此键可使系统所有参数恢复到出厂默认值。
RTC:采用Maxim公司的DS1302实时时钟芯片。
2 软件设计
系统软件基于FreeRTOS实时操作系统和LwIP以太网协议栈进行设计。FreeRTOS和LwIP均是开源,而LwIP本身不支持SNTP功能。RTC实时时钟DS1302硬件电路,为实现SNTP提供了硬件支持,但时钟精确度随着运行时间累积,误差会逐渐显现,而SNTP网络对时正好弥补此缺陷。整个软件系统框架图如图3所示。
图3 系统软件框架
图4 工作流程图
主体软件可分为3个功能块进行实现:①SNTP获得网络时钟;②DS1302时钟调整;③通过HTTP以网页方式显示当前时钟。它们分别对应图3中SNTP Task、RTC Task、HTTP Task三个任务,工作流程如图4所示。对于HTTP Task,采用经典的B/S架构,网页开发可选用AJAX技术,实现简单,对于不同的访问终端支持,开发起来也方便,在此不做详细介绍。这里仅给出SNTP Task和RTC Task二个功能模块的软件流程图,分别如图5和图6所示。
图5 SNTP Task流程图
任务一直处于阻塞(Blocked)状态,直到周期时刻。根据DS1302时钟精确度特性,通常8小时会出现1 s延误,所以实际应用中可将SNTP同步同期设置为7天一次,即确保一定时钟精度,又可降低网络开销。
图6 RTC Task流程图
3 方案验证
为了对本系统进行方案验证,可将SNTP同步周期时间间隔设置为2 min一次,这样可快速验证。SNTP Server可采用知名的时间服务器,如210.72.145.44 (国家授时中心服务器),在此采用hq.chinterlink.com服务器。图7是还没有启用SNTP同步功能时的RTC DS1302时钟。
图8是启用SNTP同步功能后,经过SNTP同步后的RTC时钟,此时RTC和真实时间基本相同,说明SNTP功能生效,且工作正常,通常同步误差为ms级。
图7 SNTP同步前与真实时间的对比
图8 SNTP同步后与真实时间的对比
结语
本文实现了一个基于FreeRTOS实时操作系统的SNTP网络对时设计方案。通过SNTP功能,可将系统的实时时钟RTC与网络时钟同步,确保系统时间一直保持较高的精度。所使用的FreeRTOS和LwIP均为开源,LM9D96片内集成以太网收发器,适用于成本敏感而又需要高精度的时钟应用场合。