LoRa 数据包物理帧格式

背景
LoRa模组的手册中关于数据包格式有如下图例。
在这里插入图片描述

这个图可以理解为是LoRa数据包物理格式的最上层分划分,实际数据包中还有更加细化的层次结构。本文针对LoRa数据包物理格式进行细化说明。
阅读本文可以帮助模组使用者解决一些不同型号的LoRa芯片平台间互联互通的疑惑。
过程
一、LoRa数据包物理帧格式顶层说明:
在这里插入图片描述

Preamble:前导码
前导用于使接收器与传入数据流同步。默认情况下,数据包配置为12符号长的序列。这是一个可编程变量,因此可以延长前导码长度,例如,为了减少接收密集型应用中的接收器占空比。然而,最小长度是可以以满足通信的。一旦考虑到前导数据的固定开销,就可以通过将RegisterStreamLength从6设置为65535来改变发送的前导长度,从而产生6+4到65535+4符号的总前导长度。这允许传输几乎任意长的前导序列。接收机进行周期性重新启动的前导码检测过程。因此,前导码长度的配置应与发射机前导码长度相同。如果前导码长度未知或可能变化,则应在接收器端编程设定最大前导码长度。这里所说的RegisterStreamLength从6设置为65535指的是推荐最小值是6,最大值是65535。但是不代表RegisterStreamLength的值不能成功写入小于6的值,这个值写的太小会影响通信成功率,写的太大又会影响数据包的效率。推荐的允许最小值为6,推荐的常用值为8.RegisterStreamLength值写入8时实际发送的为12(实际真实值为12)。就是说,有4个长度是一定会加入的,而且不受RegisterStreamLength设置的长短一定会加入的。
Header:头
根据选择的模式,有两种类型的头可用。标头类型由GModemConfig1寄存器中的ImpliciTheDermodeOnBit选择。
Explicit Header Mode显性头:
显性包头是默认的操作模式。在这里,报头提供有效载荷的信息,即:
以字节为单位的有效负载长度。前向纠错码率
有效负载是否存在可选的16位CRC。报头以最大纠错码(4/8)传输。它也有自己的CRC,允许接收方显示无效的报头。
Implicit Header Mode隐性头:
在某些情况下,在有效负载、编码速率和CRC是固定的或预先已知的情况下,通过隐式头模式可以减少传输时间。在此模式下,头将从包装中移除。在这种情况下,必须在无线电链路的两侧手动配置有效负载长度、误码率和是否使用CRC。
注:选择SF=6时,只能使用隐性头模式。就是说如果使用了隐性头模式,就意味着只能使用固定长度数据包。
Payload负载:
这部分就是放的使用者真实想发的数据包内容。
CRC:
这部分是否存在由模组使用者配置决定,长度为2字节。
二、LoRa数据包物理帧格式深入说明:
(1)Preamble
前导码进行深入说明的话,分为3个部分,如下图:
在这里插入图片描述

三个部分为可变前导(variable preamble),LoRa帧同步字(Sync Word)和帧起始分隔符(SFD:Start Frame Delimiter)
可变前导(variable preamble):是模组使用者有权限配置的,其长度由RegisterStreamLength配置。
LoRa帧同步字(Sync Word):是两个字节,在一代LoRa模组(SX127X)中由一个字节寄存器RegSyncWord配置,默认该字节内容为0x12,扩展为2字节后为0x1424,LoRaWAN中需要改为0x34,扩展为2字节后为0x3444。
由一个 字节扩展为2字节方式为,先取高4位后补0x4扩展位第一个字节,再取低4位左移4位后补0x4扩展位第二个字节。
在这里插入图片描述在这里插入图片描述

在二代LoRa模组(SX12X/LLCC68)中由两个字节寄存器LoRa Sync Word决定,默认为0x1424,LoRaWAN中需要改为0x3444。
在这里插入图片描述

由此可知一代LoRa模组(SX127X)的可配置范围小于二代LoRa模组(SX12X/LLCC68)。
如果模组使用者再使用一代LoRa模组时自定义了一个字节长度的寄存器RegSyncWord,比如配置成了0xAA,则使用二代LoRa模组(SX12X/LLCC68)要与其互联互通时二代LoRa模组(SX12X/LLCC68)的2字节寄存器LoRa Sync Word需要做对应修改,改为0xA4A4.
帧起始分隔符(SFD:Start Frame Delimiter):
LoRa规范中PHY数据包中的SFD部分规范比较明确,为占2.25个符号宽度的标准down-chirp信号,而其中的标准down-chirp信号,如下图所示。
在这里插入图片描述

这个2.25一般表述时常表述为2,实际发时为2.25个非整数个数,这样做时LoRa协议故意为之,有助于信号同步。
(2)Header头
Header头进行深入说明的话,分为4个部分,共20位,如下图:
在这里插入图片描述

4个部分为别为:payload数据包长度,CR编码方式,payload后是否包含CRC数据,以及header的内容的CRC,共占2.5Byte长度,也就是20个Bit。另外Header部分固定采用CR=4/8的编码方式和数据包模式选择的CR不共用。
Payload数据包长度:
Header中的第一个Byte用于表示整个数据包中,后续Payload内容的长度,占了8个bit,因此一包LoRa数据中,后续payload内容最大为255Byte
CR编码方式:
LoRa标准中定义了四种编码方式,分别将4个bit原始数据,经过编码后变化至5,6,7,8四种长度数据。这四种编码方式的选择,相应的定义在了LoRa Header中数据包长度接下来半个Byte(4个bit)中的三个bit,如图 13所示。
payload后是否包含CRC数据:
LoRa 物理层数据包的CRC是可以选择传输或者不传输的,定义在了LoRa Header中数据包长度接下来半个4个bit中的其中一个bit。如果数据包中存在CRC,那么还需要在有效负载最后额外再传输2个Byte内容,即16bit原始数据。
header的内容的CRC:
LoRa Header数据中的最后一个Byte内容为Header数据字段的CRC校验,即前面所述的Payload数据包长度、CR编码方式、和payload后是否包含CRC数据在这12bit内容的CRC校验,占最后8位宽度,如下图 中Header Checksum部分所示。
结论
把LoRa数据包物理格式搞清除,便于模组使用者更好的理解LoRa通信。最直接的一个实用点就是可以帮助客户解决一代LoRa模组(SX127X)和二代LoRa模组(SX12X/LLCC68)在互联互通调试过程中遇到通信异常的问题的排查。
请读者遇到一代LoRa模组(SX127X)和二代LoRa模组(SX12X/LLCC68)互联互通异常时重点关注下容易被忽略的LoRa帧同步字(Sync Word)。
一代LoRa模组(SX127X)和二代LoRa模组(SX12X/LLCC68)互联互通异常时还要注意下前导码长度要一致,不一致的话可以通信但是会经常丢包。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

l531798151

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值