前言:
本文是在了解LoRoWAN协议的基础之上,对LoRa Class A/B/C终端的通用的软件实现架构进行拆解。
从软件架构的角度拆解LoRa Class A/B/C终端的软件功能实体之间的关系。
目录:
1. 软件的总体架构
(1)软件总体架构

(2)函数调用链

2. Radio硬件层
Radio硬件层又分为三个子层
2.1 高频RF
主要是解决调制后的高频信号的发送。
2.2 频段Band
频段就是一段许可额高频电磁波的范围,包括欧洲的EC868,EU433, 中国的CN470和美国的US430等频段。
不同频段,频率的范围、频谱的带宽、发送的功率都有不同的规范。
2.3 通道channel
虽然同一时间只能发送和接收一个载频的带宽,但在LoRaWAN允许一个LoRaWAN在的终端,可以在不同的时间,使用不同的某个频段的不同频率进行通信。
每个通道的带宽为200K

2.4 调制解调层
LoRa专有的扩频通信就是该层实现的,扩频码的配置、还有4/5纠错码的实现、IQ的反转,也可归在此层。
2.3 Lora物理层

主要完成的物理层帧的编码与解码。
3. STM8 MCU通用接口驱动程序层
Radio驱动程序,如果需要通过Radio收发数据,必须通过MCU与Radio之间的结果SPI总线来完成。
而SPI的驱动程序就是由 STM8 MCU通用接口驱动程序层实现的。
除了SPI接口驱动,STM8 MCU通用接口驱动程序层还提供GPIO驱动、定时器驱动、中断驱动、MCU片内Flash驱动等。
4. Radio硬件的驱动层
硬件的驱动层主要完成对Radio芯片的初始化、配置、物理层帧的净荷的发送与接收。
sx126x.c、radio.c主要就是完成此层的功能。
5. LoRaWAN MAC层
完成的功能有:
(1)MAC层帧的编码与解码或者说MAC层帧的组装与卸装。
(2)支持MAC 注册(join)的功能
(3)提供确认(confimed)的数据包的发送服务,类似与 TCP传输的服务
(4)提供无确认(unconfimed)的数据包的发送服务,类似与UDP传输服务
(5)Class A, B. C三种不同的MAC层的终端类型与调度策略。
(6)对MAC层的payload进行解码与解密的功能。
6. LoRaWAN控制层
LoRa的控制命令command,可以通过LoRa MAC的帧头进行携带,也可以通过port0的用户数据来承载。
Port是LoRA MAC提供的类似Socket端口的机制,不同的port,代码不同的应用程序.
Port0是一个保留的port号,留给MAC自己使用。
MAC的控制命令,都可以通过port 0的用户数据承载。
7. LoRaWAN接口层
LoRa WAN与应用程序之间采用两种接口机制
7.1 基于端口号的网络协议接口
该接口用于定义MAC与应用层之间的数据包的封装规范,主要用于不同的网络设备之间数据封装。
port1-255是留给应用程序的。port号与应用程序之间的关系,由应用程序自己决定, LoRa WAN MAC不做规定。
但port0是保留给LoRa WAN MAC层自己使用的。
7.2. 基于API的接口
主要功能是,LoRa终端自身的应用程序的通过该接口,利用LoRa WAN提供的本地的LoRa WAN MAC层服务,实现与远程的LoRa server在应用层之间的通信。
主要的接口包括:
(1)LoWAN的初始化接口:LoRaMacInitialization
功能:实现对LoRa WAN MAC的初始化
原型:
LoRaMacStatus_t LoRaMacInitialization ( LoRaMacPrimitives_t *primitives, LoRaMacCallback_t *callbacks, LoRaMacRegion_t region );
案例:
(2)MCPS(Mac Common Part Sublayer)接口
功能:应用层通过此接口,请求LoRaWAN MAC发送用户数据,支持下列三种服务。
原型:
LoRaMacStatus_t LoRaMacMcpsRequest( McpsReq_t *mcpsRequest );
案例:
LoRaMacMcpsRequest( &mcpsReq )
(3)MLME(MAC Layer Manage Entity)接口
功能:应用层通过此接口,完成网络管理的功能
原型:
LoRaMacStatus_t LoRaMacMlmeRequest( MlmeReq_t *mlmeRequest );
案例:
LoRaMacMlmeRequest( &mlmeReq );
(4)MIB(manangement information database)参数管理接口
功能:应用程序该接口,设置LoRoWAN的管理、配置数据
支持的管理、配置数据有:
通过名字,我们可以知道其大概意思。
原型:
LoRaMacStatus_t LoRaMacMibSetRequestConfirm( MibRequestConfirm_t *mibSet )
LoRaMacStatus_t LoRaMacMibGetRequestConfirm( MibRequestConfirm_t *mibGet );
案例:
其他。。。。。。。。
8. 应用层
(1)应用层数据的解析
(2)应用程数据的加解密
(3)MAC层对应用层的回调的通知
(4)应用程序的主线性
- 初始化
- 注册
- 应用数据发送
- 应用数据接收
- 状态机的驱动
(5)上行发送调度线程,该定时器是主线程启动的。
(6)状态机

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216610.html原文链接:https://javaforall.net
