LoRawan_lomando游戏下载

LoRawan_lomando游戏下载版本管理 目录第4章MAC帧格式…1前言…14.1MAC层(PHYPayload)24.2MHDR帧头…24.2.1消息类型(MType位字段)24.2.2数据消息的主版本(Major位字段)34.3MAC载荷(MACPayload)44.3.1帧头(FHDR)44.3.2端口字段(FPort)84.3….

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

版本管理

 

目录

第4章 MAC帧格式… 1

前言… 1

4.1 MAC层(PHYPayload) 2

4.2 MHDR帧头… 2

4.2.1 消息类型(MType位字段) 2

4.2.2 数据消息的主版本(Major位字段) 3

4.3 MAC载荷(MACPayload) 4

4.3.1 帧头(FHDR) 4

4.3.2 端口字段(FPort) 8

4.3.3 MAC帧载荷加密(FRMPayload) 9

4.4 消息校验码(MIC) 10

第5章 MAC命令… 11

5.1 连接检查命令(LinkCheckReq, LinkCheckAns) 13

5.2 连接ADR命令 (LinkADRReq, LinkADRAns) 13

5.3 终端发射占空比 (DutyCycleReq, DutyCycleAns) 16

5.4 接收窗口参数 (RXParamSetupReq, RXParamSetupAns ) 16

5.5 终端设备状态 (DevStatusReq, DevStatusAns) 18

5.6 创建/修改信道 (NewChannelReq, NewChannelAns, DlChannelReq, DlChannelAns) 19

5.7 设置收发时延 (RXTimingSetupReq, RXTimingSetupAns) 22

5.8 终端传输参数(TxParamSetupReq, TxParamSetupAns) 23

 

 

 

第4章 MAC帧格式

前言

LoRa所有上下行链路消息都会携带PHY载荷,PHY载荷以1字节MAC帧头(MHDR)开始,紧接着MAC载荷(MACPayload),最后是4字节的MAC校验码(MIC)

射频PHY层:

Preamble

PHDR

PHDR_CRC

PHYPayload

CRC

5.射频PHY结构(注意 CRC只有上行链路消息中存在)

PHY载荷:

MHDR

MACPayload

MIC

或者

MHDR

Join-Request

MIC

或者

MHDR

Join-Response

MIC

6.PHY载荷结构

MAC载荷:

FHDRFrame Header

FPort

FRMPayload

FHDR(见4.3.1章节):

DevAddr

FCtrl

FCnt

FOpts

8.帧头结构

4.1 MAC层(PHYPayload)

Size (bytes)

1

1..M

4

PHYPayload

MHDR

MACPayload

MIC

MACPayload字段的最大长度M,在第6章有详细说明。

4.2 MHDR帧头

Bit#

7..5

4..2

1..0

MHDR bits

MType

RFU

Major

MAC头中指定了消息类型(MType)和帧编码所遵循的LoRaWAN规范的主版本号(Major)

4.2.1 消息类型(MType位字段)

LoRaWAN定义了六个不同的MAC消息类型:join request, join accept, unconfirmed data up/down, 以及 confirmed data up/down

MType

描述

000

Join Request

001

Join Accept

010

Unconfirmed Data Up

011

Unconfirmed Data Down

100

Confirmed Data Up

101

Confirmed Data Down

110

RFU

111

Proprietary

1.MAC消息类型

4.2.1.1 Join-request and join-accept 消息

join-requestjoin-accept都是用在空中激活流程中,具体见章节6.2

4.2.1.2 Data messages

Data messages 用来传输MAC命令和应用数据,这两种命令也可以放在单个消息中发送。 
Confirmed-data message
接收者需要应答。 
Unconfirmed-data message
接收者则不需要应答。 
Proprietary messages
用来处理非标准的消息格式,不能和标准消息互通,只能用来和具有相同拓展格式的消息进行通信。

不同消息类型用不同的方法保证消息一致性,下面会介绍每种消息类型的具体情况。

4.2.2 数据消息的主版本(Major位字段)

Major位字段

描述

00

LoRaWAN R1

01..11

RFU

注意:Major定义了激活过程中(join procedure)使用的消息格式(见章节6.2)和MAC Payload的前4字节(见第4章)。终端要根据不同的主版本号实现不同最小版本的消息格式。终端使用的最小版本应当提前通知网络服务器。

4.3 MAC载荷(MACPayload)

MAC载荷,也就是所谓的数据帧,包含:帧头(FHDR)、端口(FPort)以及帧载荷(FRMPayload),其中端口和帧载荷是可选的。

4.3.1 帧头(FHDR)

