标签:status its 分组 加密 cat 情况 device turn ++
LoRaTM调制解调器采用隐式和显式两种数据包格式。其中,显式数据包的报头较短,主要
包含字节数、编码率及是否在数据包中使用循环冗余校验(CRC)等信息。
LoRaTM数据包包含以下三个组成部分:
前导码 可选报头 数据有效负载
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,则只能使用隐式报头模式。
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
// 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位设置必须一致。
数据包有效负载是一个长度不固定的字段,而实际长度和纠错编码率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
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(专有消息)可以用于实现与标准报文不互操作的非标准消息格式,但这些设备间必须在专有扩展上达成共识。
[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命令的框架选项
下行链路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
FOptsLen
FCtrl字段中的FOptsLen表示FOpts字段的实际字节长度。数据帧中的FOpts字段最大15个字节,用来传输MAC命令。
---
1) FOptsLen=0时,Fopts字段不存在;
2) FOptsLen != 0时,Fopts字段存在,Fopts过程不加密;如果存在FOpts字段,端口0不能使用(FPort必须是不存在或不等于0)。
3) 如果Fport = 0时,表示FRMPayload中只有MAC command;
4) MAC的命令不能同时出现在有效载荷字段(FRMPayload)和帧选项域(FOpts)。
在网络管理中,一套MAC命令可以只在网络服务器和终端MAC层之间进行数据交换。 MAC层命令对于应用程序、应用服务器以及终端上的应用程序来说都是不可见的。
单个数据帧可以包含任何序列的MAC命令,此时夹带在FOpts字段中;或者在FRMPayload字段中作为单独的数据帧中发送,但是此时FPort端口字段必须设置为0。捎带在FOpts中的MAC命令通常不加密发送且数据长度不得超过15个字节;放在FRMPayload 中的MAC命令始终加密发送,并且必须不超过FRMPayload的最大长度。
标签:status its 分组 加密 cat 情况 device turn ++
原文地址:https://www.cnblogs.com/younining/p/9514517.html