在了解lora class a b c三个模式之前,我们先来了解一下lora和lorawan。lorawan是为lora远距离通信网络设计的一套通讯协议和系统架构。
lorawan是为lora远距离通信网络设计的一套通讯协议和系统架构。
可以看到一个lorawan网络架构中包含了终端、基站、ns(网络服务器)、应用服务器这四个部分。基站和终端之间采用星型网络拓扑,由于lora的长距离特性,它们之间得以使用单跳传输。在终端部分官方列了6个典型应用,有个细节,你会发现终端节点可以同时发给多个基站。基站则对ns和终端之间的lorawan协议数据做转发处理,将lorawan数据分别承载在了lora射频传输和tcp/ip上。
lora的架构和手机差不多:终端 基站的模式。lora都是星形网络,没有mesh网络。lora设备要通过网关的4g、wifi、网线等接入公网。其中“lora模块 网关 数据中转传输”部分,已经有大量成熟凯发k8旗舰厅注册登录的解决方案。 mcu连接lora网络,跟连接2g和nb-iot网络的方式是类似的,重新照着模块at指令写一遍就好了。如果上freertos之类的小系统,大部分网关厂家有参考代码可以直接搬过来用。
市区普通场景用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 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开始)。
lora终端和lora基站之间的时间同步,是lora比nb更省电的核心要素。nb不需要同步,是因为nb终端会定期向服务器发心跳。lora一旦约定好了时间,基站就默认设备一定会在那个时间点接收,所以需要严格的时间同步。beacon则是时间同步的最关键的地方。
节点由classa切换到classb之前必须收到beacon,进入classb之后还需要周期搜索/接收beacon,从而同步时钟。class b节点可能临时收不到beacon,此时节点要逐渐加宽beacon和ping的接收窗。如果收到beacon后2小时收不到新的beacon,节点需使用内部时钟保持同步。使用温度传感器可以进一步降低节点内部时钟晶振的误差。
两个连续beacon起点之间时间差称之为beacon周期。
beacon周期128s,减去5.12s,剩余122.88s为ping可用时间。122.88s=4096*30ms
guard time是给上一次ping用的,保证ping完成后才能进行beacon发送。
beacon reserved是给beacon用的,保证beacon完成后才能进行ping发送。