FHDR是由终端短地址(DevAddr)1byte帧控制字节(FCtrl)2byte帧计数器(FCnt)和用来传输MAC命令的帧选项(FOpts,最多15byte)组成。

Size(bytes)

4

1

2

0..15

FHDR

DevAddr

FCtrl

FCnt

FOpts

FCtrl在上下行消息中有所不同,

下行消息如下:

Bit#

7

6

5

4

[3..0]

FCtrl bits

ADR

RFU

ACK

FPending

FOptsLen

上行消息如下:

Bit#

7

6

5

4

[3..0]

FCtrl bits

ADR

ADRACKReq

ACK

RFU

FOptsLen

4.3.1.1 帧头中 自适应数据速率 的控制(ADR, ADRACKReq in FCtrl)

LoRa网络允许终端采用任何可能的数据速率。LoRaWAN协议利用该特性来优化固定终端的数据速率[J1] 。这就是自适应数据速率(Adaptive Data Rate (ADR))。当这个使能时,网络会优化使得尽可能使用最快的数据速率。

移动的终端由于射频环境的快速变化,数据速率管理就不再适用了,应当使用固定的数据速率。

如果ADR的位字段有置位,网络就会通过相应的MAC命令来控制终端设备的数据速率。如果ADR位没有设置,网络则无视终端的接收信号强度,不再控制终端设备的数据速率。ADR位可以根据需要通过终端及网络来设置或取消。不管怎样,ADR机制都应该尽可能使能,帮助终端延长电池寿命和扩大网络容量。

注意:即使是移动的终端,可能在大部分时间也是处于非移动状态。因此根据它的移动状态,终端也可以请求网络使用ADR来帮助优化数据速率。

如果终端被网络优化过的数据速率高于自己默认的数据速率,它需要定期检查下网络仍能收到上行的数据。每次上行帧计数都会累加(是针对于每个新的上行包,重传包就不再增加计数),终端增加 ADR_ACK_CNT 计数。如果累计ADR_ACK_LIMIT次上行(ADR_ACK_CNT >= ADR_ACK_LIMIT)都没有收到下行回复,它就得置高ADR应答请求位(ADRACKReq) 网络必须在规定时间内回复一个下行帧,这个时间是通过ADR_ACK_DELAY来设置,上行之后收到任何下行帧就要把ADR_ACK_CNT的计数重置。当终端在接收时隙中的任何回复下行帧的ACK位字段不需要设置,表示网关仍在接收这个设备的上行帧。如果在下一个ADR_ACK_DELAY上行时间内都没收到回复(例如,在总时间ADR_ACK_LIMIT+ADR_ACK_DELAY之后),终端必须切换到下一个更低速率,使得能够获得更远传输距离来重连网络。终端如果在每次ADR_ACK_LIMIT到了之后依旧连接不上,就需要每次逐步降低数据速率。如果终端用它的默认数据速率,那就不需要置位ADRACKReq,因为无法帮助提高链路距离。

注意:不要ADRACKReq立刻回复,这样给网络预留一些余量,让它做出最好的下行调度处理。

注意:上行传输时,如果 ADR_ACK_CNT >= ADR_ACK_LIMIT 并且当前数据速率比设备的最小数据速率高,就要设置 ADRACKReq,其它情况下不需要。

4.3.1.2 消息应答位及应答流程(ACK in FCtrl)

收到confirmed类型的消息时,接收端要回复一条应答消息(应答位ACK要进行置位)。如果发送者是终端,网络就利用终端发送操作后打开的两个接收窗口之一进行回复。如果发送者是网关,终端就自行决定是否发送应答。 
应答消息只会在收到消息后回复发送,并且不重发。

注意:为了让终端尽可能简单,尽可能减少该状态,即在收到confirmation类型需要确认的数据帧,需要立即发送一个严格的应答数据帧。或者终端会延迟发送应答,在它下一个数据帧中再携带。

4.3.1.3 重传流程

当需要应答却没收到应答时就会进行重发,重发的个数由终端自己定,可能每个终端都不一样,这个参数也可以由网络服务器来设置调整。

注意:一些应答机制的示例时序图在第18章中有提供。

注意:如果终端设备重发次数到达了最大值,它可以降低数据速率来重连。至于后面是否再重发还是说丢弃不管,都取决于终端自己。

注意:如果网络服务器重发次数到达了最大值,它就认为该终端掉线了,直到它再收到终端的消息。一旦和终端设备的连接出现问题时,要不要重发都取决于网络服务器自己。

注意:在重传期间的数据速率回退的建议策略在章节18.4中有描述。

