Basic Station 2.0.6 2022年1月文档
时钟同步与时间引用¶
LoRaWAN网关中的定时和同步要求取决于它们的运行模式:纯粹基于LoRaWAN A类流量运行的室内网关不需要任何同步机制,因为唯一相关的时域是由集中器的时钟给出的。然而,即使在这种情况下,LoRa Basics™Station也会跟踪相对的时钟漂移和UTC时间参考,以方便使用。对于配备GPS接收器的室外网关,站点还跟踪高精度的时钟漂移和全球GPS时间的参考时间。
下面几节,我们将讨论LoRaWAN网关中涉及的每个时钟的同步和时间参考跟踪需求,以及LoRa Basics™站中实现的与时间相关的策略。
时钟及其用途¶
网关在不同的时钟上运行,目的不同:
PPS(每秒脉冲): PPS是与全球GPS时间同步的1Hz时钟,精度为纳秒级。LoRaWAN网关中PPS的主要目的是提供一个全局时间参考,允许网关的时间同步数据包发射精度高达1微秒。这是LoRaWAN B类信标所必需的。PPS还可以用于计算相对于全局参考时间的各种时钟漂移。
SX1301 (xticks): sx1301维护一个32位微秒计数器- Thexticks
计数器,该计数器由32 MHz温度补偿晶体振荡器(TCXO)驱动。接收数据包的时间戳为,数据包传输时间用xticks
。如果网关设计允许访问PPS,则xticks可锁接到PPS上升边。Station抽象了sx1301的硬件xticks计数器作为一个单调的64位微秒计数器xtime
。所有与操作相关的数据包路由(如将数据包分配到TX队列)都在xtime
时间域。LoRaWAN B类要求GPS时间和xtime
。
主机单片机: Station使用主机MCU的clock_monotonic来调度作业。时间最关键的作业是TX作业,它在传输到期之前将数据包放入sx1301的TX缓冲区。相对于sx1301时钟,这可以以几毫秒的精度完成。
时钟同步¶
请注意
晶体振荡器产生的脉冲宽度受各种物理条件的影响,如环境温度,并受产品变化的影响。因此,任何两个振荡器都将产生宽度略有不同的脉冲,计数这些脉冲的计数器将以不同的速度递增。其结果可能是,例如,在给定的一秒内,一个假设计数器一个
假设时计数1000000 (1e6)个脉冲计数器B
,由另一个振荡器驱动,计数为999998个脉冲。在这个特殊的例子中,在一秒钟之内计数器B
漂移了两微秒计数器一个
,相当于0.0002%,即2ppm。
在这种情况下,同步一对时钟意味着跟踪它们的相对漂移。这允许我们用两个时钟来表示给定的时间间隔。同步精度是我们在时钟之间的固定时间间隔转换过程中所产生的误差的度量。
每隔一段时间站执行ral_getTimesync
函数,它收集以下内容timesync测量基于RAL实现:
-
timesync_t
¶ -
-
sL_t
pps_xtime
¶ -
最后锁定sx1301xticks计数器值,计入滚动。禁用PPS为0。
-
sL_t
xtime
¶ -
瞬时sx1301
xticks
计数器值,计入滚动。
-
ustime_t
ustime
¶ -
单片机系统时间(clock_monotonic),以微秒为单位
xticks
读取计数器(预期的错误以几毫秒为顺序)。
-
sL_t
每个测量轮分配一个timesync质bet188软件下载量值,该值由获取瞬时值所需的时间(以微秒为单位)定义xticks
计数器的值。Station保持时间同步质量的统计信息,并丢弃质量被认为是异常值的测量值。bet188软件下载时间同步质量异常值bet188软件下载可能发生在站进程被抢占的SPI事务xticks
获取计数器。这可能会影响MCU/SX1301漂移估计,因此被丢弃。
基于时间同步测量,跟踪以下时钟漂移统计数据:
PPS <-> SX1301(如果PPS已启用)¶
PPS/SX1301漂移描述了SX1301时钟相对于全局参考时间的漂移。当传输时间以GPS时间表示的数据包需要以微秒精度发射时,即B类信标,对这种漂移进行补偿是必要的。
这是PPS/SX1301漂移统计数据打印到日志中的示例:
(SYN:信息]PPS/SX1301漂移统计数据:最小值:-1.3ppmq50:-1.5ppmq80:-1.5ppm马克斯:-1.7ppm-阈值q80:-1.5ppm
MCU <-> sx1301¶
Station在假定SX1301时钟比MCU时钟更精确(即与全局参考时间更一致)的情况下跟踪MCU/SX1301漂移。这是需要纠正时间间隔,表示在系统时间为单片机时钟漂移。MCU时钟漂移正确发挥作用的一个例子是RefTime
在updf
消息,服务器使用它来跟踪服务器和网关之间的IP链路延迟。对于下行数据包调度,MCU漂移是无关紧要的,因为调度完全是在SX1301时钟域完成的。与数据包传输相关的内部作业调度也不需要单片机漂移补偿。这是因为单片机时钟漂移对作业调度时间间隔造成的误差在微秒级,这是不显著的。
这是一个MCU/SX1301漂移统计数据打印到日志中的例子:
(SYN:信息]单片机/SX1301漂移统计数据:最小值:+1.1ppmq50:+1.6ppmq80:+1.8ppm马克斯:+2.8ppm-阈值q90:+2.1ppm
时域和转换¶
时间域之间的引用被跟踪为它们的时代之间的相对偏移。特别地,Station跟踪相对于MCU时钟的UTC时间参考和(如果PPS存在)相对于sx1301时钟的GPS时间参考。
系统时间¶
系统时间是由单片机时钟驱动的自由运行、单调递增、64位微秒计数器。
-
ustime_t
rt_getTime
( ) ¶ -
运行时函数检索当前系统时间。映射到特定于平台的
sL_tsys_time ()
函数。在Linux上,这将调用clock_gettime (CLOCK_MONOTONIC科技)
。
UTC¶
从服务器到网关的每条消息都可以包含MuxTime
字段中包含消息发送时的UTC时间戳。因此,对于Station接收到的每个服务器消息,如果MCU漂移很大,则有机会调整系统时间和UTC之间的偏移。在这种方案下,该站的UTC时间参考受到消息交换中产生的各种延迟的影响,其中网络延迟最为严重。这是可以容忍的,因为UTC时间引用只具有纯粹的信息价值。它用于日志消息的时间戳,并提供上行链路数据包的粗略到达时间估计(rxtime
在upinfo
结构)。
-
ustime_t
rt_utcOffset
¶ -
系统时间纪元和UTC纪元之间的偏移(以微秒为单位),精度为几百毫秒(网络往返延迟)。添加到
rt_getTime ()
获取UTC微秒时间戳(自UTC纪元以来的微秒数)。在包含的每条服务器消息上更新MuxTime
。
-
ustime_t
rt_getUTC
( ) ¶ -
方便函数检索当前UTC时间。预计
rt_utcOffset
待设置。
GPS(如果启用PPS)¶
启用PPS后,一个站可以访问一个微秒计数器,该计数器锁存在PPS的最后一个上升边缘(PPS锁存)xticks
SX1301)。以便在两者之间进行转换xtime
(即,滚转补偿xticks
)和GPS时间,我们需要确定观测到的PPS脉冲与GPS历元(1980年1月6日00:00h)之间经过了多少秒。这是通过与LNS的消息交换来完成的同步PPS到GPS时间).交换的结果是一个元组(txtime
,gpstime
,rxtime
)和for的值gpsOffset
,为本地历元与GPS时元之差,即gpsOffset=us_0-gps_0
:
gps_sgpstimegps_0|v....gps_us....vv|____________________________________PPSx-----|____________________|全球定位系统(GPS)时间|______________________________________________________号航空母舰x--|__|……ppsOffset…当地的时间^|^^^^us_0|us_spps_ustimetxtimerxtime
这个例子说明了如何获得GPS时间参考:
[]最后的PPS:pps_xtime=0 x520000003906f0pps_ustime=0 xa03f1bec1d[]获得最初的ppsOffset=561885[]Timesync消息:{“msgtype”:“timesync”,“gpstime”:1238942913655858,“txtime”:688254167114}[]TimesyncLNS:tx/处方:0 xa03f1c956d。.0 xa03f1e2975(103ms432us)我们/全球定位系统(gps):0 xa03f1bec1d/0 x466cfe043f432(ppsOffset=561885)-1解决方案[]Timesync与LNS:gpsOffset=0 x466cfe039f240