跳转至

NTP

一、NTP 基本概念

网络时间协议 NTP(Network Time Protocol)是 TCP/IP 协议族里面的一个应用层协议,用来使客户端和服务器之间进行时钟同步,提供高精准度的时间校正。NTP 服务器从权威时钟源(例如原子钟、GPS)接收精确的协调世界时 UTC,客户端再从服务器请求和接收时间。

对于 Air700EMQ,移动/电信卡,通常会下发基站时间,同步时间并不是必要的,而联通卡通常不会下发,就需要 SNTP 了,很多场景中,由于业务需要,模块需要保持正确的系统时钟,才能正常工作。

二、演示功能概述

本文教你怎么使用 AT 命令,通过模组连接 NTP 服务器进行时间同步,为了 NTP 功能的整体独立性,这里将完整的记录从开机到获取到网络时间的全部步骤。

三、准备硬件环境

工欲善其事,必先利其器。在正式介绍本功能示例之前,需要先准备好以下硬件环境。

本文章使用 Air700EMQ 核心板做演示;

参考:硬件环境清单,准备以及组装好硬件环境。

四、准备软件环境

工欲善其事,必先利其器。在正式介绍本功能示例之前,需要先准备好以下软件环境。

在量产的项目硬件设计中,一般都是由主控 MCU 通过 UART 给 4G 模组发送命令实现具体的业务逻辑;

在本教程中,为了测试方便,没有使用主控 MCU;

而是使用了 PC 电脑上的一个串口工具 LLCOM 给 4G 模组发送命令来实现演示功能;

1. Luatools工具

2. LLCOM 串口通信工具

3. 本教程使用的AT固件版本号是:AirM2M_700EMQ_V2019_LTE_AT,如果版本号不正确,参考:固件版本确认和烧录检查确认。

五、相关指令

本文主要使用 NTP 相关指令IP 应用相关指令

六、Air700ECQ AT 操作示例

Air700EMQ 模块支持 SNTP 协议(Simple Network Time Protocol),并有一套 AT 命令实现网络时间同步功能。

6.1 主动设置 NTP 服务器同步时间

以下操作通过 AT 指令主动设置 NTP 服务器为"ntp.aliyun.com"进行演示,实际使用中此地址用户可以根据实际需求进行设置,以下是 AT 指令操作序列。

ATE0                               //关闭回显,便于观察模组返回信息

OK

AT+CGATT?                         //AT+CGATT?查询是否注册网络收到+CGATT: 1值是1即为注册成功,正常情况下注册时间不会超过两分钟,如果超过两分钟没有注册可以进入飞行模式五秒后退出再查询,或者直接重启模块。

+CGATT: 1

OK

AT+SAPBR=3,1,"CONTYPE","GPRS"   //激活PDP是使用CNTP命令同步时间的前提

OK

AT+SAPBR=3,1,"APN",""         //设置PDP承载之APN参数 模块注册网络后会从网络自动获取<apn>并激活一个PDP 上下文,用于RNDIS上网使用(此<apn>可以通过 AT+CGDCONT?来查询),所以输入 AT+SAPBR=3,<cid>,"APN","" 即可,模块内部会按照 自动获取的<apn>来设置APN

OK

AT+SAPBR=1,1                    //激活网络场景(激活=1的PDP)

OK

AT+CNTPCID=1                    //设置 GPRS 承载场景 ID,取值同+SAPBR命令的(设置使用的PDP的=1)

OK

AT+SAPBR=2,1                    //获取分配IP地址

+SAPBR: 1,1,"10.189.181.162"

OK

AT+CNTP="ntp.aliyun.com",32    //设置NTP服务器为阿里云NTP服务器,时区为东八区。
                               //注意:这里设置的时区参数为-47为48,实际上时区范围(-12~12),但考虑到有些国家和地区会用到半时区,甚至四分之一时区,所以将整个时区范围扩展 4 倍,这样在输入时区的时候都是用整数,而不需要用小数在。时区前面如果是负数则表示西时区。
OK

AT+CNTP                         //开启网络同步

OK

+CNTP: 1                        //+CNTP: 后面的数字是返回的操作码,1:网络时间同步成功 61:网络错误 62:DNS解析错误 63:连接错误 64:服务响应错误 65:服务响应超)操作码返回62表示,域名解析失败

AT+CCLK?                        //查询本地同步后的时间

+CCLK: "24/11/03,18:58:16+32"   //模组返回的时间即为同步后的时间

OK

指令执行截图如下:

6.2 使用默认 NTP 服务器同步时间

模组出厂默认 NTP 服务器是 ntp.aliyun.com,如果是用默认 NTP 服务器可以跳过设置 NTP 服务器地址指令,直接使用 AT+CNTP 进行网络时间同步,若默认服务器同步时间失败尝试配置其他可用的 NTP 服务器地址,以下是 AT 指令操作序列。

ATE0                               //关闭回显,便于观察模组返回信息

OK

AT+CGREG?

+CGREG: 0,1

OK

AT+CGATT?                         //AT+CGATT?查询是否注册网络收到+CGATT: 1值是1即为注册成功,正常情况下注册时间不会超过两分钟,如果超过两分钟没有注册可以进入飞行模式五秒后退出再查询,或者直接重启模块。

+CGATT: 1

OK

AT+SAPBR=3,1,"CONTYPE","GPRS"   //激活PDP是使用CNTP命令同步时间的前提

OK

AT+SAPBR=3,1,"APN",""         //设置PDP承载之APN参数 模块注册网络后会从网络自动获取<apn>并激活一个PDP 上下文,用于RNDIS上网使用(此<apn>可以通过 AT+CGDCONT?来查询),所以输入 AT+SAPBR=3,<cid>,"APN","" 即可,模块内部会按照 自动获取的<apn>来设置APN

OK

AT+SAPBR=1,1                    //激活网络场景(激活=1的PDP)

OK

AT+CNTPCID=1                    //设置 GPRS 承载场景 ID,取值同+SAPBR命令的(设置使用的PDP的=1)

OK

AT+SAPBR=2,1                    //获取分配IP地址

+SAPBR: 1,1,"10.189.181.162"

OK

AT+CNTP                         //开启网络同步

OK

+CNTP: 1                        //+CNTP: 后面的数字是返回的操作码,1:网络时间同步成功 61:网络错误 62:DNS解析错误 63:连接错误 64:服务响应错误 65:服务响应超)操作码返回62表示,域名解析失败

AT+CCLK?                        //查询本地同步后的时间

+CCLK: "24/11/03,18:58:16+32"   //模组返回的时间即为同步后的时间

OK

指令执行截图如下:

七、常见问题 Q&A

7.1 问:开发板发送 AT 指令无响应?

1. 确保模组已经开机;

2. 串口助手是否选择了正确 AT 指令端口;

3. 检查串口助手参数是否设置正确,如波特率,停止位,奇偶校验,停止位,新行发送等;

4. 确保模组固件为标准 AT 固件。

7.2 执行 AT+CNTP 指令后模组返回“+CNTP: 62”或者“+CNTP: 64”是怎么回事?

1. 检查网络是否注册成功,可以用指令 AT+CREG 查询。

2. 检查模模组信号是否良好,可以用指令 AT+CSQ 查询。

3. 确认指令序列是否正确。

4. 确认 NTP 服务器是否可用,可以用指令 AT+CNTP?查询当前配置的 NTP 服务器地址。

5. 如果使用了定向卡,可能导致同步时钟失败。