四、Physical Message Formats

LoRa数据包结构

LoRaTM调制解调器采用隐式和显式两种数据包格式。其中,显式数据包的报头较短,主要

包含字节数、编码率及是否在数据包中使用循环冗余校验(CRC)等信息。

LoRaTM数据包包含以下三个组成部分:

(4)LoraWAN:Physical Message Formats-LMLPHP

前导码Preamble

  • [x] Preamble寄存器及其设置
RegPreambleMsb0x207-00x00(wr)前导码长度最高有效位
RegPreambleLsb0x217-00x08(wr)前导码长度最低有效位
// preamble for lora networks (nibbles swapped)
#define LORA_MAC_PREAMBLE 0x34
#define LORARegPreambleMsb 0x20
#define LORARegPreambleLsb 0x21
// 寄存器设置方法;由于LoraWAN1.0中默认为8字节的Preamble,所以不用操作该寄存器
writeReg(RegPreambleMsb, 0x00);
writeReg(RegPreambleLsb, 0x08);

由此,++Preamble值设定8字节,每个字节的值约定为0x34。++

可选报头

根据所选择的操作模式,可以选用隐式、显式两种报头。在RegModemConfig1寄存器上,通过设定ImplicitHeaderModeOn(RegModemConfig1的最低位)位选择报头类型。

  • [x] PHDR寄存器及其设置
LORARegPayloadLength0x227-0负载字节长度
LORARegPayloadMaxLength0x237-0负载长度最大值
RegModemConfig10x1D7-0RegModemConfig1

(4)LoraWAN:Physical Message Formats-LMLPHP

#define LORARegModemConfig1                        0x1D
#define LORARegPayloadLength 0x22
#define LORARegPayloadMaxLength 0x23
// 设置可选报头为隐式
#define SX1276_MC1_IMPLICIT_HEADER_MODE_ON 0x01
  • [x] LMIC数据结构中LMIC.rps的值
  • 包括SF值、BW值、CR值、IH报头模式值、NOCRC值,LMIC数据结构参见《LoraWAN——(2)LMIC library 编程模型及API》

    (4)LoraWAN:Physical Message Formats-LMLPHP
// Radio parameter set (encodes SF/BW/CR/IH/NOCRC)
typedef u2_t rps_t;
inline rps_t makeRps (sf_t sf, bw_t bw, cr_t cr, int ih, int nocrc) {
return sf | (bw<<3) | (cr<<5) | (nocrc?(1<<7):0) | ((ih&0xFF)<<8);
}

根据LMIC.rps设置的值,填写可选报头寄存器。

// configure LoRa modem (cfg1, cfg2)
if (getIh(LMIC.rps)) {
mc1 |= SX1276_MC1_IMPLICIT_HEADER_MODE_ON;
writeReg(LORARegPayloadLength, getIh(LMIC.rps)); // required length
}
// set ModemConfig1
writeReg(LORARegModemConfig1, mc1);

低数据速率优化

由于扩频因子较高时数据包的发送时间可能较长,因此可以选择在数据包发送和接收期间提高传输对频率变化的鲁棒性。

有效数据速率较低时,可通过LowDataRateOptimize位提高LoRa链路的鲁棒性。当单个符号传输时间超过16毫秒时,必须使用LowDataRateOptimize位。

有效负载PayLoad

数据包有效负载是一个长度不固定的字段,而实际长度和纠错编码率CR则由显式模式下的报头指定或者由隐式模式下在寄存器的设置来决定。另外,还可以选择在有效负载中包含CRC码。

Uplink Messages:上行数据包结构组成

上行链路消息是从终端发送到的网络服务端,由一个或多个网关中继;LORA物理报头(PHDR)加上首部CRC(PHDR_CRC)都包括在LORA无线分组的显式模式中,有效载荷(PHYPayload)的完整性受CRC保护。PHDR、PHDR_CRC和PHYPayload的CRC字段由无线收发器自动插入。由此处可知,PDHR(可选报头)是收发器自动插入的,只要注意显示、隐式相关寄存器的设置即可。

Downlink Messages:下行数据包结构组成

每个下行链路消息由网络服务器只发送给一个终端设备和由单个网关中继。下行链路消息使用其中LORA物理报头(PHDR)和一个首部CRC(PHDR_CRC),无线分组显式模式。

数据包组成

(4)LoraWAN:Physical Message Formats-LMLPHP

  • [x] PHYPayLoad组成
    1. MHDRd组成
  • Major 协议主要版本,00为LoRaWAN R1,其他为预留。
  • MType :Message type 消息类型
