深入:发送和接收消息LoRaWAN®¶
本文涵盖了发送和接收消息的终端设备实现LoRaWAN®1.0.4深度。它是针对终端设备软件开发人员和管理人员的团队建设设备与罗拉®实现LoRaWAN v1.0.4链路层规范。本文可以帮助您了解每个字段中使用不同类型的消息以及基本面和最佳实践在广播中设置和时间发送和接收消息时使用。
已经在使用软件来处理等LoRaWAN网络层LoRaMAC-Node™吗?本文给你你所需要的背景完全理解该软件是做什么,做出明智的决定关于使用时,设置选择,如何确保你遵循最佳实践。
发送消息(上行链路)开放接收窗口¶
发送的消息从一个终端设备通过一个或多个网络服务器附近的网关被称为上行链路。
在本节中,您将学习时应遵循的规则和最佳实践从你发送上行链路终端设备使用LoRaWAN®1.0.4规范。
类型的上行链路¶
上行信息可能包括一个或两个以下类型的信息:
应用程序数据用来传输终端设备的数据和其他信息。这种类型的数据是特定于您的最终设备实现的用例。例子包括温度传感器,或一个消息确认阀门已经关闭。
MAC命令和MAC命令确认用于LoRaWAN网络管理。找到每个MAC命令终端设备的细节可以在我们启动LoRaWAN MAC命令纸。
一个上行消息也包含一些字段(总是发送,将打开或关闭),发送以下信息:
确认收到确认下行从网络服务器接收到的消息。确认下行是一种下行,需要终端设备的响应。
附加字段用于自适应数据率(ADR)和B类操作。
消息有可能携带MAC应用程序数据和命令。例子包括当终端设备发送一个空上行接收下行的唯一目的,应对确认下行没有附带的数据,并通知网络服务器移动到B类模式。
组合包¶
LoRaWAN上行链路的上行消息发送数据包。LoRaWAN包包含一个PHY载荷(图1所示PHYPayload),包含三组字段:
MAC头(MHDR)定义信息消息的类型和格式的版本
MAC有效负载(MACPayload)包含的信息被传播
一个消息完整性代码(麦克风)使用的网络服务器来验证消息源自相同的终端设备注册到网络服务器
下面的部分解释了终端设备应设置中的每个字段MAC头和MAC负载。了解如何设置消息完整性代码然后一节中解释计算消息完整性代码。
元数据字段¶
这些字段,突出显示在图2中,都必须在每个发送上行。
- 帧类型(FType)
-
的FType字段是三位长位置[7:5]在MAC头如图2所示。
FType用于识别的框架是一个上行和是否需要响应的网络服务器。
设置为010年(未经证实的数据上行)如果终端设备不需要一个网络服务器的响应。发送一个未经证实的数据上行使用更少的电力和网络时间,所以使用这个除非你有一个很好的理由。
设置为011年(确认数据上行)如果终端设备需要一个网络服务器的响应。当终端设备发送一个确认上行,两个接收的响应将会在一个窗口打开后直接传播这个消息。学习如何处理响应的部分处理下行数据包。
阅读更多部分4.2.1,准备帧类型(16页)TS001-1.0.4 LoRaWAN®L2 1.0.4规范。
- MHDR保留以供将来使用(RFU)领域
-
MAC头RFU字段是三位长位置[2]在MAC头如图2所示。
RFU保留以供将来使用,LoRaWAN 1.0.4从未被使用。
设置MHDRRFU来000年。
- 主要数据帧版本(主要)
-
的主要字段是两位长位置(1:0)内部MAC头如图2所示。
主要定义了框架的主要版本格式用于构造包一起发送。
集主要来00,这是当前主要版本的框架格式。
阅读更多4.2.2节、主要数据帧的版本(17页)TS001-1.0.4 LoRaWAN®L2 1.0.4规范。
- 终端设备地址(DevAddr)
-
的DevAddr字段是四个八位字节长,定位在在MAC帧头载荷如图2所示。
DevAddr使用网络服务器来识别终端设备。
设置DevAddr字段相同的DevAddr值是设置在终端设备激活过程中(中描述激活后的数据存储在终端设备部分我们的深入:LoRaWAN®终端设备激活纸)。
阅读更多关于DevAddr但是部分、终端设备地址(42页)TS001-1.0.4 LoRaWAN®L2 1.0.4规范。
- 帧计数器(FCnt)
-
的FCnt领域内两个八位字节长,定位在MAC帧头载荷如图2所示。
FCnt用于发送当前上行帧计数器(规范中称为FCntUp)到网络服务器。帧计数器使用网络服务器,以确保它没有已经收到了消息。
《终端设备必须存储一个值FCntUp在内存中。集FCntUp为0时,首先连接网络或设备供应激活的个性化(ABP)。当一个新的上行消息即将从设备到网络服务器,发送的值FCntUp必须增加1。当电源相同的上行消息,的价值FCntUp不得增加。遵循这些规则FCnt字段可以被设置为当前FCntUp值存储在内存中。
阅读更多4.3.1.5节、帧计数器(22页)TS001-1.0.4 LoRaWAN®L2 1.0.4规范。
- 帧选项长度(FOptsLen)
-
的FOptsLen字段是四位长位置[3 . .0] inside the Frame Control octet within the Frame Header as shown in figure 2.
如果上行将包含MAC命令和应用程序数据,然后MAC命令必须发送的录像字段。的录像领域可以从0到15个八位字节长。这FOptsLen字段标识多少个八位字节变量的长度录像字段包含。
例如,如果录像场4八位字节长,那么FOptsLen字段应该设置为4。如果录像字段是不使用的,FOptsLen应该设置为0。
阅读更多4.3.1.6节、帧选项(23页)TS001-1.0.4 LoRaWAN®L2 1.0.4规范。
字段发送应用程序时使用的数据和MAC的命令¶
在这一节中所描述的字段都包含应用程序发送消息时使用数据或MAC命令。
当发送MAC命令自己或自己应用程序数据,港口和帧载荷字段用于定义数据类型和发送应用程序数据。
发送应用程序数据和MAC命令时,帧选项字段是用来携带MAC命令,与港口和帧载荷字段用于定义数据类型和发送应用程序数据。
发送应用程序数据和MAC命令时,帧选项,帧港口,和帧载荷字段没有设置。
视图的不同组合的一些示例应用程序数据和MAC命令的部分附录:说明性的示例数据类型的组合信息。
- 帧的端口(FPort)
-
FPort是一个可选字段0和1之间的可变长度八隅体,位于MAC载荷如图3所示。
FPort用于定义消息帧中包含的有效负载的类型(FRMPayload)领域。
如果上行报文传输MAC中的命令FRMPayload字段,设置FPort来0。
如果上行报文传输应用程序中的数据FRMPayload,设置FPort之间的任何值1和223年。
请注意
应用程序数据FPort值可以用来帮助用户确定要传输的数据类型。例如,如果终端设备广播气温和湿度都在单独的消息,FPort可以设置为1识别包含温度、消息和设置2确定一个包含湿度信息。这允许消息FRMPayload场尽可能短,不需要添加任何识别字符前面的消息。
如果上行包不传送任何数据和运输空消息或确认下行承认,不提供FPort场,让它空字段的长度为零的八位字节。
阅读更多4.3.2节、端口字段(23页)TS001-1.0.4 LoRaWAN®L2 1.0.4规范。
- 帧有效负载(FRMPayload)
-
FRMPayload是一个可选的字段的变量长度0到N个八位字节之间,位于MAC载荷如图3所示。N的值取决于该地区的终端设备将操作和它将使用的数据速率传输数据。学习更多的数据包大小的考虑部分我们的发展LoRaWAN®的设备的书。
FRMPayload用于运输MAC命令或特定于应用程序的数据。
如果上行发送MAC中的命令FRMPayload领域,FPort必须设置为0。的命令必须使用网络会话密钥加密(NwkSKey设置在前)FRMPayload字段。了解更多关于获得NwkSKey在我们的论文深入:LoRaWAN®终端设备激活。找到4.3.3节中所使用的加密算法,MAC帧载荷的加密(24页)TS001-1.0.4 LoRaWAN®L2 1.0.4规范。指导在MAC上的命令可以发送和格式用于表示他们可以找到的MAC命令由终端设备部分我们的纸深入了解LoRaWAN®MAC命令。
如果上行发送应用程序中的数据FRMPayload领域,FPort必须设置为一个值之间1和223年。
原始应用程序数据需要转换成一个紧凑的格式传输之前。消息可以使用的编码辣椒低功率负载标准,已被一些网络服务器支持的利益,使用户能够确定一个设备使用辣椒垂直距离编码器和不需要包括一个译码器。这消除了需要你发布一个译码器,减少了大量的文档和你需要做出决定。或者,你可以拿出自己的编码器特定于该应用程序。读了包的优化部分开发书建议LoRaWAN-based设备设计的足够详细应用数据包同时尊重数据包大小的限制。
一旦应用程序数据被编码,然后必须使用应用程序会话密匙加密(AppSKey之前设置的FRMPayload字段。了解更多关于获得AppSKey在我们的论文深入:LoRaWAN®终端设备激活。找到4.3.3节中所使用的加密算法,MAC帧载荷的加密(24页)TS001-1.0.4 LoRaWAN®L2 1.0.4规范。
如果上行不传送任何数据和广播一个空的消息或确认下行承认,不提供FRMPayload场;相反,把它空字段的长度为八位字节。的FPort在这种情况下也必须空。
- 帧选项(录像)
-
录像是一个可选的字段的变量长度0到15个八位字节之间,位于内的帧头MAC载荷如图3所示。
的录像字段是用来传输MAC命令相同的数据包特定于应用程序的数据(称为肩扛)。15个八位字节的MAC可以发送的命令录像字段。的FOptsLen字段必须设置的长度录像一节中描述元数据字段。在我们的论文中了解更多关于MAC命令深入了解LoRaWAN®MAC命令。
警告
如果上行传输MAC命令自己,没有任何应用程序数据在同一个包,它必须使用FRMPayload场传播他们的录像字段。
当录像字段是用于运输MAC命令,FPort字段不能设置为0。
阅读更多4.3.1.6节、帧选项(23页)TS001-1.0.4 LoRaWAN®L2 1.0.4规范。
上行一些字段¶
必须被设置为下列one-bit-length字段1或0和每一个上行发送广播。终端设备也可以发送消息的目的纯粹是为了传达一个或多个字段,没有任何应用程序数据或MAC命令,如果用例需要。
- 框架承认一点(消)
-
的消发现在位置5帧控制八隅体发现MAC帧头内部载荷,如图4所示。
的消一些用于收到确认下行,所描述的部分处理下行数据包。
设置消为1确认收到最后收到确认下行;否则,设置消来0。
你需要决定如果你计划你的设备应等待下一个MAC命令或应用程序数据广播通过框架承认一点,或发送帧承认位尽快准备好。等待发送现场,直到有其他数据发送消耗更少的总体时间和电池寿命、设备将发送更少的消息。然而,在某些情况下,可能需要发送尽快,这取决于你的用例。
阅读更多4.3.1.2节,框架承认,承认过程(第20页)TS001-1.0.4 LoRaWAN®L2 1.0.4规范。
- 自适应数据速率控制钻头(美国存托凭证)
-
的美国存托凭证发现在位置7帧控制八隅体发现MAC帧头内部载荷,如图4所示。
的美国存托凭证使用一些自适应数据速率(ADR)特性。的美国存托凭证位设置为通知网络服务器,终端设备准备允许网络服务器使用ADR来管理其设置。设置这个当第一次开始实施ADR,和每个消息之后直到终端设备停止实施ADR。了解更多关于ADR在我们的纸上实现自适应数据率(ADR)。
集美国存托凭证来1通知网络服务器,应该使用ADR。建议总是使用和实现ADR只要设备的目的是保持在一个固定位置。手机追踪器和其他移动设备上,应该使用ADR当且仅当它们是静止的。
阅读更多4.3.1.1节,自适应数据速率控制帧的头(18页)TS001-1.0.4 LoRaWAN®L2 1.0.4规范。
- 自适应数据率确认请求位(ADRACKReq)
-
的ADRACKReq找到一些位置6帧控制八隅体发现MAC帧头内部载荷,如图4所示。
的ADRACKReq使用一些自适应数据速率(ADR)特性。的ADRACKReq位被设置时,终端设备需要发送的下行帧网络服务器来响应消息。了解更多关于ADR在我们的纸上实现自适应数据率(ADR)。
集ADRACKReq来1请求一个下行帧;否则,设置ADRACKReq来0。
阅读更多4.3.1.1节,自适应数据速率控制帧的头(18页)TS001-1.0.4 LoRaWAN®L2 1.0.4规范。
- B类启用位(ClassB)
-
的ClassB找到一些位置4帧控制八隅体发现MAC帧头内部载荷,如图4所示。
的ClassB一些用于通知网络服务器设备目前已经结束B类操作启用。
集ClassB来1当终端设备想启用和使用B类模式,和每一个后续消息直到设备开关回到甲级模式或进入C类模式;否则,设置ClassB来0。
阅读更多4.3.1.7节,B类启用(23页)TS001-1.0.4 LoRaWAN®L2 1.0.4规范。
计算消息完整性代码¶
毕竟已经在田野和准备的数据FRMPayload领域已经加密的如前一节所述,终端设备的应用程序可以计算,然后设置消息完整性代码(MIC)。的麦克风计算在Mac头(MHDR),帧头(FHDR),框架端口(FPort)和加密框架有效负载(FRMPayload)使用NwkSKey在4.4节在第801行指令之后,消息完整性代码(25页)TS001-1.0.4 LoRaWAN®L2 1.0.4规范。的NWkSKey获得在加入过程中解释吗深入:LoRaWAN®终端设备激活。图5突出麦克风计算中使用的字段。
播出的时间¶
每个应用程序可能会有一系列的不同的应用程序数据需要播放不同的时间表。
首先,选择一个粗略的安排每一项的数据需要传输,例如每隔15分钟,每天一次,每隔7天,或类似的。阅读更多关于时间的心跳消息和数据包传输部分我们的发展LoRaWAN-based设备的书。
一旦你有了一个粗略的时间表,你需要计划安排到终端设备。不要简单地设置每个消息广播,在一个固定的时间或几秒钟后运行;这可能导致你所有的终端设备同时广播,这将导致网络拥塞。相反,使用伪随机延迟确认时间播出时,如3.7节所述避免同步行为(16页)TR007发展LoRaWAN V1.0.0®设备。
请注意
您可能还想做一些安排end-user-configurable使用下行,作为讨论的部分类型的下行。
通道、数据速率和发射功率广播指南¶
本节解释如何解决通道,数据率、发射功率应该用于传输,基于不同:
该地区的设备操作
终端设备是否使用默认值或从网络服务器已经收到更新
终端设备是否通过ADR补偿过程,它试图恢复失去了连接
通道¶
找出该地区你的设备是否支持一个固定的频道计划地区或动态通道地区通过阅读1.3节区域参数汇总表RP002-1.0.3 LoRaWAN区域参数规范。这个表组区域动态和固定渠道的计划。
每个终端设备复位后,应该生成一个伪随机排序的频道列表,然后遍历这个列表中每个通道与每个广播,如3.7节所述避免同步行为(16页)TR007发展LoRaWAN V1.0.0®设备。这最小化风险的多个终端设备都在同一个频道上进行广播。如果最终的设备是在一个固定的频道计划区域,此列表应包含所有可用的上游渠道。如果最终的设备是在动态通道计划区域,此列表应包含所有默认频道。在乐队找到渠道使用信道频率部分的终端设备将在该地区RP002-1.0.3 LoRaWAN区域参数规范。
网络可能会请求你的终端设备改变频道列表中启用下列情形之一:
当一个终端设备使用空气激活(OTAA)加入网络,它可能获得的网络参数CFList字段Join-Accept可能改变它应该使用的频道。这些参数的细节,以及他们是否会提供有针对性。发现细节对于一个给定的区域,打开RP002-1.0.3 LoRaWAN区域参数规范部分地区和定位你的设备将在。阅读更多关于处理CFList节网络参数(CFList)我们的纸深入:LoRaWAN®终端设备激活。
当一个终端设备使用自适应数据率(ADR),可以接受LinkADRReqMAC命令包含频道面具控制(ChMaskCntl)冗余场和通道面具(ChMask),请求更新的渠道应该用于发送上行链路。如果终端设备与一个回应LinkADRAns确认可以使用这些通道,那么应该使用更新后的值。了解更多关于处理LinkADRReqMAC的命令处理ADR MAC命令我们的部分实现自适应数据速率。
的NewChannelReqMAC网络服务器发送的命令可以在任何时候结束设备动态通道计划地区创建、修改、或禁用频道。如果终端设备与回应NewChannelAns确认可以使用这些通道,那么应该使用更新后的值。阅读更多的创建/修改一个通道我们的部分深入了解LoRaWAN®MAC命令。
当后ADR补偿过程,最终设备最终将被要求重新启用所有动态通道计划默认通道或固定计划的通道。
只要启用频道列表需要更新,更新后的网络或在补偿过程中,终端设备应更新列表,包括指定的频道,伪随机排序列表,重新开始遍历每个广播频道在新列表。
数据速率¶
最初的数据速率取决于使用的设备被激活使用的空气激活(OTAA)或激活个性化(ABP)。
设备激活使用OTAA发送连接请求在乐队中列出的一系列数据速率信道频率部分地区RP002-1.0.3 LoRaWAN区域参数规范。用于上行链路的初始数据率应该是用于连接请求的数据率,成功,导致加入接受被收到。
设备激活使用ABP应该使用中列出的最低编号的数据速率数据率和输出设备输出功率编码部分地区RP002-1.0.3 LoRaWAN区域参数规范。这个最高的机会到达网关。
在最初的广播,终端设备应能使ADR允许网络控制数据速率。当终端设备使用自适应数据率(ADR),可以接受LinkADRReqMAC命令DataRate字段DataRate_TXPower八隅体请求更新的数据速率发送上行链路时使用。如果终端设备与一个回应LinkADRAns确认它可以使用所请求的数据速率,那么它必须使用这个数据速率。了解更多关于处理LinkADRReqMAC的命令处理ADR MAC命令部分的实现自适应数据速率。
的ADR补偿过程应遵循让设备恢复连通性情节的环境变化,造成设备失去接触周围的网关。这将导致数据的速度被降低到最低编号的数据速率。
发射功率¶
重置后,终端设备应该开始广播使用最大的功率可以支持和允许的地区运营。发现部分指南对于一个给定的地区数据速率和终端设备输出功率编码的区域RP002-1.0.3 LoRaWAN区域参数规范。
在最初的广播,除非设备将在运动(例如一个追踪者在路由到目的地),终端设备应使ADR允许网络控制发射功率。当终端设备使用自适应数据率(ADR),可以接受LinkADRReqMAC命令TXPower字段DataRate_TXPower八隅体,请求更新发送上行链路时使用的发射功率。如果终端设备与一个回应LinkADRAns确认可以使用所请求的发射功率,那么它必须使用这个发射功率。了解更多关于处理LinkADRReqMAC的命令处理ADR MAC命令部分的实现自适应数据速率。
的ADR补偿过程应遵循让设备恢复连通性情节的环境变化,造成设备失去接触周围的网关。这将最终导致发射功率设置回最大的功率。
打开窗户下行¶
结束后,所有上行链路,即使设备还支持类B或C类操作,终端设备必须侦听网络服务器的响应。在此期间,不得播出进一步上行链路,B类和C类听力应该暂停。发送一个上行的过程,然后监听下行是一个类所有设备需要实现的功能。
年底的上行传输、终端设备必须开始两个计时器,RECEIVE_DELAY1和RECEIVE_DELAY2下面描述,如图6所示。
RECEIVE_DELAY1:
这是一个时期结束的时候开始传播。这一时期结束时,终端设备开始监听下行称为接收窗口1 (RX1),下面描述。网络服务器是意识到RECEIVE_DELAY1值,所以同时开始广播,这意味着终端设备开始听广播开始。
设备复位后,RECEIVE_DELAY1应该设置为1秒,在2.3节中定义的默认设置吗RP002-1.0.3 LoRaWAN区域参数规范。
如果终端设备使用OTAA加入网络以来,这个值应该是更新的价值沟通RXDelay字段加入接受,如部分所述处理下行配置设置(DLSettings和RXDelay)我们的纸深入:LoRaWAN®终端设备激活。
网络服务器也可能尝试更新这个值在任何时候使用▽在MAC命令RXTimingSetupReq之间的延迟,如5.7节所述设置TX和RX(39页)TS001-1.0.4 LoRaWAN®L2 1.0.4规范。如果终端设备收到了RXTimingSetupReq和回应RXTimingSetupAns,那么它应该使用这个▽值作为RECEIVE_DELAY1。
RECEIVE_DELAY2:
这是一段始于最初的上行传输的结束。结束这段时期结束时,设备开始监听下行又称为接收窗口2 (RX2)。网络服务器是意识到的价值RECEIVE_DELAY2此时,所以开始另一个广播。RECEIVE_DELAY2应该设置为RECEIVE_DELAY1+ 1秒,2.3节中定义的默认设置RP002-1.0.3 LoRaWAN区域参数规范。
当RECEIVE_DELAY1期结束后,终端设备应打开第一个接收窗口(RX1)开始监听下行序言使用RX1描述的数据速率和信道的接收窗口在部分地区,发现的RP002-1.0.3 LoRaWAN区域参数规范。
通道用于听力将随上行通道用于设置;该算法使用中提供了规范。
用于听的数据速率取决于所使用的数据速率发送上行,以及RX1DROffset价值。默认的RX1DROffset是0。如果使用OTAA终端设备加入网络,RX1DROffset应该被更新的价值沟通RX1DROffset位的DLSettings字段加入接受,如部分所述处理下行配置设置(DLSettings和RXDelay)我们的纸深入:LoRaWAN®终端设备激活。对所有终端设备、网络服务器可能尝试更新RX1DROffset价值在任何时候使用MAC命令RXParamSetupReq如5.4节所述接收窗口参数(第33页)TS001-1.0.4 LoRaWAN®L2 1.0.4规范。如果终端设备收到了RXParamSetupReqMAC命令和回应RXParamSetupAns,那么它应该使用RX1DROffset值在MAC命令RX1DROffset。
窗口是打开的时间应该只要需要检测一个下行的序言。图7显示了RX窗口打开。
如图8所示,如果检测到序言,无线电接收机应保持活跃,直到下行帧解调。一旦下行帧被解调,终端设备和麦克风检查中所描述的部分处理下行数据包过去了,过程应该结束。现在的终端设备不需要打开第二个接收窗口。
如图9所示,如果没有检测到序言,窗口将关闭。当RECEIVE_DELAY2时期已经结束,没有下行接收窗口1,接受终端设备应打开第二个接收窗口(RX2)开始监听下行中使用的RX2描述的数据速率和信道的接收窗口部分区域内的终端设备操作RP002-1.0.3 LoRaWAN区域参数规范。如果终端设备收到了RXParamSetupReqMAC命令和回应RXParamSetupAns那么它应该使用RX2DataRate和频率值在MAC命令。了解更多关于RXParamSetupReq在5.4节的接收窗口参数(RXParamSetupReq RXParamSetupAns)”(第33页)TS001-1.0.4 LoRaWAN®L2 1.0.4规范。
RX2 RX1然后遵循相同的规则。窗口是打开的时间应该只要需要检测一个下行的序言。如果检测到序言,无线电接收机应保持活跃,直到下行帧解调。如果没有检测到序言时,应该关闭的窗口。在这一点上,没有进一步下行窗户打开,直到下一个上行发送,或终端设备进入类B或C类模式。
了解更多关于接收windows 3.3节中获得的(12页)TS001-1.0.4 LoRaWAN®L2 1.0.4规范。
处理下行,如果收到,在下一节中解释接收消息(下行)。
接收消息(下行)¶
从网络服务器发送的消息结束设备被称为下行。这些都是发送到终端设备通过网络网关服务器标识为最合适的网关广播。这意味着终端设备不需要考虑de-duping。
设备在课堂操作模式只接收下行接收窗口中打开后一个上行,中描述打开窗户下行。
设备支持B类模式以及类可以得到额外的下行接收窗口打开在固定一个时间段内。阅读更多的B类——灯塔部分(50 - 73页)TS001-1.0.4 LoRaWAN®L2 1.0.4规范。
设备支持C类模式以及阶级随时可以得到额外的下行。阅读更多的类C -连续听力部分(74 - 77页)TS001-1.0.4 LoRaWAN®L2 1.0.4规范。
在本节中,您将了解如何接收和处理下行数据包使用LoRaWAN 1.0.4规范。
类型的下行¶
下行可能包括一个或两个以下类型的信息:
特定于应用程序的设置用来修改内部设置终端设备。与MAC命令详细规范中,这些信息的格式和代码实现变化是由你设计和管理,设备制造商。例如,您可以允许用户改变数据传输的时间。如果你有一个设备与多个传感器,你可以支持一些传感器的启用和禁用只允许用户保存电池和把数据从传感器他们感兴趣。
MAC命令和MAC命令确认用于LoRAWAN网络管理。你会发现每个MAC命令的详细信息的终端设备可以接收LoRaWAN MAC命令纸。
下行消息还包含一些字段(总是包括,可以设置为打开或关闭),发送以下信息:
确认收到确认下行从终端设备接收消息。确认下行是一种下行,需要终端设备的响应。
表明有更多的从网络服务器发送的数据。
通信网络服务器可以管理网络设置通过自适应数据速率(ADR)。
处理下行数据包¶
一个下行消息发送LoRaWAN下行数据包。LoRaWAN包如图10所示包含一个体育有效负载(PHYPayload),包含三个顶级的字段:
MAC头(MHDR)定义信息消息的类型和格式的版本
MAC有效负载(MACPayload)包含的信息被传播
一个消息完整性代码(麦克风)使用的终端设备来验证信息是来自相同的网络服务器设备加入
当终端设备接收到下行数据包,应该通过以下步骤解释消息并获取数据。
验证终端设备地址¶
检查four-octetDevAddr在帧头,显示在图11中,匹配DevAddr值存储在内存中建立了终端设备的激活过程中,是在我们的论文中描述深入:LoRaWAN®终端设备激活。
如果终端设备地址的下行存储DevAddr值不匹配,最终设备必须忽略整个消息,因为它是为一个不同的设备。
验证框架类型(FType)¶
在用找到的值FType场,位于MAC头位置[7:5],如图12所示。
如果FType被设置为011年(未经证实的数据下行)或101年(确认数据下行),那么这个消息是一个下行,应该处理如本节所述。
终端设备也可能收到一个数据包FType001年这是一个Join-Accept消息。了解更多关于加入一个网络和处理Join-Accept消息在我们的纸上深入:LoRaWAN®终端设备激活。
如果FType被设置为101年收到,这消息在一个类的接收窗口,终端设备必须应对确认下上行,中描述上行一些字段。
阅读更多部分4.2.1,准备帧类型(16页)TS001-1.0.4 LoRaWAN®L2 1.0.4规范。
验证消息完整性代码(麦克风)¶
计算消息完整性代码(MIC)来验证下行消息的完整性,并确保它没有被篡改。计算麦克风在Mac头(MHDR),帧头(FHDR),框架端口(FPort)和帧负载(FRMPayload)使用NwkSKey在4.4节在第801行指令之后,消息完整性代码(25页)TS001-1.0.4 LoRaWAN®L2 1.0.4规范。的NWkSKey在获得终端设备激活。
确认麦克风,计算匹配发送的值麦克风在下行。如果两个麦克风值不匹配,终端设备必须忽略此消息。
验证和更新帧计数器(FCnt)¶
找到two-octet中的值FCnt场,位于在MAC帧头载荷,如图14所示。
帧计数器是用来确保终端设备并不处理两次相同的消息,以及避免被敌人攻击,重演旧信息可用于操纵装置。
终端设备必须跟踪下行帧计数器在内存中,将规范中称为FCntDown。FCntDown的值设置为0时,首先连接网络或设备供应激活的个性化(ABP)。
如果FCnt下行的价值小于或等于当前值存储在FCntDown,这个消息必须被忽略。
如果FCnt下行的价值大于当前值存储在FCntDown存储在内存中,终端设备必须更新FCntDown的价值FCnt然后继续处理消息中所描述的下一步处理一些字段。
处理一些字段¶
以下一些领域,突出显示在图15中,返回与每个下行帧内控制八隅体和所述应该采取行动。
- 框架承认一点(消)
-
的消找到一些在帧头帧控制八隅体在MAC载荷,如图15所示。
的消一些用于收到确认上行,所述的框架式(FType)部分元数据字段。
如果终端设备发送一个确认上行,应该等待下行的网络服务器消设置。网络服务器将只发送期间确认接收窗口直接上行发送后。如果终端设备是等待确认,应该检查消在班上下行接收窗口设置1。如果消位设置为1终端设备应考虑上行回应和执行任何行动证实,正在等待确认。
警告
如果终端设备接收后证实上行和下行消没有设置为1,上行必须收到网络服务器,但是应用程序数据传输不能加工,或有一个问题与上行链路的网络服务器确认收据。如果收到消关键应用程序用例,应用程序可以重新发送一个新的上行的数据,但不应该尝试重新传输的原始上行。FCntUp值中传递FCnt字段应该增加。应用程序不应该试图立即重新发送数据,以避免轰击网络,但等一段时间。你应该定义一个上限的数量应该试图发送数据,以避免无限期持续发送相同的消息在一个网络服务器的问题。
阅读更多4.3.1.2节,框架承认,承认过程(第20页)TS001-1.0.4 LoRaWAN®L2 1.0.4规范。
- 帧等待一点(FPending)
-
的FPending找到一些在帧头帧控制八隅体在MAC载荷,如图15所示。
如果收到下行消息被处理在一个类的接收窗口的FPending位设置为1表明网络服务器发送更多的数据。除非是一个很好的理由不,终端设备可以发送一个空的未经证实的上行尽快,为了打开额外下行windows和接收这剩余的数据。这个空上行不需要包含任何MAC命令也没有任何应用程序数据。可以看到一个例子上行在附录部分发送消息没有MAC命令和应用程序数据。
如果收到下行消息被处理在B类平位置,FPending用于优化B级操作,如4.3.1.4节所述,帧等待(22页)TS001-1.0.4 LoRaWAN®L2 1.0.4规范。
如果收到下行消息被处理在C类RXC窗口,FPending一些应该被忽略。
警告
照顾你当编程设备以确保FPending一些处理不同类型的基础上接收槽下行抵达。如果你不小心处理FPending中收到一个B类平槽或C类窗口就好像它是在一个类接收窗口,你的终端设备可以发送不必要的上行链路,相信有更多的数据接收时没有。
了解更多关于FPending位在16.4节中,下行时机Frame-Pending帧(82页)TS001-1.0.4 LoRaWAN®L2 1.0.4规范。
- 自适应数据速率控制钻头(美国存托凭证)
-
的美国存托凭证找到一些在帧头帧控制八隅体在MAC载荷,如图15所示。
的美国存托凭证使用一些自适应数据速率(ADR)特性。如果美国存托凭证位设置为1,这表明网络服务器可以发送ADR的命令。如果美国存托凭证位设置为0,这表明网络ADR目前无法使用。终端设备应采取的行动在我们的论文进行阐述实现自适应数据率(ADR)。
检查FOptsLen和录像¶
MAC命令可以在帧有效负载(FRMPayload)字段或帧选项(录像)领域。应用程序数据可能被发现FRMPayload字段。下面的步骤描述了如何找出这些字段包含。
找到4比特FOptsLen领域框架内控制八隅体在MAC帧头的载荷,如图16所示。
如果FOptsLen字段设置下行0,这表明录像场0八位字节长,终端设备应进行检查FPort字段描述下一步。如果FOptsLen被设置在1和15,这表明录像存在,沟通在八位字节的长度。内的终端设备应该读取数据录像场将包括由FOptsLen八位字节表示的数量,发现在MAC帧头载荷,如图16所示。录像包含终端设备的MAC命令应该只处理后FPort现场检查,在以下部分中描述。
检查FPort和FRMPayload字段¶
计算的长度录像在帧头,如部分所述检查FOptsLen和录像终端设备现在可以计算整个MAC载荷的消息的长度。终端设备必须检查的价值FPort八隅体发现在MAC载荷如图17所示,如果它是提供的下载。
如果没有FPort八隅体存在,那么就没有进一步的数据FRMPayload,你可以继续下一个步骤过程MAC命令。
如果FPort在下行将0,然后陪同FRMPayload字段包含MAC命令。的FRMPayload字段是发现在MAC载荷如图17所示。当FRMPayload包含MAC命令,字段的内容必须解密使用NwkSKey。的NwkSKey建立在设备激活。解密FRMPayload遵循4.3.3节中描述的算法MAC帧载荷的加密(24页)TS001-1.0.4 LoRaWAN®L2 1.0.4规范。MAC解密的命令FRMPayload场现在应该在下一个步骤中所述进行处理过程MAC命令。
如果FPort在下行之间的一个值1和223年,然后陪同FRMPayload包含应用程序数据。的FRMPayload字段是发现在MAC载荷如图17所示。当FRMPayload包含应用程序数据字段的内容必须解密使用AppSKey。的AppSKey建立在设备激活。解密FRMPayload遵循4.3.3节中描述的算法MAC帧载荷的加密(24页)TS001-1.0.4 LoRaWAN®L2 1.0.4规范。解密后的数据是特定于应用程序的数据,我们描述如何处理即将到来的部分处理应用程序数据。
如果FPort值设置为224年,然后MAC合规测试正在运行,和终端设备应当定义的文档所有地区LoRaWAN 1.0.4终端设备认证要求。
过程MAC命令¶
如果被发现在MAC命令录像场和FRMPayload场,那么整个消息应该被忽略;这不是LoRaWAN兼容包括MAC命令在这两个领域。
如果没有发现MAC命令,继续下一节处理应用程序数据。
如果发现MAC的命令,他们应该根据规范处理。你可以阅读更多关于所有MAC命令你可能接收,并找到参考相关规范的部分,在我们的纸上深入了解LoRaWAN®MAC命令。
处理应用程序数据¶
在编码应用程序时,您将确定几个场景需要下行,如改变设置,频率广播,或触发一个真实的行动,如打开或关闭阀门。你可以分配这些不同FPort价值,两者之间1和223年,并选择一种编码方法。终端设备必须使用这些规则解释FPort价值和解密FRMPayload价值和采取相关的行动。了解更多关于设计配置我们的票据市场的下行下行配置和固件版本。
如果港口或负载不能识别,信息必须被忽略。
电源上行链路¶
有两个稍微不同的传输方法取决于上行是证实了上行或未经证实的上行。
确认和未经证实的上行链路,终端设备的次数重新传输原始上行帧被称为被定义为一个值NBTrans。的默认值NBTrans应该设置为1规范的5.2节中定义的链接ADR命令(第29页)TS001-1.0.4 LoRaWAN®L2 1.0.4规范。的价值NBTrans更新的网络使用NBTrans字段冗余八隅体的LinkADRReqMAC命令。如果终端设备了NBTrans价值LinkADRReqMAC命令和回应LinkADRAns,那么它应该使用更新后的值NBTrans。阅读更多的链路自适应数据率(ADR)命令的部分我们的论文深入探究LoRaWAN®MAC命令。在ADR补偿过程,NBTrans值重置为1。
未经证实的上行链路,类内如果没有收到下行消息接收窗口,上行是转播的NBTrans次,或者直到收到下行接收窗口内的类。一旦收到下行,不再重发。建议重发之间的时间是随机的,不同序列对每个终端设备,确保终端设备组不都在同一时间播出。3.8节中阅读更多避免拥塞崩溃(16页)TR007发展LoRaWAN V1.0.0®设备。
证实了上行链路,如果没有下行消息的消值集类内收到接收窗口,和NBTrans值大于1,终端设备应至少等待RETRANSMIT_TIMEOUT秒后RECEIVE_DELAY2秒耗尽之前尝试重新发送。RETRANSMIT_TIMEOUT24页的定义RP002-1.0.3 LoRaWAN区域参数规范作为一个随机延迟1到3秒。除了你可能会增加延迟,每终端设备执行额外的随机性,延迟如3.8节所述避免拥塞崩溃(16页)TR007发展LoRaWAN V1.0.0®设备。曾经的下行消收到,不再重发。
确认和未经证实的上行链路,FCntUp不应该增加记忆和价值FCnt上行包的价值应该保持一样的原始传播。
重发应遵循相同的频道,广播数据率,和TX权力规则之后将在发送一个新的上行,继续遍历该频道列表和继续通过补偿过程如果终端设备通过一个倒扣的过程。你不能简单地使用相同的传输设置与前面的上行,因为这不会增加消息获得通过的可能性。
应该没有新的上行链路传输在传输期间,直到完成重发或已停止由于收到预期的下行。
结论¶
在本文中,我们已经教会你如何发送和接收消息后LoRaWAN®v1.0.4链路层规范同时实现最佳实践在广播和重新传输,以确保你的消息有尽可能低的延迟的同时也尊重法规和避免大量的网络传输。
阅读本系列的其他文章:深入:LoRaWAN®终端设备激活,实现自适应数据速率,深入了解LoRaWAN®MAC命令。
一旦你已经完成了系列你将能够使用LoRaMAC-node或罗拉基本调制解调器与信心,根据需要修改设置和调试。鉴于所需的编程技能,您还应该能够代码或LoRaWAN网络层提供开放源代码库首选平台。
进一步的阅读¶
阅读这些技术规范的全面了解LoRaWAN®v1.0.4和相关的概念:
阅读这些正式的技术建议的最佳实践的概述:
阅读我们的论文其他LoRaWAN 1.0.4概念:
查看LoRaWAN是如何实现的一个例子在罗拉®MAC层实现LoRaWAN链路层规范1.0.4在C语言中,下载LoRaMAC-Node终端设备堆栈的实现。阅读我们的LoRaMAC-Node动手实验室学习如何使用LoRaMAC-Node参考实现。
附录:说明性的示例数据类型的组合信息¶
作为讨论的部分类型的上行链路和类型的下行有多种类型的数据,可以发送的上行或下行以及一个空的消息。有不同的组合这些你可以选择发送上行链路取决于你的用例和终端设备软件。的FPort,FRMPayload,录像,FOptsLen字段设置根据不同数据类型的组合你发送你的信息。在本节中,我们审查的不同配置需要注意。
消息只包含应用程序数据¶
的FPort被设置在1和223年
的FRMPayload将应用程序数据(第一次加密使用吗AppSKey作为帧载荷(FRMPayload)部分中解释)字段发送应用程序时使用的数据和MAC的命令)
的录像左边是空的
FOptsLen被设置为0
消息只包含MAC命令¶
的FPort被设置为0
的FRMPayload设置为MAC命令(第一次加密使用吗NwkSKey作为帧载荷(FRMPayload)部分中解释)字段发送应用程序时使用的数据和MAC的命令)
的录像左边是空的
FOptsLen被设置为0
消息包含MAC命令和应用程序数据¶
的FPort被设置在1和223年
的FRMPayload将应用程序数据(第一次加密使用吗AppSKey作为帧载荷(FRMPayload)部分中解释)字段发送应用程序时使用的数据和MAC的命令),
的录像设置为MAC命令吗
FOptsLen将八位字节的数量吗录像消耗
发送消息没有MAC命令和应用程序数据¶
的FPort没有设置
的FRMPayload没有设置
的录像没有设置
FOptsLen被设置为0
确认确认下行¶
发送一个确认下行确认,设置消字段1。否则将其设置为0。当设备接收到确认上行确认,消场也将开始1。
你可以选择发送一个确认下行与一个确认否则空的消息,应用程序数据只,MAC命令只,或一起用MAC命令和应用程序数据。当一个终端设备接收下行的消集,它还必须解压FPort,FRMPayload,录像,FOptsLen是否有任何额外的数据字段。