4.3.1.4 帧挂起位(FPending in FCtrl 只在下行有效)

帧挂起位(FPending)只在下行交互中使用,表示网关还有挂起数据等待下发,需要终端尽快发送上行消息,然后终端再打开一个接收窗口。

FPending的详细用法在章节18.3

4.3.1.5 帧计数器(FCnt)

每个终端有两个计数器跟踪数据帧的个数,一个是上行链路计数器(FCntUp),由终端在每次上行数据给网络服务器时累加;另一个是下行链路计数器(FCntDown),由服务器在每次下行数据给终端时累计。 网络服务器为每个终端跟踪上行帧计数及产生下行帧计数。 终端入网成功后,终端和服务端的上下行帧计数同时置0 每次发送消息后,发送端与之对应的 FCntUp FCntDown 就会加1 接收方会同步保存接收数据的帧计数,对比收到的计数值和当前保存的值,如果两者相差小于 MAX_FCNT_GAP (要考虑计数器滚动),接收方就按接收的帧计数更新对应值。如果两者相差大于 MAX_FCNY_GAP 就说明中间丢失了很多数据,这条以及后面的数据就被丢掉。

LoRaWAN的帧计数器可以用16位和32位两种,节点上具体执行哪种计数,需要在带外通知网络侧,告知计数器的位数。 
如果采用16位帧计数,FCnt字段的值可以使用帧计数器的值,此时有需要的话通过在前面填充0(值为0)字节来补足;如果采用32位帧计数, 
FCnt就对应计数器32位的16个低有效位(上行数据使用上行FCnt,下行数据使用下行FCnt)

终端在相同应用和网络密钥下,不能重复用相同的FCntUp数值,除非是重传。

4.3.1.6 帧可选项(FOptsLen in FCtrl, FOpts) 
FCtrl 字节中的FOptsLen位字段描述了整个帧可选项(FOpts)的字段长度。

FOpts字段存放MAC命令,最长15字节,详细的MAC命令见章节4.4

如果FOptsLen0,则FOpts为空。在FOptsLen0时,则不为空。如果MAC命令在FOpts字段中体现,port0不能用(FPort要么不体现,要么非0)

MAC命令不能同时出现在FRMPayloadFOpts中,如果出现了,设备丢掉该组数据。

4.3.2 端口字段(FPort)

如果帧载荷字段不为空,端口字段必须体现出来。端口字段有体现时,若FPort的值为0表示FRMPayload只包含了MAC命令;具体见章节4.4中的MAC命令。 FPort的数值从1223(0x01..0xDF)都是由应用层使用。 FPort的值从224255(0xE0..0xFF)是保留用做未来的标准应用拓展。

Size(bytes)

7..23

0..1

0..N

MACPayload

FHDR

FPort

FRMPayload

N是应用程序载荷的字节个数。N的有效范围具体在第7章有定义。