MType	    Description
000 Join Request Join请求帧
001 Join Accept Join接受帧
010 Unconfirmed Data Up 上行非确认帧
011 Unconfirmed Data Down 下行非确认帧
100 Confirmed Data Up 上行确认帧
101 Confirmed Data Down 下行确认帧
110 Rejoin Request Rejoin请求帧
111 Proprietary (自定义专有帧)
    1. MACPayLoad
  • [x] MACPayLoad组成
  • 2.1) FHDR组成

FHDR包含终端(DevAddr)的短设备地址,一字节帧控制(FCtrl),2字节帧计数器(FCNT)和高达15字节用于传输的MAC命令的框架选项

  • DevAddr 短设备地址
  • FCnt 帧计数器

    在join accept(连接接受)之后,终端帧计数器与网络服务器为该终端上的帧计数器都被重置为0。接着FCntUp和FCntDown将以每次发送数据帧递增1次的方式在各自的方向上递增。
  • FOpts

    FOpts字段最大15个字节,用来传输MAC命令。

  • 下行链路FCtrl帧的帧头内容:
  • 上行链路FCtrl帧的帧头内容:
  • ADR 自适应数据速率

    LoRaWAN利用自适应数据速率(ADR)功能特性适应和优化的静态终端设备的数据速率。

    如果ADR位被置位时,网络将通过适当的MAC命令控制终端的数据速率。一般移动终端不推荐使用ADR功能。
  • ACK 确认位

    当接收到一个确认数据信息,接收器应响应设定了确认位(ACK)的数据帧。如果发送者是终端,网络将在完成终端发送操作之后选择一个由终端打开的接收窗口发送确认信息。如果发件人是网关,终端自己的判断发送确认。
  • FPending 帧挂起位

    待发送帧标志位(FPending)仅用于下行链路通信,表明该网关具有更多的数据等待发送,因此,要求终端尽可能通过发送另一个上行链路消息打开另一个接收窗口。
  • FOptsLen

    FCtrl字段中的FOptsLen表示FOpts字段的实际字节长度。数据帧中的FOpts字段最大15个字节,用来传输MAC命令。

FOptsLen、FOpts、Fopts端口

  1. FOptsLen=0时,Fopts字段不存在;
  2. FOptsLen != 0时,Fopts字段存在,Fopts过程不加密;如果存在FOpts字段,端口0不能使用(FPort必须是不存在或不等于0)。
  3. 如果Fport = 0时,表示FRMPayload中只有MAC command;
  4. MAC的命令不能同时出现在有效载荷字段(FRMPayload)和帧选项域(FOpts)。
  • 2.2) FPort(可选)
  1. 如果FPort为0值指示该FRMPayload只包含MAC命令;
  2. FPort值1..223(0x01..0xDF)为特定的应用程序;
  3. FPort值224..255(0xE0..0xFF)保留为将来标准化 应用程序扩展。
  • 2.3) FRMPayload(可选)

    N是应用Payload(有效载荷)的字节数;M值MAC payload 的最大长度。

    N必须等于或小于:

    N ≤ M - 1 - (length of FHDR in octets)

捎带在FOpts中的MAC Commands

在网络管理中,一套MAC命令可以只在网络服务器和终端MAC层之间进行数据交换。 MAC层命令对于应用程序、应用服务器以及终端上的应用程序来说都是不可见的。

单个数据帧可以包含任何序列的MAC命令,此时夹带在FOpts字段中;或者在FRMPayload字段中作为单独的数据帧中发送,但是此时FPort端口字段必须设置为0。捎带在FOpts中的MAC命令通常不加密发送且数据长度不得超过15个字节;放在FRMPayload 中的MAC命令始终加密发送,并且必须不超过FRMPayload的最大长度。

  • [x] Link Check commands (LinkCheckReq, LinkCheckAns)

    (4)LoraWAN:Physical Message Formats-LMLPHP
  • [x] Link ADR commands (LinkADRReq, LinkADRAns)

    (4)LoraWAN:Physical Message Formats-LMLPHP
  • [x] End-Device Transmit Duty Cycle (DutyCycleReq, DutyCycleAns)

    (4)LoraWAN:Physical Message Formats-LMLPHP
  • [x] Receive Windows Parameters (RXParamSetupReq, RXParamSetupAns)

    (4)LoraWAN:Physical Message Formats-LMLPHP
  • [x] End-Device Status (DevStatusReq, DevStatusAns)

    (4)LoraWAN:Physical Message Formats-LMLPHP
  • [x] Creation / Modification of a Channel (NewChannelReq, NewChannelAns)

    (4)LoraWAN:Physical Message Formats-LMLPHP
  • [x] Setting delay between TX and RX (RXTimingSetupReq, RXTimingSetupAns)

    (4)LoraWAN:Physical Message Formats-LMLPHP
  • [x] 黄色区域解析

    (4)LoraWAN:Physical Message Formats-LMLPHP
05-11 22:43