基于NTP协议的物联网时间同步设备的设计与实现
2016-12-16肖蕾崔建峰
肖蕾,崔建峰
(1.厦门软件职业技术学院,福建 厦门,361024;2.厦门理工学院 计算机与信息工程学院,福建 厦门,361024)
基于NTP协议的物联网时间同步设备的设计与实现
肖蕾1,崔建峰2
(1.厦门软件职业技术学院,福建 厦门,361024;2.厦门理工学院 计算机与信息工程学院,福建 厦门,361024)
随着物联网的发展,物联网设备对时间同步提出了越来越高的要求。而一般物联网设备的MCU的资源不多,运行完整的TCP/IP协议栈会给MCU带来过大的负担。鉴于此,本文设计了基于NTP协议的客户端系统,通过STM32F103和全硬件的以太网控制器W5500从NTP服务器上获取精确时间,并在终端显示部分实时显示。经试验该系统占用资源较少,占用3.3K的SRAM,18K的FLASH,具有性价比高,稳定性好,精度高等优点,可满足大多数物联网设备获取精确时间的要求,具有较大的应用价值。
NTP协议;时间同步;W5500;物联网
物联网在工业,农业,交通运输,智能电网,民生服务,智慧城市等领域发挥着重要的作用[1-5],物联网产业已经成为推动世界经济增长的重要新兴产业。2012年中国物联网市场规模3650亿,同比增长38.6%[6]。许多物联网设备需要授时服务,物联网设备之间或者物联网设备与服务器之间需要进行时钟同步,在统一的时间基准运行,以满足事件顺序记录,故障录波,实时数据采集等时间一致性要求[7]。传统的授时方法如GPS接收机或者电话拨号软件,无线电和具有UTC时间的标准时钟源进行通信对时,实现条件苛刻[8]。在网络高速发展的今天,一种基于NTP(Network Time Protocol,网络时间协议)协议的网络时间同步技术弥补了传统授时方式的缺点。另外,一般物联网设备的MCU的资源不多,如果运行完整的TCP/IP协议栈会给MCU带来过大的负担。因此,本文在研究NTP协议的基础上,设计了基于全硬件的以太网控制器W5500的客户端系统,利用NTP协议通过互联网获取时间。W5500用硬件实现了TCP/IP协议栈,减轻了MCU的负担。该系统具有性价比高,稳定性好,精度高等优点。
1 NTP协议获取网络时间的原理
NTP协议的实现主要采用STM32F103作为处理器,结合W5500网络芯片。NTP时间戳以64bit无符号的定点数表示,整数部分以高32bit表示,相对于基准1900.01.0100:00:00记录当前的秒累积数;小数部分以低32bit表示,其精确度可达200皮秒。相对于1900年。NTP信息在网络上传输都采用UDP协议,端口号是123,此号码将被使用在UDP标头里的Source Port和Destination Port两段中,剩余的UDP标头栏将被设定成规格的描述。NTP报文格式如图1所示[9,10]。
图1 NTP的报文格式
在本系统中,我们采用客户端/服务器模式。图2是客户端/服务器模式工作原理
图2 客户端/服务器模式
图3 系统结构框图
在客户端/服务器模式中,客户端向服务器发送时钟同步报文,报文中的Mode字段设置为3(客户模式)。服务器端收到报文后会自动工作在服务器模式,并发送应答报文,报文中的Mode字段设置为4(服务器模式)。客户端收到应答报文后,进行时钟过滤和选择,并同步到优选的服务器。在该模式下,客户端能同步到服务器,而服务器无法同步到客户端。
2 硬件设计
本系统采用以STM32F103为主控芯片的W5500评估板作为数据处理平台,并分为两部分:主控部分,网络部分和终端显示部分。主控部分的核心是STM32F103,网络部分的核心是W5500,终端显示部分的核心是ARK SD410363K数码管。主控电路通过W5500发送NTP请求,获取网络时间,然后数码管动态扫描显示获取到的日期和时间。系统结构框图如图3。
2.1 主控电路设计
主控电路采用意法半导体公司生产的STM32F103型微控制器,其具有丰富的片上资源和标准接口,具有低功耗,低成本,高性能等特点[12-14]。STM32F103芯片的最小系统如图3所示。本系统采用无源晶振Y1(8MHZ)作为系统的主控制器,振荡器产生的系统时钟经过处理器内部的PLL(Phase Locked Loop,锁相环)和分频器后,产生系统所需的各种CPU时钟,外设时钟。采用外部复位方式[15]。
2.2 以太网电路设计
以太网电路采用WIZnet公司生产的W5500芯片,W5500是一款全硬件TCP/IP嵌入式以太网控制器,集成了TCP/IP协议栈,10/100M以太网数据链路层(MAC)及物理层(PHY),使得用户使用单芯片就能够在他们的应用中拓展网络连接。全硬件TCP/IP协议栈支持TCP,UDP,
IPv4,ICMP,ARP,IGMP以及PPPoE协议。W5500内嵌32K字节片上缓存以供以太网包处理。简单的Socket编程就能实现以太网应用,可以同时使用8个硬件Socket独立通讯。W5500提供了SPI接口,容易与外设MCU整合。
图4 以太网电路原理图
以太网部分的电路原理图如图4[16]。W5500通过SPI接口与MCU进行通信,SPI接口的引脚为SCSn(片选信号),SCLK(时钟信号),MOSI(主出从入),MISO(主入从出)。在SPI通信中,MCU作为主机,W5500 作为从机,MCU通过一系列指令对W5500进行控制。J1是RJ45,U3是网络变压器B-TRC1188,实现电气隔离,无失真的传输以太网信号的目的。工作时,从W5500送出的上行信号数据,经TXN,TXP引脚进入网络变压器,然后从网络变压器的TX+,TX-引脚输出,经由RJ45转接头,再通过非屏蔽双绞线送往服务器。服务器送来的下行信号经另一对非屏蔽双绞线,通过RJ45和网络变压器送入W5500的RXN,RXP引脚。
2.3 终端显示电路设计
终端显示电路主要采用2个六位一体的数码管SD410363K,其为共阳数码管。2个数码管的每一段分别接到一个IO口,同时每一段都加了200欧姆的电阻,用于限流。2个数码管对应的位选分别接在一起。由6个NPN数码管(9013)驱动。当IO口给三极管的基极输入高电平时,三极管导通,对应的数码管的位选接到高电平,对应的数码管点亮。利用动态扫瞄的方式实现数码管同时点亮[17]。
3 软件设计
在本系统中,我们以北京邮电大学的NTP服务器为例,使用W5500EVB从该服务器上获取东八区的标准网络时间,系统采用客户端/服务器工作模式[18]。
总流程图如图5所示。(1)对STM32进行初始化,包括STM32的IO配置,系统时钟配置,定时器配置以及定时器中断配置,其中定时器2在初始化时被打开,设置为每隔1ms进入中断,在中断中定时器2中断次数标志位加1,用于设置NTP请求重发的时间间隔。 (2)配置W5500的网络参数,包括配置MAC地址,子网掩码,默认网关和IP地址。(3) NTP客户端初始化,填充NTP报文。(4) 判断NTP客户端SOCKET的状态,系统刚上电肯定是SOCKET关闭状态,打开SOCKET,变为初始化状态,在下次的轮询中,检测到SOCKET为初始化状态,读取接受缓存寄存器的内容,判断缓存中是否有数据,然后根据3种情况进行分别处理,1)如果接收缓存中有数据,接收数据,从接收数据中获取网络时间,然后将数码管显示标志位置1 ,使能定时器3,将NTP重试次数清0。定时器3配置为每个1秒进入中断,在中断中使时间连续。2)如果接收缓存中没有数据,并且NTP发送请求重试次数小于100,然后判断NTP发送请求重试次数,如果为0,发送NTP请求,将NTP发送请求重试次数加1,定时器2中断次数清0;如果不为0,并且定时器2 中断次数大于2,则发送NTP请求,将NTP发送请求重试次数加1,定时器2中断次数清0。3)如果接收缓存中没有数据,并且NTP发送请求重试次数不小于100,NTP发送请求重试次数清0。(5)如果数码管显示标志位为1,进行数码管动态扫描显示,否则进入步骤4处理。
图5 总流程图
3.1 客户端发送NTP请求
在ntpclient_init()函数中,按照NTP客户端报文格式的要求,设置NTP报文,我们的NTP请求报文一共是48字节,后面的12字节的可选认证信息不发送。在SOCKET初始化的情况下,如果是初次发送NTP请求,直接发送,如果不是初次发送,需要等到定时器2至少定时3ms以上才发送NTP请求,避免发送NTP请求太过频繁。
3.2 数据接收和分析
当接收缓存中有数据时,接收数据,接收到的数据从第40个字节开始的8个字节是时间信息,根据时区信息得到64bit无符号的定点数。然后根据平年,闰年,每个月的天数不同等信息,从这个64bit无符号数中提取出年月日,时分秒等信息。
3.3 定时器实现时间时时显示
NTP客户端从网络上获取时间参数之后,将终端显示标志位置1,实现终端显示,同时使能定时器3,定时器3预分频系数是35999,定时器3时钟频率是2KHz,设置为向上计数模式,记到2000,这样计数到2000,计时为1s,进入中断。在中断中将获取到的网络时间的秒数加1,如果秒数为60,将秒数清0,分钟数加1,同时将变量Count加1,如果Count为60,将Count清0,同时将数码管显示标志位清0,然后判断秒数的数值,如果分钟数为60,将分钟数清0,小时数加1,然后判断小时数的数值,如果小时数为24,将小时数清0,数码管显示标志位清0。重新判断SOCKET模式,进行下一次的时间获取。这样每隔一个小时或者进入日期更换就进行下一次的时间获取。
系统硬件设备运行如图6,第一个数码管显示的是年月日,第二个数码管显示的是时分秒。经试验该系统占用资源较少,占用3.3K的SRAM,18K的FLASH,具有性价比高,稳定性好,精度高等优点。
图6 系统硬件设备运行图
图7 系统运行结果图
3.4 时间同步的实现
最后,是程序实现的验证。W5500上电后,同时按住W5500EVB上的BOOT及RESET键,并先松开RESET,使W5500EVB进入BOOT即烧录模式,此时进行程序烧录。完成后,打开串口调试助手,再次RESETW5500EVB后,我们就可以看到如图7所示的打印信息,此时的W5500EVB已经成功的从NTP服务器获取到了当前时间,实现了时间同步的过程。
(注 程序下载链接:http://pan.baidu.com/s/1sjPslZ3)
4 结论
本文阐述了基于STM32F103和W5500的NTP客户端的设计实现过程,经试验该系统占用资源较少,占用3.3K的SRAM,18K的FLASH,具有性价比高,稳定性好,精度高等优点,可满足大多数物联网设备获取精确时间的要求,为物联网设备获取精确时间提供参考。但同时,本系统只是实现了客户端从服务器上获取时间,没有进行时间同步实验。在后续研究中,我们将设计NTP服务器以及多个客户端系统,实现服务器与客户端以及客户端之间的时间同步。
[1]阎晓军,王维瑞,梁建平.北京市设施农业物联网应用模式构建[J].农业工程学报,2012,28(4):149-154.
[2] 余桥伟,汤永斌,张海波.用物联网技术助推南充城镇化、工业化建设的发展[C]//第六届四川省博士专家论坛.2012.
[3] 徐尉.基于物联网的智能节能与智能交通关键技术的研究与应用[D].南京:南京邮电大学,2013.
[4]黄鹏.物联网之城市一卡通创新服务研究 ——以北京市城市一卡通为例[D].北京:北京邮电大学,2013.
[5]包康平.珠海建设智慧城市的对策研究[D].长春:吉林大学,2014.
[6]中国物联网RFID2012年度发展报告[R].无锡:中国信息产业商会,2013.
[7]于跃海,张道农,胡永辉,等.电力系统时间同步方案[J].电力系统自动化,2008,32(7):82-86.
[8]陈敏.基于 NTP 协议的网络时间同步系统的研究与实现[D].武汉:华中科技大学,2005.
[9]宋妍,朱爽.基于 NTP 的网络时间服务系统的研究[J].计算机工程与应用,2003,(36):147-149.
[10]包秀国,胡铭曾,张宏莉,等.一种自组织时间同步网[J].通信学报,2004,25(1):150-156.
[11]So-Young Hwang,Dong-Hui Yu,Ki-Joune Li.Embedded System Design for Network Time Synchronization[J].LNCS,2004,3207:96-106.
[12]全新系列的STM32微控制器[J].电子设计工程.2009,(04):84.
[13]孙书鹰,陈志佳,寇超.新一代嵌入式微处理器STM32F103开发与应用[J],微计算机应用.2010,31(12):59-63.
[14]蒙博宇.STM32自学笔记[M],北京:北京航空航天大学,2012.
[15]Jorge Juan,Julian Viejo,Manuel J.Bellido.Network Time Synchronization: A Full Hardware Approach[J],LNCS,2013,7606,225-234.
[16] 陈桂友,陈海峰,贺红,等.物联网智能网关设计与应用[M].北京:北京航空航天大学,2012.
[17]蓝厚荣.单片机驱动LED数码管的方法[J],电气时代,2008,(04):94-95.
[18]David R.Smith.Network Timing and Synchronization[J].Digital Transmission Systems,Van Nostrand Reinhold Electrical/Computer Science and Engineering Series 2004,439-490.
Design and implementation of a time synchronized IoT devices based on NTP
XIAO Lei1,CUI Jianfeng2
(1.Xiamen Institute of Software Technology,Xiamen 361024,China;2.Xiamen University of Technology,Computer Science and Technology Department,Xiamen 361024,China)
With the rapid development of the internet of things,IoT Device put forward more and more requirements for time synchronization.While the MostIoT Devices is not overloaded with MCU resources,a complete TCP/IP protocol stack will bring MCU too much burden.In view of this,the paper design a client system based on NTP protocol to obtain accurate time from the NTP server using STM32F103 and hardware Ethernet controller W5500.The accurate time show up on the terminal in real-time.The system uses less resources,occupying 3.3K SRAM,18K FLASH and has high performance to price ratio,good stability,high accuracy.The system can meet the majority requirements of IoT Devices obtain the precise time,having great application value.
NTP protocol;time synchronization;W5500;internet of things
1672-7010(2016)03-0046-06
2016-06-05
厦门市科技计划项目(3502Z20133043);厦门理工学院对外科技合作专项(201401500);厦门理工学院国家基金预研项目(XYK201440);厦门理工学院国家基金预研项目(XYK201431)
肖蕾(1979-),女,贵州纳雍人,在读博士,副教授,从事软件测试、物联网安全研究;Email:lxiao@xmut.edu.cn
TP311
A