N应该小于等于: 
N <= M – 1 – (FHDR
长度
M
MAC载荷的最大长度。

4.3.3 MAC帧载荷加密(FRMPayload)

如果数据帧携带了载荷,FRMPayload必须要在MIC计算前进行加密。 
加密机制是采用IEEE802.15.4/2006AES128算法

默认的,加密和加密由LoRaWAN层来给所有的FPort来执行。如果加密/解密由应用层来做更方便的话,也可以在LoRaWAN层之上给特定FPorts来执行,除了端口0。具体哪个节点的哪个FPortLoRaWAN层之外要做加解密,必须要和服务器通过out-of-band信道来交互(见第19)

4.3.3.1 LoRaWAN加密

密钥K根据不同的FPort来使用:

FPort

K

0

NwkSKey

1..255

AppSKey

具体加密是这样: 
pld = FRMPayload 

对于每个数据帧,算法定义了一个块序列Aii1kk = ceil(len(pld) / 16)

Size(bytes)

1

4

1

4

4

1

1

Ai

0x01

4x 0x00

Dir

DevAddr

FCntUp or FCntDown

0x00

i

方向字段(Dir)在上行帧时为0,在下行帧时为1. 
Ai通过加密,得到一个由块Si组成的序列S

Si = aes128_encrypt(K, Ai) for i = 1..k 
S = S1 | S2 | .. | Sk

通过异或计算对payload进行加解密:

4.3.3.2 LoRaWAN层之上的加密
如果LoRaWAN之上的层级在已选的端口上(但不能是端口0,这是给MAC命令保留的)提供了预加密的FRMPayloadLoRaWANLoRaWAN则不再对FRMPayload进行修改,直接将FRMPayloadMACPayload传到应用层,以及从应用层传到MACPayload

4.4 消息校验码(MIC)

消息检验码要计算消息中所有字段。 
msg = MHDR | FHDR | FPort | FRMPayload

MIC是按照[RFC4493]来计算:

cmac = aes128_cmac(NwkSKey, B0 | msg) 
MIC = cmac[0..3]

B0的定义如下:

Size(bytes)

1

4

1

4

4

1

1

B0

0x49

4x 0x00

Dir

DevAddr

FCntUp or FCntDown

0x00

len(msg)

方向字段(Dir)在上行帧时为0,在下行帧时为1

 

第5章 MAC命令

对网络管理者而言,需要有一套专用的MAC命令用在服务器和终端MAC层之间交互。这套MAC命令对应用程序(不管是服务器端还是终端设备的应用程序)是不可见的。

单个数据帧中可以携带MAC命令,要么在FOpts字段中捎带,要么在独立帧中将FPort设成0后放在FRMPayload里。如果采用FOpts携带的方式,MAC命令是不加密并且不长度超过15字节。如果采用独立帧放在FRMPayload的方式,那就必须采用加密方式,并且不超过FRMPayload的最大长度。

注意:如果MAC命令不想被窃听,那就必须以独立帧形式放在FRMPayload中。

每个MAC命令是由 1字节CID 跟着一段可能为空的字节序列组成的。

CID

Command

发送端

描述

终端

网关

0x02

LinkCheckReq

 

终端利用这个命令来判断网络连接质量

0x02

LinkCheckAns

 

LinkCheckReq的回复。包含接收信号强度,告知终端接收质量[J2] 

0x03

LinkADRReq

 

向终端请求改变数据速率,发射功率,重传率以及信道[J3] 

0x03

LinkADRAns

 

LinkADRReq的回复。

0x04

DutyCycleReq

 

向终端设置发送的最大占空比。[J4] 

0x04

DutyCycleAns

 

DutyCycleReq的回复。

0x05

RXParamSetupReq

 

向终端设置接收时的参数。[J5] 

0x05

RXParamSetupAns

 

RXParamSetupReq的回复。

0x06

DevStatusReq

 

向终端查询其状态。

0x06

DevStatusAns

 

返回终端设备的状态,即电池余量和链路解调预算。[J6] 

0x07

NewChannelReq

 

创建或修改 1个射频信道 定义。[J7] 

0x07

NewChannelAns

 

NewChannelReq的回复。

0x08

RXTimingSetupReq

 

设置接收时隙的时间。[J8] 

0x08

RXTimingSetupAns

 

RXTimingSetupReq的回复。

0x09

TxParamSetupReq

 

通过NS设置终端节点的最大停留(dwell time)时间和EIRP最大有效发射功率(基于地区规则)[J9] 

0x09

TxParamSetupAns

 

TxParamSetupReq的回复

0x0A

DlChannelReq

 

通过上行与下行的频偏量修改定义的下行RX1的信道[J10] 

0x0A

DlChannelAns

 

DlChannelReq的回复

0x80~0xFF

私有

给私有网络命令拓展做预留。

4MAC命令表

注意:MAC命令的长度虽然没有明确给出,但是MAC执行层必须要知道。因此未知的MAC命令无法被忽略,且前面未知的MAC命令会终止MAC命令的处理队列。所以建议按照LoRaWAN协议介绍的MAC命令来处理MAC命令。这样所有基于LoRaWAN协议的MAC命令都可以被处理,即使是更高版本的命令。

注意:通过NS调整任何值(如,RX2,创建或调整信道的设置)保持有效,直到终端节点重新Join。因此在每一个节点成功入网后,节点使用默认缺省参数,并且根据需要,由NS(网络服务器)重新调整参数。

5.1 连接检查命令(LinkCheckReq, LinkCheckAns)

使用LinkCheckReq命令,可以检查一个终端的网络连接情况,这个命令没有负载字节。

当通过一个或多个网关传达LinkCheckReq命令时,需要有LinkCheckAns命令回复。

Size (bytes)

1

1

LinkCheckAns Payload

Margin

GwCnt

射频调制边界(Margin)是一个8位无符号整数,范围是0~254Margin值的含义是指最后一次接收到LinkCheckReq命令时的dB值。“0”代表通信架构的调制层级(0 dB或没有边界),当值为“20”时,代表网关层级到达20 dB以上。“255”是默认缺省设置。

网关数量(GwCnt)是指成功接收LinkCheckReq命令的网关数量。

5.2 连接ADR命令 (LinkADRReq, LinkADRAns)[J11] 

使用LinkADRReq命令,NS请求一个终端节点执行自适应速率模式。

Size (bytes)

1

2

1

LinkADRReq Payload

DataRate_TXPower

ChMask

Redundancy

DataRate_TXPower字节含义如下:

Bits

[7:4]

[3:0]

DataRate_TXPower

DataRate

TXPower

请求的数据速率(DataRate)和发射功率(TXPower)是根据区域差异和指定的LoRaWAN地区参数文档制定。发射功率是指设备传输数据时最大的功率。当一个终端节点收到一条命令让发射功率超过它自身的能力范围时,终端按自身能力最大范围设定。信道掩码(ChMask)为上行通道编译成可用的信道,同将bit 0连接至LSB(最低有效位):

Bit#

Usable channels

0

Channel 1

1

Channel 2

..

..

15

Channel 16

一个数据位在ChMask区域里被置位为1,意味着如果这个信道允许数据速率使用在终端,则通信信道可以被用作上行通信。一个数据位复位为0,意味着应该回避该通信信道。

Bits

7

[6:4]

[3:0]

Redundancy bits

RFU(预留)

ChMaskCntl

NbTrans

在冗余位中,NbTrans的值是指每一次上行报文的重复次数(即单条上行报文发送时,重复发送的次数),这种方式适用于“unconfirmed”的上行结构,且有效范围为[1:15]NbTrans0代表接收的终端应使用默认缺省值。这个区域可通过网络管理员去控制节点上行的冗余,用来获得更优质网络服务。[J12] 终端可以在重复的网络传输时进行跳频,它会等待每次重复,直至接收窗口时间关闭。不论何时,一次下行报文都可以在RX1的时间窗口接收,同时它会停止相同时间内的上行报文。对于class A的终端设备,RX2同样可以接收。

信道掩码控制(ChMaskCntl)区域是之前已定义ChMask 的控制。[J13] 它可以控制16个通道的ChMask应用,也可以通过特定调制方法全局的打开或关闭全部的通道。这些使用需要遵守当地规则,查看当地的LoRaWAN地区参数文档[PARAMS]

网络服务器在单一的下行报文时,可能包括多个LinkAdrReq命令。为了配置终端的信道掩码,终端将会处理所有连续的LinkAdrReq报文,在现有的下行报文序列中,作为单独的命令发出。终端节点可以接受或拒绝所有的信道掩码控制,并且在每一次LinkAdrAns报文中,可以为每一条命令提供一样的信道掩码ACK状态标识。终端设备将最后一条报文中,处理数据速率(DataRate,发送功率(TXPower)和重复次数(NbTrans),同时此次设置将管理终端的全局状态。不论接受或拒绝最终的设置,在每次LinkAdrAns报文中,终端设备将反馈统一的ACK

信道频率每个地区都有差异,详情请见第6章。一个终端将通过LinkADRReq去应答LinkADRReq命令。

Size (bytes)

1

LinkADRAns Payload

Status

Status字节含义如下:

Bits

[7:3]

2

1

0

Status bits

RFU

Power ACK

Data rate ACK

Channel mask ACK

LinkADRAns bits有如下含义:

 

Bit = 0

Bit = 1

Channel mask ACK

发送的信道掩码未定义或失效;

命令被丢弃,节点状态不会改变

信道掩码成功设置

Data rate ACK

数据速率是未知的,或设备信道不支持;命令被丢弃,节点状态不会改变

数据速率成功设置

Power ACK

命令被丢弃,节点状态不会改变

功率等级成功设置

如果这3bits中,任意一个为0,则命令失效,节点保持原有状态。

5.3 终端发射占空比 (DutyCycleReq, DutyCycleAns)

DutyCycleReq 命令是终端网络通信中,一个周期中,允许发射的最大传输时间。

Size (bytes)

1

DutyCycleReq Payload

DutyCyclePL

DutyCyclePL bits有如下含义:

Bits

7:4

3:0

DutyCyclePL

RFU

MaxDCycle

终端最大的工作周期为:LoRawan_lomando游戏下载

MaxDutyCycle有效范围是[0 : 15]。如果值为0,则代表没有占空比的限制。

终端设备使用DutyCycleAns回复DutyCycleReq命令。DutyCycleReq MAC不包含数据载。

5.4 接收窗口参数 (RXParamSetupReq, RXParamSetupAns )

RXParamSetupReq 命令可以为第二个接收窗口(RX2)后的每一个上行数据改变频率和数据速率的设置。同时RXParamSetupReq也可以设置上行和RX1窗口下行数据速率的偏差量。

Size (bytes)

1

3

RXParamSetupReq Payload

DLsettings

Frequency

DLsettings bits有如下含义:[J14] 

Bits

7

6:4

3:0

DLsettings

RFU

RX1DRoffset

RX2DataRate

RX1DRoffset区域设置的是终端第一个接收窗口(RX1)上行数据速率和下行数据速率的偏差量。[J15] 默认缺省设置为0。这个偏差通常可以为某一区域平衡上下行连接边界的最大功率负载。

RX2DataRate区域设置的是终端第二个接收窗口(RX2)下行的数据速率,DR的值与约定LinkADRReq命令一致(0代表DR1/125kHZ)。Frequency的区域用来设置第二个接收窗口信道的频率,凭借这个频率可以定义NewChannelReq命令。

RXParamSetupAns命令通常使用在终端对RXParamSetupReq命令的ACKacknowledge)应答。应该在终端的所有上行包的FOpt区域添加RXParamSetupAns命令,直至遇到Class A的下行包。[J16] 这样可以保证即使在上行丢包的情况下,网络也会知道下行参数是否应用到终端。

数据负载仅包含一个状态字节。

Size (bytes)

1

RXParamSetupAns Payload

Status

这个状态字(Status)包含如下说明。

Bits

7:3

2

1

0

Status bits

RFU

RX1DRoffset ACK

RX2 Data rate ACK

Channel ACK

 

 

Bit = 0

Bit = 1

Channel ACK

请求的信道频率没有被使用

信道频率已成功设置在RX2

RX2 Data rate ACK

数据速率设置对终端是未知请求

数据速率已成功设置在RX2

RX1DRoffset ACK

上/下行的偏移量超出RX1的允许范围

RX1数据速率偏移量已成功设置

如果这3bits中,任意一个为0,则命令失效,节点保持原有状态。

5.5 终端设备状态 (DevStatusReq, DevStatusAns)

网络服务器可使用DevStatusReq命令请求一个终端的状态信息。DevStatusReq命令没有数据负载。如果一个终端接收到DevStatusReq命令,终端应使用DevStatusAns回复。

Size (bytes)

1

1

DevStatusAns Payload

Battery

Margin

电池电量(Battery)包含以下信息:

Battery

Description

0

终端连接着外接电源

1..254

电源电量,1(Min)-254(Max)

255

未读出电量数据

边界(Margin)是指最近一次成功接收到DevStatusReq命令的信噪比。它是有符号整数,占用6bit,范围是-3231

5.6 创建/修改信道 (NewChannelReq, NewChannelAns, DlChannelReq, DlChannelAns)

NewChannelReq命令可以修改已存在或新创建信道的参数。NewChannelReq命令可以设置新信道的中心频点,也可以设置这个信道上行数据速率的范围:

Size (bytes)

1

3

1

NewChannelReq Payload

ChIndex

Freq

DrRange

信道序号(ChIndex)是创建或修改信道的序号。依照地区和频带使用波段,LoRaWAN协议强制使用规定信道,则全部设备必须与其一致,不可通过NewChannelReq命令修改(参见第6章)。若默认信道数目为N,信道Index0N-1,则可接受范围ChIndexN15[J17] 一个设备必须能够处理至少16个不同的信道。在其他地区内,设备可能还将必须设置定义超过16个信道。

频率(Freq)区域是一个24位无符号整数。实际信的频率(Hz)的值是Freq100倍,且100 MHz以下作为将来扩展的预留。同时可每隔100 Hz设置100MHz1.67GHz的信道频率。Freq0则无法设置。同时也必须检查终端设备的硬件是否支持这一频率,否则将返回错误值。

数据速率(DrRange)区域是指该信道允许的上行数据速率(DR)。这段区域有24-bits的索引:

Bits

7:4

3:0

DrRange

MaxDR

MinDR

根据协议5.2章节规定的最小数据速率 (MinDR)部分,指定了信道允许的最低上行数据速率。如,0代表DR0 / 125 kHz。同样,最大数据速率(MaxDR)也定义了最高上行数据速率。例如,DrRange = 0x77代表这个信道只有50 kbps GFSK[J18] 可用[J19] DrRange = 0x50代表信道支持DR0 / 125 kHzDR5 / 125 kHz

新定义或修改过的信道可以立即使用进行通信。RX1下行频率与上行频率相同。

终端设备可用NewChannelAns命令回复NewChannelReq命令。NewChannelAns负载报文包括如下内容:

Size (bytes)

1

NewChannelAns Payload

Status

状态位(Status)代表如下含义:

Bits

7:2

1

0

Status

RFU

Data rate range ok

(数据速率状态位 )

Channel frequency ok

(信道频率状态位)

 

 

Bit = 0

Bit = 1

Data rate range ok

设置的数据速率范围超过当前设备可设置范围

数据速率范围与终端设备兼容

Channel frequency ok

设置频率不可用

频率已设置

如果这2bits中,任意一个为0,则命令失效,且不会创建新的信道。

DlChannelReq命令可以连接不同的RX1下行频率。该命令应用在支持NewChannelReq命令的地区(如欧盟和中国,而美国、澳洲则不适用)。

该命令设置RX1下行的中心频点,如下:

Size (bytes)

1

3

DlChannelReq Payload

ChIndex

Freq

信道索引(ChIndex)修改下行频率的信道序号。

频率(Freq)区域是一个24 bits的无符号整数。频率(Freq)区域是一个24位无符号整数。实际信的频率(Hz)的值是Freq100倍,且100 MHz以下作为将来扩展的预留。终端设备必须检查硬件是否支持该频率,否则将返回错误值。

终端设备使用DlChannelAns命令来回复DlChannelReq命令。应该在终端的所有上行包的FOpt区域添加DlChannelReq命令,直至遇到Class A的下行包。这样可以保证即使在上行丢包的情况下,网络也会知道下行参数是否应用到终端。

数据负载包含如下信息:

Size (bytes)

1

DlChannelAns Payload

Status

状态位(Status)代表如下含义:

Bits

7:2

1

0

Status

RFU

Uplink frequency exists

(上行频率状态)

Channel frequency ok

(信道频率状态)

 

 

Bit = 0

Bit = 1

Channel frequency  ok

该频率设备不可用

该频率可用

Uplink frequency exists

该信道未定义该上行频率,下行频率仅可设置一个有效上行频率[J20] 

上行频率有效

5.7 设置收发时延 (RXTimingSetupReq, RXTimingSetupAns)

RXTimingSetupReq命令允许配置接收和发送间的时间间隔,该值决定终端在发送(TX)上行数据后,与第一个接收窗口打开的延时。第二个接收窗口会在第一个接收窗口关闭1秒后打开。

Size (bytes)

1

RXTimingSetupReq Payload

Settings

延时(Delay)区域是指间隔时间。该区域包含24-bit索引:

Bits

7:4

3:0

Settings

RFU

Del

该延时以秒为单位。Del 0映射1秒。

Del

Delay [s]

0

1

1

1

2

2

3

3

..

..

15

15

终端设备可用RXTimingSetupAns命令回复RXTimingSetupReq命令,且没有数据负载。

应该在终端的所有上行包的FOpt区域添加DlChannelReq命令,直至遇到Class A的下行包。这样可以保证即使在上行丢包的情况下,网络也会知道下行参数是否应用到终端。

5.8 终端传输参数(TxParamSetupReq, TxParamSetupAns)

MAC命令仅适用部分可用地区。请参考LoRaWAN区域参数[PARAMS]文档。

TxParamSetupReq命令被用在告知终端最大的停留时间(dwell time[J21] 。例如,一个数据包在空中的最大连续传输时间,以及终端允许的最大有效同性辐射功率(Effective Isotropic Radiated Power EIRP)

Size (bytes)

1

TxParamSetup payload

EIRP_DwellTime

该结构中的EIRP_DwellTime是指:

Bits

7:6

5

4

3:0

MaxDwellTime

RFU

DownlinkDwellTime

UplinkDwellTime

MaxEIRP

TxParamSetupReq命令的第0-3位用在最大EIRP值,对应关系如下表。表中EIRP值不得大于当地区域要求的极限值。

Coded Value

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Max EIRP (dBm)

8

10

12

13

14

16

18

20

21

24

26

27

29

30

33

36

EIRP的最大值要与设备的最大发射功率一致。设备一般不要求传输功率,但应不超过指定的EIRP值。

Bit 4Bit 5定义了上下行各自的最大停留时间(dwell time),如下表:

Coded Value

Dwell Time

0

No Limit

1

400 ms [J22] 

终端设备可用TxParamSetupAns命令回复TxParamSetupReq命令,且TxParamSetupAns命令没有数据负载。

当该MAC命令在当地区域禁止使用,则设备不应处理该MAC命令,且不发送ACKacknowledgement)。


 [J1]DR0 <-> SF12

DR1 <-> SF11

DR2 <-> SF10

DR3 <-> SF9

DR4 <-> SF8

DR5 <-> SF7

 [J2]通过MAC命令查看当前环境的RSSI,SNR等

 [J3]通过MAC命令设置DR,TXPower(发射功率)

 [J4]通过MAC命令设置发送的占空比

占空比是指一个周期内,设备可用于通信的时间。

例如:占空比设为0.01,是指100 s内,仅可以使用1 s。

 [J5]通过MAC命令设置终端节点的接收参数

 [J6]通过MAC命令查询终端节点的剩余电量,链路预算

 [J7]通过MAC命令创建和修改射频信道

 [J8]通过MAC命令设置节点接收时隙参数

 [J9]通过MAC命令设置停留时间和有效全向发射功率

EIRP=TXPower-Loss+Gain

 [J10]通过MAC命令设置或修改RX1的信道

 [J11]DR0 <-> SF12

DR1 <-> SF11

DR2 <-> SF10

DR3 <-> SF9

DR4 <-> SF8

DR5 <-> SF7

 [J12]即不使用NBTrans上行报文重复发送,但可以用在其他功能,如“confirmed“的上行结构,提高网络服务质量。

 [J13]CHMaskCntl是每一组Channel的组号,每一组内有16个信道(频点),而在组内进行单独控制时,可使用Channel Mask控制。

 [J14]RX1DROffset 0 1 2 3 4 5

UL:  DL  DL  DL  DL  DL  DL

DR0 :DR0 DR0 DR0 DR0 DR0 DR0

DR1 :DR1 DR0 DR0 DR0 DR0 DR0

DR2 :DR2 DR1 DR0 DR0 DR0 DR0

DR3 :DR3 DR2 DR1 DR0 DR0 DR0

DR4 :DR4 DR3 DR2 DR1 DR0 DR0

DR5 :DR5 DR4 DR3 DR2 DR1 DR0

 [J15]查看《LoRaWAN_Regional_Parameters_v1_0-20161012_1397_1.pdf》,可设置上行与下行的DR偏移量,即若使用DROffset=5时,上行使用DR5(SF7),对应下行映射为DR0(SF12)

 [J16]原文:The RXTimingSetupAns command should be added in the FOpt field of all uplinks until a class A downlink is received by the end-device.

 [J17]假设默认可用5个信道(频点),则默认信道的Index为0-4,那么创建新的信道(频点)Index的范围在5-15。所以说,后文又提到硬件设备至少要支持16个信道。

 [J18]高斯频移键控GFSK – Gauss frequency Shift Keying ,是在调制之前通过一个高斯低通滤波器来限制信号的频谱宽度。

 [J19]GFSK是一种射频调制方式,50kbps是网络速度。

 [J20]原文:the downlink frequency can only be set for a channel that already has a valid uplink frequency .

 [J21]停留时间(dwell time) [J21]是指网关或节点在发送数据时,允许的最大发送时间。因为有些地区对发送时间有限制。例如,不允许终端的发包时间超过2秒。

 [J22]也就是说,dwell time是不可配的,要么不开启,要么只能设置成40ms

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/179184.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • javascript trim_stripslashes()函数的作用

    javascript trim_stripslashes()函数的作用[code="java"]通过PHP验证表单数据我们要做的第一件事是通过PHP的htmlspecialchars()函数传递所有变量。在我们使用htmlspecialchars()函数后,如果用户试图在文本字段中提交以下内容:location.href(‘http://www.hacked.com’)-代码不会执行,因为会被保存为转义代码,就像这样:&…

  • html背景图片的设置宽高_网页的背景图片怎么设置

    html背景图片的设置宽高_网页的背景图片怎么设置背景图片的设置,背景图片大小、位置、是否重复以及附着点的问题

  • git删除本地分支和远程分支_git删除远程分支

    git删除本地分支和远程分支_git删除远程分支git上面的分支开发完成以后,完成了他的历史使命,就可以删除了。1.删除本地分支查看本地分支gitbranchadd_jvm_config_and_exception_loghdfs_config_in_zk*mastersubBucket删除已经merge的本地分支gitbranch-dadd_jvm_config_and_exception_log…

  • Python 敏感词过滤的实现「建议收藏」

    Python 敏感词过滤的实现「建议收藏」一个简单的实现classNaiveFilter():”’FilterMessagesfromkeywordsverysimplefilterimplementation>>>f=NaiveFilter()>>>f.add(“sexy”)>>>f.filter(“…

  • 浅析Promise用法[通俗易懂]

    浅析Promise用法[通俗易懂]浅析Promise用法要理解Promise要知道没有Promise的回调地狱如何插入一段漂亮的代码片Promise语法与then的用法所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise是一个对象,从它可以获取异步操作的消息。Promise提供统一的API,各种异步操作都可以用同样的方法进行处理。Promis…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号