LoRa学习总结(三)

之前总结是LoRa的基本知识,接下来是都是代码的结构或者细节方面的总结。

1.协议介绍

协议将分成三层:射频层(MRFI),网络层(NWK),应用层(APP)。

    LoRa学习总结(三)_第1张图片

2.射频层

这里没有通常所说的物理层数据链路层。因为这是有Radio芯片将传输过来的数据完成格式化了,射频层可以与Radio芯片进行交互。

在射频层下面其实还有一个板级支持包(BSP)。是用来初始化一些接口的(如SPI接口)。

在射频层没有复杂的数据接收和通信。主要是看是否能收发数据和检测信道。

2.1信道

在LoRa协议中,支持三种设备对象:End Device, Access Point 和Range Extender。

  • End Device:         节点,是整个网络中传感器的宿主。在网络中数量最多。
  • Access Point:      集中器,是整个星状网络的中心,在整个网络中只有一个。是一个始终开启的设备。
  • Range Extender: 用来扩展网络的无线距离,主要功能就是重播数据帧。也是一个始终开启的设备。

       在整个网络中,如果这三种设备对象想实现通信,就要在同一个信道中,且尽量不让外界对这个信道有干扰。

2.1.1LoRa信道频率计算

信道频率是需要计算的,常用的频率是433MHz,486MHz,需要匹配相适应的天线来使用。

const u16 SX1276FreqTbl[CHANNEL_NUMS][3] = { {0x0678, 0x0740, 0x0814},{0x0678, 0x0780, 0x0814},\
                                                                                          {0x0678, 0x07C0, 0x0814},{0x0679, 0x0700, 0x0814},\
                                                                                          {0x0679, 0x0740, 0x0814}};

比如这个数组是用来计算信道频率的。根据手册,我们取每组数据后两位,经过计算器可得:

                                                        LoRa学习总结(三)_第2张图片

根据手册:

LoRa学习总结(三)_第3张图片

将上述的7880724乘以61则可得:

                                                  LoRa学习总结(三)_第4张图片

说明这个信道是480MHz的,这个数组有5组不同参数,说明可以切换5种不同频率的信号。

信道初始化在MRFI_Init()中初始化。

 

2.2 CAD检测

之前提过,射频层是否工作主要看节点和集中器是否能进行通信,当他们都在同一个信道中时,就是需要检测信道是否繁忙或者空闲。当信道空闲时才能发送数据,这时就需要进行信道检测。

在整个网络中,接收机最消耗能量的部分是一直打开接收模式接收数据,但是当没有数据时,其实并不需要一直打开接收机,可以处于待机模式。所以最理想的情况是当有数据过来时,接收机工作,没有数据过来时,接收机处于待机状态。

传统的技术是根据RSSI值来判断是否有数据过来,只有达到一定信号强度才确认有数据。现在LoRa使用CAD检测来确定是否有数据过来。

2.2.1LoRa数据包

LoRa数据包包含三部分:

  • 前导码
  • 可选报头
  • 有效负载

LoRa学习总结(三)_第5张图片

前导码用来保持接收机与输入的数据流同步。前导码发送需要时间,这个时间需要和接收机唤醒时间来比较。

假如一个前导码持续100ms,设备每80ms醒来一次,检测有没有数据包发过来,此时,只要有数据下发,那么设备醒来就一定能检测到前导码,因为设备可以休眠,而无需一直开着接收模式等待数据下发。

前导码时间计算:

                                     

  • npreamble表示已设定的前导码长度,其值来自寄存器上的RegPreambleMsb和RegPreambleLsb

CAD检测时间可以通过更改SF,BW来设置

CAD检测时间内, 芯片在(2^SF+32)/BW秒中处于接收模式,其余时间则处于低功耗状态。

 

2.2.2信道检测
 

LoRa半双工的机制,发送和接受都是独立工作的。当需要进入某种工作状态,就需要从当前的工作状态进行切换,所以边发边听的这种机制应该不能实现。

所以当我们需要发送数据时,要检测信道是否被清空。

方法:

使用一个节点和一个集中器,让集中器每隔5s发送广播帧,节点检测信道。节点开启CAD检测,应该是大概能每隔5s检测到信道不为空。

                                   LoRa学习总结(三)_第6张图片

流程:

  1. 先让接收机处于待机模式
  2. CAD模式初始化
  3. 开启CAD模式
  4. CAD检测

 

 

 

 

 

 

你可能感兴趣的:(无线通信,物联网,lora)