LoraWAN论坛

标题: 为什么 ChirpStack 会提示 mic error 呢? [打印本页]

作者: BeyondDream    时间: 2023-7-17 09:08
标题: 为什么 ChirpStack 会提示 mic error 呢?
本帖最后由 BeyondDream 于 2024-5-21 14:54 编辑

# 背景
将 1 个运行了较长时间的 LoRa Device 加入 1 台 ChirpStack 出现 mic error

# 原理
FCnt 在 Device 和 ChirpStack 都是 32 位整数,而 LoRaWAN 协议是 16 位整数。

每当 FCnt 超过 0xFFFF(65535) 时,Device 和 ChirpStack 都需要记录高 16 位,才能同步 FCnt 数值。如下例所示:

LoRa Device    LoRaWAN    ChirpStack
0                   0               0
1                   1               1
...                  ...              ...
65535             65535        65535
65536             0              65536
65537             1              65537
...                  ...              ...

当一台 ChirpStack 突然接入 1 个运行超过了 0xFFFF(65535) 个 LoRa 报文的 Device 时,它无法知道 FCnt 高 16 位数值。
也就是双方的 FCnt 同步失败。

因为 FCnt 被用于计算 MIC 和 Payload 加密,这就引发了 mic error,也引起了 Payload 解密错误。

# 解决
尽可能让 LoRa Device 和 ChirpStack 同步运行,比如:将 Device 重启(迫使 FCnt = 0)即可解决。



作者: BeyondDream    时间: 2025-5-27 11:05
如果是 ChirpStack 重启了(或者新安装)如果解决 FCnt 不一致的问题呢?这至少有 2 种办法:

办法1:重启 Device 使得双方的 FCnt 都从 0 开始计数。
如果 Device 有电源按钮并触手可及,手动开关就可以了。
如果 Device 无法触及,配置它的 KeepAlive 参数,当心跳间隔过时而握手失败后 Device 会自动重启。
请参考《锐米 LoRaWAN 模组说明书》 http://www.rimelink.com/nd.jsp?f ... p;id=59#_np=105_315

办法2:从“旧” ChirpStack 系统复制 FCnt 到“新” ChirpStack 系统,并增加一个补偿值。
比如“旧” ChirpStack FCnt=100000,在1小时下发约100次,那么“新” ChirpStack FCnt=100000+100=100100




欢迎光临 LoraWAN论坛 (http://lora.timeddd.com/) Powered by Discuz! X3.3