0755-23080616 吴小姐: 15813701668 范先生:15813708988 林先生:15813708868 宋先生:19192162070

LoRa 通信出现丢包怎么办?

2026-08-11 07:28

分享到:

LoRa 点对点链路丢包,通常分两种情况:一种是近距离丢包率就很高,说明基础配置或硬件连接本身就有问题;另一种是近距离正常,拉远距离、装入外壳或连续发送一段时间后才开始丢包,说明问题出在链路余量或稳定性上。两种情况的排查方向完全不同,不能混在一起处理。

另外,丢包也不一定发生在无线链路上。接收端没收到完整数据,或者主机程序在读取和处理时遗漏,最终表现都一样,都是接收端少包。

所以排查的第一步,不是急着调射频参数,而是先记录几个基础数据:发送端实际发出了多少包、接收端完整收到了多少包、两端的基本配置、包长、发送间隔和测试距离。这些信息拿到手,基本就能判断问题出在哪一层,下一步该往哪个方向查。

本文统一按发包数和收包数计算丢包率:

丢包率 =(发包数 - 收包数)÷ 发包数 × 100%

本文讨论由两个 LoRa 模块组成的点对点通信链路,不覆盖 LoRaWAN 网关、回传和网络服务器。文中涉及两类模块,它们能提供的观察信息不同,排查时不要混用。

模块类型

本文示例

主机可以直接看到

SPI 收发模块

NiceRF LoRa2021 及其 LR2021 芯片

主机直接下发收发命令,可记录 TxDone、RxDone、IRQ、FIFO 和单包状态

透明 UART 数传模块

LoRa6100Pro-mini

主机主要查看本机 UART 写入、对端 UART 输出和模块配置,通常看不到模块内部的 TxDone、RxDone 等状态

使用其他型号时,应按对应手册确认它属于哪一类,以及主机实际能读取哪些参数和状态。

1、近距离丢包率高

说明基础链路本身就没建立起来,问题通常出在配置或硬件连接上,跟射频性能关系不大。

1.1 核对两端的配置是否匹配

先按所用模块的手册核对可以设置的参数。SPI 收发模块和 UART 数传模块的配置入口不同,不使用同一张参数清单。

SPI 收发模块核对无线参数

第一轮核对频率、BW、SF、CR、包头模式和 CRC。以 LR2021 为例,使用隐式包头模式时还要核对固定载荷长度;使用显式包头模式时,确认接收端允许的最大长度不小于发送长度。基础参数一致后,若仍出现 CRC 错误、包头错误或收不到 RxDone,再查前导码、SyncWord、IQ、频率校准、超时和接收模式。

UART 数传模块核对无线和串口参数

先核对两端的工作频段、信道、空中速率、工作模式,以及手册要求两端必须一致的网络参数;LoRa6100Pro-mini 包括 NET ID。每个模块的串口参数都要和各自的本地主机匹配。启用 AES、CRC 或寻址时核对对应开关;若启用 AES 还需核对密钥,启用寻址则核对 ID。

不要只比较初始化代码,尽量读回两端当前生效值。LoRa6100Pro-mini 支持通过设置模式读回当前参数,具体操作见产品手册。使用其他 UART 型号时,按对应手册确认进入设置模式的方法和可读字段。

发现不一致时只修正对应项,然后按开头的基础测试条件(短距离、固定包长和固定间隔)复测。配置一致但问题没有变化,再进入与症状对应的章节。

1.2 用一轮简单测试判断丢在哪一段

SPI 收发模块先看发送和接收是否完成

如果 SPI 主机能看到每次无线发送和接收结果,就分别记录 TxDone、RxDone、CRC 错误和主机最终收到的包数,用来判断数据丢在发送、无线链路还是主机处理。总体丢包率仍按本章开头的发包数和收包数计算。如果重传由主机程序或 UART 数传模块固件实现,测试期间可先关闭重传,或把重传次数单独记录,避免重传掩盖底层链路问题。

现象

更可能出问题的位置

下一步

发送命令后没有 TxDone,或发送超时增加

SPI 时序、供电或发送控制

1.4 检查收发时序,2.2 检查供电

TxDone 正常,对端 CRC 或包头错误增加

参数差异、弱信号、干扰或频偏

先看1.1,再看2.1

TxDone 正常,对端没有 RxDone

接收端未处于 RX 状态、参数不一致、链路问题或碰撞

1.1、1.2、2.1

RxDone 数接近发送数,主机程序收到的包数仍偏低

