LoRa入门!一文看懂LoRa Class A B C三个模式的区别
在了解LoRa Class A B C三个模式之前,乐虎游戏先来了解一下LoRa和LoRaWAN。LoRaWAN是为LoRa远距离通信网络设计的一套通讯协议和系统架构。
LoRa协议架构图
LoRaWAN是为LoRa远距离通信网络设计的一套通讯协议和系统架构。
LoRaWAN 网络架构
可以看到一个LoRaWAN网络架构中包含了终端、基站、NS(网络服务器)、应用服务器这四个部分。基站和终端之间采用星型网络拓扑,由于LoRa的长距离特性,它们之间得以使用单跳传输。在终端部分官方列了6个典型应用,有个细节,你会发现终端节点可以同时发给多个基站。基站则对NS和终端之间的LoRaWAN协议数据做转发处理,将LoRaWAN数据分别承载在了LoRa射频传输和Tcp/IP上。
LoRa的架构和手机差不多:终端+基站的模式。LoRa都是星形网络,没有mesh网络。LoRa设备要通过网关的4G、Wifi、网线等接入公网。其中“LoRa模块+网关+数据中转传输”部分,已经有大量成熟解决方案。 MCU连接LoRa网络,跟连接2G和NB-IoT网络的方式是类似的,重新照着模块AT指令写一遍就好了。如果上FreeRTOS之类的小系统,大部分网关厂家有参考代码可以直接搬过来用。
LoRa实际应用的几个参数:
市区普通场景用NB-IoT足够了,山里的牧场、科考队之类的用LoRa比较好,范围足够大。功耗上看多久上报一次数据,1000mAh的电池支撑LoRa定位器工作几个月肯定没问题。都用上LoRa了,相信数据发送频率和数据量都不会有多大的,所以容量、速度这些参考一下即可。
传输距离:市区2~5公里,郊区15公里。
工作电流:仅射频收发器,睡眠时0.2uA,接收时10mA,发送时120mA@+20dBm,20mA@+7dBm,发送时的工作电流与发射功率有关。
节点容量:上万(tens of thousands),与节点的数据发送频率有关。
速率:中国,250bits/s ~ 11kbits/s(LoRa调制),50kbits/s(FSK调制),LoRa调制最大速率相当于串口9600波特率,FSK调制最大速率相当于串口57600波特率。
频谱:中国,779MHz ~ 787MHz。
Class ABC三个模式,高效利用LoRa
Class A 上下行的时序图,目前接收窗口RX1一般是在上行后1秒开始,接收窗口RX2是在上行后2秒开始。终端有数据了,就上报,顺便收一下服务器下发的指令。终端没数据的时候,服务器下发不了指令。适合用在智能井盖、智能垃圾桶、传感器等场景,你可以几天才发一个数据上去,非常省电。
Class C 和 A 基本是相同的,只是在 Class A 休眠的期间,它都打开了接收窗口RX2。几乎随时都可以接收数据。只干活不睡觉,功耗自然就高了。考虑到10mA级别的接收电流,不是长供电的设备最好别用这个模式。)
Class B 的时隙则复杂一些,它有一个同步时隙beacon,还有一个固定周期的接收窗口ping时隙。如这个示例中,beacon周期为128秒,ping周期为32秒。(实际上就跟NB-IoT的eDRX模式差不多,隔几十秒收一个数据。其他时候都在休眠。功耗低、服务器下发数据延时也不大。适合定位器、开关等场景。既不用接电,也能够“还算及时”的控制设备。
Class B用的最多,也最复杂,技术细节:
终端和基站约定一个时间下发数据,终端和基站依靠beacon信号校对时间,确保约定的时间不会错位。下文的节点是终端设备、NS是数据服务器、网关就是LoRa基站)
ClassB的目的是使得节点具有在预定时间打开接收窗口(称之为ping slot)的能力。一个支持ClassB的网络,所有的网关都必须同步发送beacon。
NS选择哪个网关来发起下行,基于节点的最后一次上行的RSSI,因此,节点在移动并检测到收到的beacon(节点可以识别出收到的beacon来自于哪个网关)发生变化时,节点必须发起一次上行(通常发一个空的上行帧)强迫NS更新NS下行路由(NS->某网关->节点)。
节点工作在Class B之前,下面信息必须告诉NS:节点ping-slot默认周期、DR(数据速率)、频道。
同一网络,所有网关发送beacon是同时的,这来源于GPS时间的唯一性。节点是有可能“收到”多个网关的beacon。
所有节点都以Class A入网。节点的应用软件可决定切换到Class B。
1.节点应用层请求LoRaWAN层切换到Class B。节点的LoRaWAN层搜索beacon并返回结果(BEACON_LOCKED或者BEACON_NOT_FOUND)。LoRaWAN层可使用DeviceTimeReq MAC指令加快beacon搜索过程。
2.一旦进入Class B模式,节点所有上行帧的FCTRL_ClassB(FCTRL域中位Class B)都置1,从而告知NS本节点已进入Class B模式。节点MAC层将自动在每个beacon和ping时间窗打开接收。节点成功收到beacon后,LoRaWAN层会把beacon内容和RSSI传给应用层;节点在ping slot成功收到下行后,处理方法同Class A下行。LoRaWAN层在组织beacon和ping时会考虑最大可能时钟偏差。
3.移动节点必须周期通知NS更新下行路由,通常是发送一个空的上行帧。比周期发送更高效的办法是,应用层检测到beacon内容变化时主动发起上行。当然,节点需要在beacon接收和此上行之间增加一个0-120s的随机延迟(以防止多个移动节点同时发上行引起系统性冲突)。
4.任意时刻,NS可通过PingSlotChannelReq MAC指令修改节点的ping 频率和速率。
5.任意时刻,节点可修改ping周期:首先必须临时结束Class B操作(上行FCTRL_ClassB清0)并发送PingSlotInfoReq指令到NS,NS对此命令回复ACK之后,节点可使用新的ping周期重新开始进入Class B操作。
6.一段时间节点未收到beacon之后,节点MAC层必须通知应用层当前MAC已切换到Class A。同时,LoRaWAN层也不再设置上行FCTRL_ClassB。应用层可以周期性尝试切回Class B(重新从上述第1步即搜索beacon开始)。
收不到Beacon怎么办?多收一会
LoRa终端和LoRa基站之间的时间同步,是LoRa比NB更省电的核心要素。NB不需要同步,是因为NB终端会定期向服务器发心跳。LoRa一旦约定好了时间,基站就默认设备一定会在那个时间点接收,所以需要严格的时间同步。Beacon则是时间同步的最关键的地方。
节点由ClassA切换到ClassB之前必须收到beacon,进入ClassB之后还需要周期搜索/接收beacon,从而同步时钟。Class B节点可能临时收不到beacon,此时节点要逐渐加宽beacon和ping的接收窗。如果收到beacon后2小时收不到新的beacon,节点需使用内部时钟保持同步。使用温度传感器可以进一步降低节点内部时钟晶振的误差。
Beacon周期内部的时序
两个连续beacon起点之间时间差称之为beacon周期。
Beacon周期128s,减去5.12s,剩余122.88s为ping可用时间。122.88s=4096*30ms
Guard time是给上一次ping用的,保证ping完成后才能进行beacon发送。
beacon reserved是给beacon用的,保证beacon完成后才能进行ping发送。