E22系列UART串口型LoRa模块通、E106系列与E870系列LoRaWAN网关模块常通过 AT 指令完成参数配置,风格大同小异,以下为常见流程示例,具体指令请以所用模块手册为准。
AT+UART=115200,8,1,NONE # 串口参数
AT+BAND=470 # 频段(CN470)
AT+SF=9 # 扩频因子
AT+BW=125 # 带宽 125kHz
AT+CR=1 # 编码率 4/5
AT+POWER=17 # 发射功率
AT+DEVEUI=xxxxxxxxxxxxxxxx # OTAA 入网参数
AT+APPEUI=xxxxxxxxxxxxxxxx
AT+APPKEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
AT+SAVE
AT+REBOOT
若使用 SPI 型射频芯片自行驱动,则直接操作寄存器。以 SX1276/SX1278 配置 SF9 / BW125 / CR4/5 为例:
void SX1278_WriteReg(uint8_t addr, uint8_t dat)
{
HAL_GPIO_WritePin(NSS_PORT, NSS_PIN, GPIO_PIN_RESET);
uint8_t tx[2] = { addr | 0x80, dat };
HAL_SPI_Transmit(&hspi1, tx, 2, HAL_MAX_DELAY);
HAL_GPIO_WritePin(NSS_PORT, NSS_PIN, GPIO_PIN_SET);
}
SX1278_WriteReg(0x01, 0x80); /* Sleep + LoRa 模式 */
SX1278_WriteReg(0x1D, 0x72); /* BW=125kHz, CR=4/5 */
SX1278_WriteReg(0x1E, 0x94); /* SF=9, TXCRC=1 */
uint32_t frf = (433000000ULL * 524288) / 32000000;
SX1278_WriteReg(0x06, (frf >> 16) & 0xFF);
SX1278_WriteReg(0x07, (frf >> 8) & 0xFF);
SX1278_WriteReg(0x08, frf & 0xFF);
SX1278_WriteReg(0x01, 0x81); /* Standby */
注意:SF11/SF12 需将 RegModemConfig3(0x26) 的 LowDataRateOptimize 位置 1,否则长时间传输会出现解调失步。
入网看起来只是「节点发一条、服务器回一条」,实际参与方有节点、网关、网络服务器与应用服务器。完整链路是:
① 节点构造 Join Request 帧,携带 JoinEUI(原 AppEUI)、DevEUI 与随机 DevNonce,用 AppKey 计算 MIC 后按区域规定的频率与扩频因子发出。
② 网关在对应信道监听,解调、解析并校验 CRC,确认是合法 LoRaWAN 帧。
③ 网关把数据封装成 UDP 包,经 Packet Forwarder 或 LoRa Basics Station 转发给网络服务器。
④ 网络服务器用注册的 JoinEUI、DevEUI、AppKey 校验 MIC,并检查 DevNonce 是否被重复使用。
⑤ 校验通过后生成 Join Accept,分配 DevAddr 与 NwkSKey/AppSKey,调度网关在 RX1 或 RX2 窗口下行。
⑥ 网关在指定时间与频率上发射 Join Accept。
⑦ 节点在接收窗口解调下行包,用 AppKey 解密并校验 MIC,全部通过后保存会话参数,入网完成。
入网失败不是单一故障点,而是全链路任一环节断裂都会指向同一个症状:节点反复发 Join Request 但入不了网。按链路逐段定位,效率远高于在节点代码里翻找。
卡在空口 ——串口显示发送成功但服务器完全收不到。优先查密钥与 EUI 是否匹配,以及区域频段是否正确;同时确认发射功率配置没被写死在超限值上。
卡在网关 ——节点日志正常但网关后台无上行记录。检查天线与驻波比、接收频率、同步字以及信噪比,注意 RSSI 低于 -125dBm 或 SNR 低于 -10dB 时链路预算已严重不足。
卡在转发 ——网关有记录但服务器设备侧为空。检查网关网络连通性、服务器地址与端口、协议栈运行状态。
卡在服务器校验 ——服务器显示收到 Join Request 却拒绝或忽略。多半是 AppKey、EUI 大小端格式错误,或 DevNonce 重复。特别注意:SX127x 驱动常以小端写入寄存器,而 LoRaWAN 规范要求网络字节序,MCU 侧未做转换会直接导致 MIC 计算失败。
卡在节点收下行 ——服务器已回但节点收不到。检查 RX1 窗口时间与本地时钟精度,LoRaWAN 1.0.4 规定 Rx1Delay 默认为 1s,部分 SDK 硬编码为 500ms,会造成窗口错失。
另外两个高频环境问题也值得留意:一是波特率偏差,部分模块默认 9600 波特率对时钟误差敏感,长线缆场景下建议改到 115200;二是温度漂移,环境温度从 25℃ 升到 45℃ 时,陶瓷天线谐振频率可能漂移数 MHz,恰好接近 CN470 频段的信道间隔,高温场景建议选用带温度补偿的外接天线。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70016116/viewspace-3185856/ ,如需转载,请注明出处,否则将追究法律责任。