美文网首页
lorawan的下行窗口

lorawan的下行窗口

作者: lissettecarlr | 来源:发表于2020-01-06 10:07 被阅读0次

1 CLASS_A

接收时隙图


image.png

其中Transmait表示一帧上行包的发送时间
RX1表示下行窗口1
R2表示下行窗口2
RECEIVE_DELAY1表示定时器1的定时时长
RECEIVE_DELAY2表示定时器1的定时时长

1.1 下行流程说明

当上行数据发送完毕之后将会打开两个定时器,其一被设定为定时RECEIVE_DELAY1,当定时器超时后打开下行数据接收窗口RX1,RX1的接收频率和上行频率相关,对应关系被表述在了地区规范的文档中,下列将简述一下。默认第一窗口的速率是和最后一次上行的速率相同。

在470~510Mhz的通讯频率中,上行被分为了0~95共96个通道,从470.3Mhz间隔200KHz增加到489.3Khz。下行被分为了0到47共48个信道,从500.3Mhz间隔200KHz增加到509.7KHz。上行的通道0和下行的通道0对于,例如上行频率是470.3则下行频率是500.3,

定时器2被设定延时RECEIVE_DELAY2,它是和定时器1同时打开的。在地区规范中被定义为RECEIVE_DELAY1+1s。它的频率与速率都是固定的,可以通过MAC命令修改,默认遵循地区规范(505.3KHz - DR0)

RX1和RX2打开的窗口时间在规范中被要求至少能接受到前导码。该时长在每次打开窗口时都会根据带宽速率计算一次。大概也就百多毫秒。当RX1接受到正确数据后,RX2将不会被打开。

2 CLASS_C

时隙图


image.png

CLASS_C是遵循CLASS_A的基础上衍生出的具备持续下行接收的模式。在CLASS_C下,窗口2将被一直打开。

2.1 由代码了解该模式

当数据发送完毕后OnRadioTxDone函数被调用,方便理解,下列用伪代码表述

/*首先判断如果是C模组,则当即打开RX2窗口*/
if(mode != class_c)
{
      radio.sleep();
}
else
{
     RxWindowTimer2.stop();
     Rx2Window.open();
}
/*配置定时器*/
RxWindowTimer1.start(RECEIVE_DELAY1);
if(mode != class_c)
{
     RxWindowTimer2.start(RECEIVE_DELAY2);
}

由上面可知,当处于CALSS_C模式的时候,传输完成便立马打开了RX2,接收超时时间是0,也就是持续处于接收状态,然后设定了定时器延时RECEIVE_DELAY1。当该定时器超时后跳转到OnRxWindow1TimerEvent函数

static void OnRxWindow1TimerEvent( void )
{
    RxWindowTimer1.stop();
   if(mode == class_c)
  {
         Radio.Standby( );
  }
 Rx1Window.open();
}

这里先判断如果是C模式则要将射频从RX2切换为待机模式,然后再打开RX1。该处的RX1是有超时时间的,也就是前文提到的接收前导码的时间,频率和上行频率相关。其实单单看RX1窗口,和CLASS_A是完全一样的,CLASS_C只是将RX1以外的所有空闲时隙都变成了RX2。
代码到这里分为两条路,其一当在RX1接收到数据后,进入OnRadioRxDone,当处理完接收后,通用是通过判断模式来开启RX2。其二是当RX1未接收到数据则进入OnRadioRxTimeout,在该函数中直接判断模式等于C则开启RX2,否则射频进入休眠。
到了这里回头看看时隙图就完全对的上了。这里补充一下关于两种模式的入网其实是完全一样的。都是在RX1窗口接收到入网应答。

相关文章

网友评论

      本文标题:lorawan的下行窗口

      本文链接:https://www.haomeiwen.com/subject/vhibsctx.html