LoRaWAN协议解析 第5章 MAC命令
1 前言
我正在陆续对《LoRaWAN102》即LoRaWAN协议规范 V1.0.2 版本(2016年7月定稿)协议的各个章节进行翻译。译文之外还对LoRaWAN协议和源码进行了解析,可点此查看帖子LoRa学习笔记_汇总。
欢迎同行朋友们留言交流。
本文作者twowinter,转载请注明作者:http://blog.csdn.net/iotisan/
2 梳理解析
从LoRaWAN第4章的帧格式可以得到如下信息:MAC命令,要么使用FPort0来单独传输,要么使用非零的FPort来和数据一起传输。
LoRaWAN第5章,LoRaWAN出于网络管理需要,提出了9条MAC命令,这个章节是对9条命令进行具体的描述。
说个题外话,CLAA(中国LoRa应用联盟)在9条命令以外还扩充了一些MAC命令。现阶段协议还不能公开,所以我就不多说了。中兴目前作为LoRa联盟董事会成员,也许以后会把这些拓展MAC命令引入到LoRaWAN协议也说不准,大家暂且当个课外知识了解下就好。
3 代码位置
MAC命令枚举
MAC命令的接收处理
OnRadioRxDone()携带着MAC帧进来,经过层层筛选,最终到达ProcessMacCommands()来处理MAC命令。
这里代码中涉及的两种处理方式,可以跟协议对应起来:port = 0时,MAC命令放在FRMPayload中,需要先解密再处理;port非零时,MAC命令放在fopts中。
MAC命令的发送及回复
MAC命令的发送及回复处理都在这个函数中,AddMacCommand()。
协议栈对MAC命令发送的处理还是比较简单的,都是放在Fopts中来传输,都在这个15字节的MacCommandsBuffer中。
您的留言或需求:
黄伟贤
MAC命令是由AS组成完整命令包,还是NS组成的呢(就MHDR+MACPayload+MIC这种完整包)?
如果是NS组成的,是由AS和NS定义特定JSON格式来通信吗(比如是LinkADRReq指令,就传个包含type和参数的json),让NS知道是LinkADRReq这个指令,然后组成完整包传给网关。
–还有那个网络控制器不是很明白它的具体运用(感觉没它也无所谓),有相关文章吗,麻烦了!
黄伟贤
就算是NS组成的,貌似也不用特别定义JSON,AS就按文档格式把CID+参数加密(或不加密),然后走正常下行数据流程就行了,NS收到后按下行数据处理,组成完整包,发给网关!
LPWA应用站长
应该是NS负责发送MAC命令。
网络控制器主要用于网络控制:为某个终端节点决定最相关的通信速度或扩频因子,即所谓的ADR(Adaptive Data Rate),或自适应数据速率策略,还有与终端通信的网关路由选择。
可以参考这篇:http://www.lpwap.com/lora-university-case/201705021316/