IRQ、FIFO、缓存或解析

1.3

TxDone 只说明本次发射流程已经结束,不能证明对端收到。

透明 UART 数传模块先看两端串口收发

透明 UART 数传模块通常看不到模块内部的重传、TxDone 和 RxDone。此时按本地主机的发包数和对端主机的收包数计算丢包率,不必寻找模块没有开放的内部状态。

现象

更可能出问题的位置

下一步

本机 UART 已完整写出,对端 UART 完整收到的包数仍偏低

无线配置、链路、碰撞或发送缓存

1.1、1.2、1.3、2.1

对端 UART 出现半帧、帧边界错位或时延逐包增长

串口参数、组包、缓存或输入过快

1.3

两类模块都适用的对照现象

现象

更可能出问题的位置

下一步

增大发包间隔后明显恢复

接收端没有及时重新进入 RX、主机阻塞或缓存来不及处理

1.2、1.3

单节点正常,多节点同时发送才丢

同信道同时发射冲突或调度问题

1.4

A→B 明显差于 B→A

单侧供电、天线、馈线或射频前端

2.2

近距离高功率异常,降功率或拉开距离后恢复

接收输入电平或射频前端

2.1

1.3 检查主机接口与数据处理

SPI 收发模块检查 IRQ、FIFO 和主机处理

对 LoRa2021/LR2021,每次接收结束后,用 GetLoraPacketStatus 保存最近一包的 SNR、包 RSSI 和载荷长度;启用多 SF 接收时,再记录由哪个检测器收到该包。一轮测试结束时,用 GetLoraRxStats 读取并对照接收包总数、CRC 错误、包头错误和错误同步(false sync)的计数增量。

主机处理按下面的顺序查:

核对 DIO 与 IRQ 映射,以及 IRQ 的读取和清除顺序;

每次 RxDone 后先取得包长,再及时读出 FIFO;

对照 RxDone、FIFO 完整读取、应用校验通过和主机程序收到数据四个计数;

如果程序使用接收队列,再增加成功入队数;

不把 FIFO 中有数据直接算成有效消息。LR2021 的接收 FIFO 为 256 字节,CRC 错误数据也会写入 FIFO,仍要结合 IRQ、应用层校验结果和消息 ID 或序号判断。

如果 RxDone 数仍接近发送数,而 FIFO 完整读取数或主机程序收到的包数开始落后,说明大部分包已经到达接收芯片,问题出在主机读取、解析或缓存阶段。如果需要确认主机处理速度是否跟不上,可缩短包间隔或临时增加主机负载;问题随之加重时,就继续检查读取、解析和缓存。

透明 UART 数传模块先做回环,再检查缓存和帧边界

透明 UART 数传模块通常看不到模块内部的 TxDone、RxDone 等状态。LoRa6100Pro-mini 的 Non MESH 模式会把本机串口数据经无线转发到对端串口。主机首先能确认的是本机 UART 是否完整写出,以及对端 UART 是否完整收到数据。

先做有线回环,检查主机 UART、驱动、电平转换和接线。第一轮只确认 UART 是否完整写出、接收缓冲区是否溢出。出现半帧、校验失败或时延累积后,再检查帧边界和任务调度延迟;使用 DMA 接收时,同时检查 DMA 是否按预期完成。

LoRa6100Pro-mini 典型应用电路图,标注主机与模块共地、TXD/RXD 连接及 CS、SET 引脚

LoRa6100Pro-mini 典型应用电路。排查前先核对主机与模块共地、TXD/RXD 连接,以及 CS、SET 的状态。

若主机持续写入串口的速度高于 LoRa6100Pro-mini 按当前空中速率转发的速度,待发送数据就可能来不及完整转发。先降低应用发送速率;如果问题缓解,再分别改变报文长度和包间隔。开启 LBT 后,信道持续忙会延后发送,主机也应相应控制写入速率,避免待发送数据超出缓存容量。

复测时观察端到端时延是否逐包增长。如果时延持续累积,就继续降低输入速度,并检查模块和主机缓存是否积压。

1.4 连续发送、多节点或 SPI 没有 TxDone 时检查收发时序

两类模块增大发包间隔后恢复

先增大发包间隔。如果丢包明显减少,再按模块类型补充时间记录。第一轮不必给每个环节都加时间戳。

SPI 收发模块按时间记录主机发出发送请求、TxDone、对端 RxDone、FIFO 读取完成、主机程序收到数据以及重新进入 RX。

