【LoRa】打开硬件CRC校验功能,但没有起作用?

1 前言

在使用LoRa模式(非FSK)时,可能遇到明明RX端已经打开CRC校验了,为什么payload错误了,没有报CRC error中断?本章就这个问题展开讲讲,如何正确使用芯片的硬件CRC校验,并延申到CR和payload length的使用。

2 解析

确实存在前言中的现象,前提是使用的explicit header模式,即有header模式,这样的话RX端的CRC有没有被打开取决于TX端的配置,而不是RX的配置。要讲清这个问题,还是需要先将LoRa的物理协议贴出来分析,如下图。
LoRa协议
header构成
在LoRa协议组成中,有一部分为header,其中header由四部分组成:

  1. length指本包payload的长度,不包含其他的。
  2. CR指本包对payload和payload CRC部分所采用的编码值,由代码配置。
  3. Has CRC指本包是否启用硬件CRC校验。
  4. Header Checksum指header中三部分几个symbol的CRC校验值,由于header传输的都是重要并不允许出错的值,所以header单独校验,并使用最严编码CR=4/8。

重点来了,TX端发LoRa包,RX端接收到header时,会读出length、CR和Has CRC,并且RX会按照读出来的结果去使用,不管RX端在代码中如何配置的,所以说这三个值取决于TX端。

3 结论

  1. 出现前言中提到的问题的原因是在TX端关闭了CRC校验,在RX端打开了CRC校验,认为应该有CRC校验,但实际上CRC校验是去决于TX端的配置。
  2. 同理,CR和payload length的配置也是取决于TX端。
  3. 如果是implicit header,也就是无header,那就是取决于RX端自己的配置了。

总而言之,其实这个问题很好避免,就是写代码的时候遵循代码规范,TX端和RX端配置参数都使用一样的即可。

3.1 延申

在网关芯片SX1302中,对multi-channels(0-7)也没有CR的配置,因为它的CR值也是取决于发送端的header中的配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Victor随笔集

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

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

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

打赏作者

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

抵扣说明:

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

余额充值