请选择 进入手机版 | 继续访问电脑版
查看: 1161|回复: 0

[技术交流] LoRa数据包物理帧格式详解

[复制链接]

74

主题

169

帖子

573

积分

利尔达员工

Rank: 9Rank: 9Rank: 9

积分
573
发表于 2022-10-17 09:21:01 | 显示全部楼层 |阅读模式
  背景

  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)。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表