目录
一、简介
LoRaWAN网关的实现主要依赖两个源代码:lora_gateway和packet_forwarder。接下来,我们将从分析源代码入手,移植LoRaWAN源码,实现LoRaWAN网关的功能。
1、lora_gateway
这是 Semtech 提供的 LoRa 网关的参考实现,主要包括基带网关驱动程序和一些实用工具。这个软件包主要负责网关硬件的底层控制,如收发数据包、配置射频参数等。通常与 Packet Forwarder 一起使用,以实现完整的网关功能。
基本功能:
- 控制 LoRa 网关板卡上的射频芯片(如 SX1301 或 SX1302)。
- 配置射频参数,如频率、带宽、数据率等。
- 接收来自 LoRa 终端设备的上行数据包。
- 发送下行数据包到 LoRa 终端设备。
2、packet_forwarder
是一个用于 LoRa 网关的参考实现,主要负责将从终端设备接收到的数据包转发到 LoRaWAN 网络服务器,并接收来自网络服务器的下行数据包进行发送。
基本功能:
- 接收 LoRa 网关的上行数据包,并通过网络协议发送到指定的 LoRaWAN 网络服务器(如 ChirpStack )。
- 接收来自网络服务器的下行数据包,并通过网关的射频接口发送到终端设备。
- 支持多通道接收,能够同时处理多个频率和数据率的数据包。
二、目录结构
1、lora_gateway
目录结构如下:
(1)fpga:这个目录通常包含 FPGA 固件代码。如果 LoRa 网关硬件使用了 FPGA 来实现部分功能,这里可能会包含配置文件和代码。
(2)libloragw:这是 LoRa Gateway 的核心库,包含硬件抽象层 (HAL) 的实现。libloragw
库提供了与 LoRa 网关基带芯片 (如 SX1301 或 SX1302) 进行通信的基础函数。
(3)LICENSE:该文件包含项目的许可证信息,说明了源码的使用和分发条件。
(4)Makefile:这是一个构建脚本,用于编译源码。你可以运行 make
命令来编译整个项目。
(5)readme.me:该文件通常包含项目的概述、使用说明和编译指南。阅读此文件可以快速了解如何使用和配置该项目。
(6)reset_lgw.sh:这是一个 Shell 脚本,用于重置 LoRa 网关的基带芯片。这通常在网关初始化或重新启动时使用。
(7)util_lbt_test:这个工具用于测试 Listen Before Talk (LBT) 功能。LBT 是一种频谱访问机制,确保设备在发送数据之前没有其他信号在使用该频谱。
(8)util_pkt_logger:这是一个数据包记录工具,用于记录从网关接收到的所有 LoRa 数据包。它对于调试和分析非常有用。
(9)util_spectral_scan:这个工具用于频谱扫描,可以帮助检测和分析特定频段内的频谱使用情况。
(10)util_spi_stress:这是一个 SPI 压力测试工具,用于测试网关与基带芯片之间的 SPI 通信的可靠性和稳定性。
(11)util_tx_continuous:这个工具用于进行连续传输测试,可以用于发射连续的 LoRa 信号以测试发射性能和覆盖范围。
(12)util_tx_test:这是一个传输测试工具,用于发送测试数据包以检查网关的发送功能。
(13)VERSION:这个文件通常包含项目的版本信息。
备注:
以util_为前缀的工具主要是用于测试和调试的,并不会直接影响 LoRaWAN 网关的正常通信。接下来我的文章主要是整理核心库libloragw。
2、packet_forwarder
目录结构如下:
(1) compile.sh:这是一个编译脚本,用于编译整个项目。你可以运行这个脚本来编译所有的源代码。
(2)LICENSE:该文件包含项目的许可证信息,说明了源码的使用和分发条件。
(3)lora_pkt_fwd:这是一个关键的应用程序,负责将接收到的 LoRa 数据包转发到 LoRaWAN 网络服务器,并处理从服务器接收的下行数据包。这个程序是网关实际运行中的核心部分之一。
(4) Makefile:这是一个构建脚本,用于编译项目的源代码。你可以运行 make
命令来使用 Makefile 进行编译。
(5)PROTOCOL.TXT:该文件通常包含关于 LoRaWAN 协议或项目中特定通信协议的详细描述。
(6)readme.md:该文件通常包含项目的概述、使用说明和编译指南。阅读此文件可以快速了解如何使用和配置该项目。
(7)util_ack:这是一个实用工具,用于测试和调试 ACK (Acknowledgment) 功能,主要是检查网关是否正确发送和接收 ACK 数据包。
(8)util_sink:这个工具用于接收和处理 LoRa 数据包,类似于数据包接收器或记录器。
(9)util_tx_test:这是一个传输测试工具,用于发送测试数据包以检查网关的发送功能。
(10)VERSION:这个文件通常包含项目的版本信息。
备注:
接下来,我主要讲解lora_pkt_fwd,这是一个主要的程序,通常称为 "Packet Forwarder"。它负责将接收到的 LoRa 数据包通过互联网转发到 LoRaWAN 网络服务器(如 ChirpStack),并接收从服务器发送回的下行数据包。