UART 数传模块记录本机 UART 写完和对端 UART 完整收到数据的时间。

若 SPI 收发模块能读到接收状态,且某个丢包的发生时刻落在接收端尚未重新进入 RX 的时段内,就修正接收流程或加大发包间隔。以 LR2021 为例,SetRx 的单次接收模式在收到一包后会回到配置的 fallback mode(即预先设置的后续状态);连续接收模式会自动继续搜索新包。模式选错或接收结束后没有及时重新下发接收命令,都会使接收端在一段时间内不处于 RX,错过这期间到达的数据包。其他芯片应按各自的接收模式定义处理。

UART 数传模块看不到上述芯片状态时,不按 TxDone、RxDone 或 SetRx 排查。增大发包间隔后恢复的,转到1.3 检查串口输入速度、缓存和帧边界。

两类模块都要检查主机任务中是否有长时间关中断、阻塞式日志、Flash 擦写或高优先级任务。确认这些动作与丢包同时出现后,再处理对应任务,不必一开始就为所有任务增加日志。

SPI 收发模块发送命令后没有 TxDone

LoRa2021 提供 SPI、BUSY 和 DIO7/8/9 信号,主机可据此记录命令、忙状态和收发事件,相关引脚定义见产品规格书

LoRa2021 模块引脚位置图,标注 SPI、BUSY、复位和 DIO 接口

LoRa2021 模块引脚位置,可据此核对 SPI、BUSY、复位和 DIO 接线。

对 LoRa2021/LR2021,先按时间顺序记录主机发出发送请求、BUSY 释放、SetTx 以及 TxDone 或 Timeout。BUSY 变低后再发送 SPI 命令,并在下一条响应中检查上一条命令状态和 CmdError,确认 SetTx 已被芯片接受。命令已被接受但没有 TxDone 时,再确认是否出现 Timeout,并核对 DIO/IRQ 映射、发送超时参数以及 IRQ 的读取和清除顺序。

如果发射同时出现复位、BUSY 异常或模块端电压跌落,转到2.2 检查供电。

两类模块单节点正常,多节点同时发送才丢

先只开一个发送节点,再开启第二个节点,最后让两个节点错开发送。如果单节点稳定、同时发送恶化、错开后恢复,问题更像同时发射冲突或调度,而不是链路距离。

LR2021 的 CAD 依靠 LoRa 相关性检测,可配置为只检前导码或检测任意 LoRa 符号,并支持多个 SF 并行;但它只识别 LoRa 信号,对非 LoRa 或邻道干扰会判为空闲,因此适合用于 CSMA 类的发送前避让。要按能量门限判断信道是否被占用(含非 LoRa 干扰)或满足 LBT 法规要求,应使用基于 RSSI 的通用 CAD 或模块自带的 LBT 功能。是否存在同时发射冲突,仍由单节点、同时发送和错开发送三轮对照判断。修正时可选择轮询、固定时隙、错开发送或有限随机退避。

2、近距离正常,远距离或特定条件下丢包

近距离没问题,拉远距离、装外壳或连续发送后才丢包,说明基础链路是通的,问题出在链路余量或稳定性上。

2.1 丢包随距离、信道或温度变化时检查无线链路

距离、遮挡或姿态改变后变差

这种情况首先要判断的是:链路余量够不够。

如果模块能输出每包的 RSSI,拿丢包前后已收到数据包中较低的 RSSI,跟当前配置对应的接收灵敏度比较,就能算出链路余量还剩多少。SNR 单独观察变化趋势,不参与余量计算。注意只选与当前频率、带宽和扩频因子对应的灵敏度规格行,不同配置下差别很大。

余量不足(RSSI 接近或低于灵敏度):提高扩频因子或减小带宽可以改善接收灵敏度,但代价是空中时间变长、时延增大、空中速率降低;增加编码冗余也会延长传输时间并增加能耗,要根据实际需求取舍。

余量充足但仍然丢包:问题大概率不在链路预算上,转去查天线安装、匹配或射频前端。

如果模块不能输出每包 RSSI,用短距离测试、距离变化和天线姿态做对照就行

丢包随信道、时段或位置变化

短距离测试稳定,丢包率却随信道或时段明显变化,优先查现场干扰。

手边有频谱仪或接收机时,直接扫一下当前频段,看非 LoRa 信号、宽带信号或邻道信号分别出现在哪个频率、占用多宽带宽、持续多久,干扰来源基本就能定位。

