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_tpps_xtime

最后锁定sx1301xticks计数器值,计入滚动。禁用PPS为0。

sL_txtime

瞬时sx1301xticks计数器值,计入滚动。

ustime_tustime

单片机系统时间(clock_monotonic),以微秒为单位xticks读取计数器(预期的错误以几毫秒为顺序)。

每个测量轮分配一个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时钟漂移正确发挥作用的一个例子是RefTimeupdf消息,服务器使用它来跟踪服务器和网关之间的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_trt_getTime

运行时函数检索当前系统时间。映射到特定于平台的sL_tsys_time ()函数。在Linux上,这将调用clock_gettime (CLOCK_MONOTONIC科技)

UTC

从服务器到网关的每条消息都可以包含MuxTime字段中包含消息发送时的UTC时间戳。因此,对于Station接收到的每个服务器消息,如果MCU漂移很大,则有机会调整系统时间和UTC之间的偏移。在这种方案下,该站的UTC时间参考受到消息交换中产生的各种延迟的影响,其中网络延迟最为严重。这是可以容忍的,因为UTC时间引用只具有纯粹的信息价值。它用于日志消息的时间戳,并提供上行链路数据包的粗略到达时间估计(rxtimeupinfo结构)。

ustime_trt_utcOffset

系统时间纪元和UTC纪元之间的偏移(以微秒为单位),精度为几百毫秒(网络往返延迟)。添加到rt_getTime ()获取UTC微秒时间戳(自UTC纪元以来的微秒数)。在包含的每条服务器消息上更新MuxTime

ustime_trt_getUTC

方便函数检索当前UTC时间。预计rt_utcOffset待设置。

GPS(如果启用PPS)

启用PPS后,一个站可以访问一个微秒计数器,该计数器锁存在PPS的最后一个上升边缘(PPS锁存)xticksSX1301)。以便在两者之间进行转换xtime(即,滚转补偿xticks)和GPS时间,我们需要确定观测到的PPS脉冲与GPS历元(1980年1月6日00:00h)之间经过了多少秒。这是通过与LNS的消息交换来完成的同步PPS到GPS时间).交换的结果是一个元组(txtimegpstimerxtime)和for的值gpsOffset,为本地历元与GPS时元之差,即gpsOffsetus_0-gps_0

gps_sgpstimegps_0|v....gps_us....vv|____________________________________PPSx-----|____________________|全球定位系统(GPS)时间|______________________________________________________号航空母舰x--|__|……ppsOffset当地的时间|us_0|us_spps_ustimetxtimerxtime

这个例子说明了如何获得GPS时间参考:

[]最后的PPSpps_xtime0 x520000003906f0pps_ustime0 xa03f1bec1d[]获得最初的ppsOffset561885[]Timesync消息“msgtype”“timesync”“gpstime”1238942913655858“txtime”688254167114[]TimesyncLNStx/处方0 xa03f1c956d。.0 xa03f1e2975103ms432us我们/全球定位系统(gps)0 xa03f1bec1d/0 x466cfe043f432ppsOffset561885-1解决方案[]TimesyncLNSgpsOffset0 x466cfe039f240