设计目的
设计具有 LoRaWan 网络服务器功能的 LoRaWan 网关,称之为 Mac 网关。
设计背景:
当前的 LoRaWan 标准架构如下:
标准 LoRaWan 架构需要4中角色:
- 终端,LoRaWan 节点,以射频方式发送 LoRaWan 协议栈;
- lorawan 网关,以网络形式转发终端发送的 LoRaWan 协议帧给网络服务器,并以射频形式发送网络服务器下发给终端的报文;
- lorawan 网络服务器,进行 LoRaWan 帧解析,帧解密,把负载转发给应用服务器;
- 应用服务器,搭载 LoRaWan 应用。
设计思考
如果需要研发 Mac 网关,那么需要将网络服务器的功能在LoRaWan 网关中实现。
LoRaWan 网络服务器功能如下:
结合 LoRaWan 规范、网关规范、网络服务器规范与上图,Mac 网关需要实现的功能有:
- LoRaWan 终端入网;
- LoRaWan 射频帧解析;
- LoRaWan 数据加/解密。
- LoRaWan 规范中的其他要求,比如时序,命令等。
设计难点
因为Mac 网关需要解析的协议帧、加/解密条件与 LoRaWan 节点不完全相同,且没有代码或工程可供移植,所以Mac 网关所有的功能都需要研发实现
设计过程
- Mac 网关的研发参考 LoRaWan 节点工程;并划分如下的 Mac 网关的代码架构与功能模块:
其中,Mac 层框架如下:
剩余设计过程:略。
Mac 网关工程设计说明
Mac 网关工程框架如下:
这个工程为 Mac 网关的 Mac 层。其中:
- /Mac :包含 Mac 网关的帧解析模块,加/解密模块,协议级处理模块。
- /Radio :向下对接射频层。
- /src :创建 Mac 协议级处理线程。
- /System :系统的辅助库函数,如定时服务库、加/解密库。
加/解密模块
该模块由以下代码库实现:
- /Mac/LoRaMacCrypto.c 与 /Mac/LoRaMacCrypto.h
- /Mac/secure-element.h
- /System/soft-se/aes.c 与 /System/soft-se/aes.h
- /System/soft-se/cmac.c 与 /System/soft-se/cmac.h
- /System/soft-se/soft-se.c
Mac 网关的加/解密模块实现对上行 LoRaWan 帧的解密,和下行 LoRaWan 帧的加密。
帧解析模块
该模块由以下代码库实现:
- /Mac/LoRaMacHeaderTypes.h
- /Mac/LoRaMacMessageTypes.h
- /Mac/LoRaMacParser.c 与 /Mac/LoRaMacParser.h
- /Mac/LoRaMacSerializer.c 与 /Mac/LoRaMacSerializer.h
- /Mac/LoRaMacTypes.h
帧解析模块实现的上行 LoRaWan 协议级解析,与下行数据的协议级组帧。
时间服务模块
该模块由以下代码库实现:
- /System/timer.c 与 /System/timer.h
时间服务模块为 LoRaWan 帧的协议级处理提供时间调度服务。
协议级处理模块
该模块由以下代码库实现:
- LoragwMac.c 与 LoragwMac.h
协议级处理模块是对外展示的模块,该模块的接口实现了 Mac 网关的具体功能。
协议栈处理线程
该线程由以下代码库实现:
- /src/devLoRaMacGw.c
协议栈处理线程负责处理由不同射频中断产生的不同 Mac 层事件。并真正提供与应用层对接的接口。