没有仪器时,用对照法排查:硬件不动,先换信道复测,再换时段,最后才动安装位置或天线姿态。SPI 收发模块同时比较 TxDone、RxDone 和错误计数;透明 UART 数传模块比较本机发送数和对端完整收包数。模块能输出 RSSI/SNR 或错误计数时一并保存。换信道后丢包率明显变化,说明干扰集中在某个频段;换时段后变化明显,说明干扰源是间歇性的。

只在窄 BW 或温度变化时出现

这种情况大概率是频率偏了。BW越窄,对频率精度的要求越高,稍微偏一点就可能收不到。温度变化也会影响晶振频率,所以问题会跟着温度走。

先换一对已知正常的模块复测,或者在其他条件不变的情况下换到更宽的带宽试试。如果换宽带宽就好了,基本可以确认是频率基准的问题。

确认之后,核对两端的实际载频、晶振或 TCXO 配置,以及频率校准流程是否正确。有条件的话,用仪器测一下实际载频偏了多少。频率基准有问题就得校准或更换振荡源,靠提高扩频因子是绕不过去的。

近距离高功率时反而异常

保持其他条件不变,降低发射功率或逐步拉开两端距离。只有丢包率随之下降时,才按目标芯片和射频前端规格检查接收端允许的输入电平、外部增益和板级射频路径。结果没有变化时,回到开头按现象重新分流,再查1.1 的参数、1.2 的接收状态或1.3 的主机处理。

2.2 发射时复位、装壳后变差或只有一个方向差

发射时复位或 SPI 没有 TxDone

没有示波器时,先换用已知正常的供电方案做对照。现象随供电变化时,再测模块 VCC 引脚附近的发射瞬态电压。

SPI 收发模块记录最低电压是否与 TxDone、Timeout、BUSY 异常或复位同时出现。

UART 数传模块记录最低电压是否与串口停止输出或模块复位同时出现。

LoRa2021 的工作电压范围为 1.8~3.6 V。若开始发射时出现电压跌落,再按目标频段、功率档、规格书和参考设计检查去耦与电源裕量。

裸板正常,装入外壳后变差

天线应在最终装机状态下检查。先确认天线频段、连接器、馈线和 50 Ω 射频路径,再分别改变极化方向、离地高度以及人体或金属遮挡。LoRa2021 的 Sub-GHz 与 2.4G/S_ANT 天线端口分别引出,应按当前规格书核对所用频段与天线端口。

A→B 明显差于 B→A

方向差异可能来自 A 端发射链路,也可能来自 B 端接收链路。分别交换天线、馈线、连接器和供电,每次只换一个部件。如果故障跟随某个部件移动,就继续检查该部件或对应射频路径。

3、修正后先快速复测, 再做正式验收

每次只改一项,然后回到开头的基础测试条件(短距离、固定包长和固定间隔),比较修改前后的发包数、收包数和丢包率。结果没有变化时,恢复原来的设置,再检查其他原因;结果明显改善时,再重复一轮确认。

找到原因后,再按项目要求确定最大允许丢包率、允许的最长连续丢包、发包数、测试时长和重复轮次,作为最终验收条件。

我们公开的 LoRa2021 距离测试 提供了一份发包数和收包数记录示例:测试使用 860.5 MHz、21 dBm ±1 dB、SW868-ZD210 天线和 10 字节载荷,每组发送 100 包。在 876 m、1.4 km 和 1.8 km 三个测试点,SF10、BW 125 kHz 这一组均记录为 100/100。项目复测可沿用这种记录格式,并按实际安装场景设定目标距离和通过门槛。

LoRa2021 点对点距离测试现场。记录测试板、天线、安装位置和周边环境,复测时才能按相同条件比较结果。

参考文献

[1] Semtech. LR2021/22 Datasheet v2.1

[2] Semtech. SX1261/SX1262 Datasheet

[3] Semtech. AN1200.22 LoRa Modulation Basics (Rev.2, May 2015)

[4] Semtech. AN1200.48 LoRa Channel Activity Detection (CAD) with SX126x

[5] Semtech. AN1200.59 Selecting the Optimal Reference Clock v1.7

[6] Semtech. AN1200.37 Recommendations for Best Performance (Thermal Relief)

[7] NiceRF LoRa2021 全频段无线通讯模块 规格书 V1.3

[8] NiceRF LoRa6100Pro-mini 1W 串口 LoRa 无线组网模块 规格书 V1.2

[9] NiceRF LoRa2021 模块户外实测报告:远距离高速 FLRC 与 LoRa 性能对比