Physical Message Formats

Posted younining

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Physical Message Formats相关的知识,希望对你有一定的参考价值。

四、Physical Message Formats

LoRa数据包结构

LoRaTM调制解调器采用隐式和显式两种数据包格式。其中,显式数据包的报头较短,主要
包含字节数、编码率及是否在数据包中使用循环冗余校验(CRC)等信息。
LoRaTM数据包包含以下三个组成部分:

前导码 可选报头 数据有效负载

技术分享图片

前导码Preamble

  • [x] Preamble寄存器及其设置
reg_name reg_addr bits 默认值 description
RegPreambleMsb 0x20 7-0 0x00(wr) 前导码长度最高有效位
RegPreambleLsb 0x21 7-0 0x08(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的最低位)位选择报头类型。

显式报头:显式报头模式是默认的操作模式。在这种模式下,报头包含有效负载的相关信息,包括:

  • 以字节数表示的有效负载长度;
  • 前向纠错码率;
  • 是否打开可选的16位负载CRC。
    报头按照最大纠错码(4/8)发送。另外,报头还包含自己的CRC,使接收机可以丢弃无效的报头。

隐式报头:在特定情况下,如果有效负载长度、编码率及CRC为固定或已知,则比较有效的做法是通过调用隐式报头模式来缩短发送时间。这种情况下,需要手动设置无线链路两端的有效负载长度、错误编码率及CRC。
注意:如果将扩频因子SF设定为6,则只能使用隐式报头模式。

  • [x] PHDR寄存器及其设置
reg_name reg_addr bits description
LORARegPayloadLength 0x22 7-0 负载字节长度
LORARegPayloadMaxLength 0x23 7-0 负载长度最大值
RegModemConfig1 0x1D 7-0 RegModemConfig1

技术分享图片

LORARegPayloadLength:负载字节长度。隐式报头模式下需要设置寄存器,以达到预期的数据包长度。不允许将寄存器值设置为 0。
LORARegPayloadMaxLength:负载长度最大值;如果报头负载长度超过该最大值,则会产生报头CRC错误。允许对长度不正确的数据包进行过滤。

#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》
    技术分享图片
// 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位。

注意: 发射机和接收机的LowDataRateOptimize位设置必须一致。

有效负载PayLoad

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

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

Preamble PHDR PHDR_CRC PHYPayload CRC

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

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

Preamble PHDR PHDR_CRC PHYPayload

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

数据包组成

技术分享图片

  • [x] PHYPayLoad组成

    MHDR MACPayLoad MIC
  • 1) MHDRd组成

    Bit 7..5 4..2 1..0
    MHDR bits MType RFU Major
  • 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                 (自定义专有帧)

数据消息既用于MAC命令也用于应用数据,他们可以被组合在一起在单个消息中传送。确认帧会被接收并答复确认,非确认帧将不答复。Proprietary(专有消息)可以用于实现与标准报文不互操作的非标准消息格式,但这些设备间必须在专有扩展上达成共识。

  • 2) MACPayLoad
  • [x] MACPayLoad组成

    FHDR FPort(可选) FRMPayload(可选)
  • 2.1) FHDR组成

    Size (bytes) 4 1 2 0..15
    FHDR DevAddr FCtrl FCnt FOpts

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

  • DevAddr 短设备地址
  • FCnt 帧计数器
    在join accept(连接接受)之后,终端帧计数器与网络服务器为该终端上的帧计数器都被重置为0。接着FCntUp和FCntDown将以每次发送数据帧递增1次的方式在各自的方向上递增。
  • FOpts
    FOpts字段最大15个字节,用来传输MAC命令。
    ---
  • 下行链路FCtrl帧的帧头内容:

    Bit 7 6 5 4 [3...0]
    FCtrl bits ADR RFU ACK FPending FOptsLen
  • 上行链路FCtrl帧的帧头内容:

    Bit 7 6 5 4 [3...0]
    FCtrl bits ADR ADRACKReq ACK RFU FOptsLen
  • 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)
    技术分享图片
  • [x] Link ADR commands (LinkADRReq, LinkADRAns)
    技术分享图片
  • [x] End-Device Transmit Duty Cycle (DutyCycleReq, DutyCycleAns)
    技术分享图片
  • [x] Receive Windows Parameters (RXParamSetupReq, RXParamSetupAns)
    技术分享图片
  • [x] End-Device Status (DevStatusReq, DevStatusAns)
    技术分享图片
  • [x] Creation / Modification of a Channel (NewChannelReq, NewChannelAns)
    技术分享图片
  • [x] Setting delay between TX and RX (RXTimingSetupReq, RXTimingSetupAns)
    技术分享图片
  • [x] 黄色区域解析
    技术分享图片






































以上是关于Physical Message Formats的主要内容,如果未能解决你的问题,请参考以下文章

selenium.common.exceptions.WebDriverException: Message: unknown Error: cannot find Chrome binary(示例代

Type Status Report Message /$%7BpageContext.request.contextPath%7D/upload.do Description The origi(代

python+appium 已解决真机运行appium报错“WebDriverException: Message: A new session could not be created. ((代

bugRecord2selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable(代

kafkakafka DefaultRecordBatch. The older message format classes only support conversion from class(代

Tensorflow ValueError: Protocol message RewriterConfig has no "layout_optimizer" field(示例代