LoRaWAN实战 中国470频段的代码实现

前言

LoRaWAN协议中文版_配套文件 地区参数(物理层)中已经为中国规划了470频段,因此国内开发者对此需求很强烈。

在最新(2017-02-27)的V4.3.1版本协议栈上已经新增了中国470频段。这篇文章从源码角度解析下其实现方式。

目前国内的LoRaWAN基站产品都和标准有一些不同,比如CLAA等,所以搞清楚整个代码实现还是很有必要的。只要熟悉了整个流程,对接任何一个基站都不是难事。

我正在陆续对协议的各个章节进行翻译,具体其他章节的译文,以及译文之外的代码解析,可点此查看帖子LoRa学习笔记_汇总
本文作者twowinter,转载请注明作者:http://blog.csdn.net/iotisan/

源码解析

1.前导码格式的源码实现

同步字的处理在SX1276的驱动中:

而前导码长度则是在每次SetTxConfig和SetRxConfig时配置进去。

2.信道频率的源码实现

先说上行信道的处理。

第一步,初始化时把所有信道6*16=96个上行信道都使能了。

第二步,紧接着把96个信道的频点赋值一遍。

第三步,发送时在SetNextChannel中选择合适的频点,默认是96个信道中随机选择。

这上面是上行信道处理三部曲,下行信道处理则轻松多了。主要是配合接收窗口处理,由这个宏定义了下行的起始频点。具体可以看下面第7点。

3.数据速率和节点发射功率编码

速率编码如下:

发射功率编码如下:

速率范围如下:

发射功率范围如下:

4.CFList

中国没有。具体见OnRadioRxDone中的FRAME_TYPE_JOIN_ACCEPT分支。

5.LinkAdrReq命令

对于 ChMaskCntl 的处理都在 ProcessMacCommands() 的 SRV_MAC_LINK_ADR_REQ 分支中。

小彩蛋一个:你发现没,注释里写着Channel mask KO。不知是djaeckle (loramac-node的作者之一)调皮,还是语言习惯如此。

6.最大载荷长度

这在RxWindowSetup()进行处理,调用了最终的驱动函数。

7.接收窗口处理。

RX1的处理在OnRxWindow1TimerEvent()中,满足协议要求。

RX2的默认参数见如下宏:

RX2的处理在OnRxWindow2TimerEvent()中:

速率偏移处理如下:

8.默认设置

目前基本各地区的参数都一样,因此协议栈也是直接共用如下参数:

End

说明:LPWA物联网应用站(LPWAP.com)通过公开互联网收集、整理并转载有关LPWA物联网应用解决方案,以供广大LPWA应用开发者和爱好者共同学习交流和参考运用到实际生产生活中。本站所有转载的文章、图片、音频、视频等资料的版权归版权所有人所有并衷心感谢您的付出,由于本站采纳的非本站原创文章及图片等内容无法一一联系确认版权者,如果本网所选内容的文章原创作者认为其作品不宜放在本站,请及时通过以下留言功能通知我们采取适当措施,避免给双方造成不必要的经济损失。如果您希望保留文章在本站,但希望文章末尾提供对作者的致谢或者产品、网站交换链接的,也请将需求写入以下留言栏中,谢谢您的支持。让我们共同努力,打造万物互联的未来美好生活!

您的留言或需求: