最近手痒研究LoRaWAN基站,初步了解了LoRaGateway的github工程,做些梳理记录。
本文作者twowinter,转载请注明作者:http://blog.csdn.net/iotisan/
这个目录包含了编译一个多通道基站库所需的源码。编译之后就会生成固定链接的libloragw.a。
lora_gateway\libloragw\tst
目录下还有不同子模块的测试程序。
这部分也就是LoRa集中器的HAL层(LoRa concentrator Hardware Abstraction Layer),它是个C库,让大家使用少量的C函数就可以对LoRa集中器芯片进行配置硬件,以及收发数据包。
LoRa集中器是数字化的多信道多数据包标准的射频芯片,使用LoRa或者FSK模式进行收发数据。
这个库是由6(8)个模块组成:
主模块,包含高等级函数来配置和使用集中器
这个模块用来操作集中器的寄存器
通过SPI接口来操作集中器的寄存器
包含一个主机需要的wait_ms函数,用于指定ms的延时
通过基准时基来同步集中器内部计数,例如例程中的GPS授时。
配置 SX125x 和 SX127x。
SX1301AP2参考设计才需要,用于操作FPGA的寄存器,以及配置FPGA功能。
SX1301AP2参考设计才需要,用于配置和使用LBT功能。
这个库按照ANSI C99进行编写。loragw_aux模块中的ms精确延时含有POSIX格式函数,嵌入式平台可以用硬件定时器进行重写。
library.cfg 中 DEBUG_xxx 如果置为1,则会用 fprintf 输出对应的调试信息。
对于交叉编译,需要设置 Makefile 中的 ARCH 和 CROSS_COMPILE 变量,或者在 shell 环境中,使用正确的工具链名字和路径。例如:
export PATH=/home/foo/rpi-toolchain/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin:$PATH export ARCH=arm export CROSS_COMPILE=arm-linux-gnueabihf-
libloragw目录下的Makefile会解析 library.cfg 文件,产生一个config.h的C头文件,包含 #define 选项。那些选项会使能或禁用loragw_xxx.h 文件和 *.c 原文件中的代码。
library.cfg 也用来直接选择动态链接库。
如果想在其他系统使用编译后的库,你需要导出这些文件:
在这个库链接到你的应用之后,只有 license 文件要求在程序文件中拷贝和保留。
loragw_reg 和 loragw_hal 是针对Semtech硬件编写的特殊版本:
如果硬件版本和库版本不匹配的话,这个库将无法使用。你可以用 test_loragw_reg 来测试软硬件是否匹配。
loragw_spi 的SPI函数适合平台相关的,如果你用别的SPI接口可能需要重写这个函数:
你可以用 test_loragw_spi 来测试SPI通信。
为了使用库中的GPS模块,主机必须要通过串口连接GPS接收器,串口连接必须以“tty”设备出现在 /dev/ 目录,启用这个程序的用户必须用读写这个设备的权限。使用 chmod a+rw 来允许所有用户能操作指定的tty设备,或者使用sudo来运行你的程序(例如. sudo ./test_loragw_gps)。
当前版本,库只从串口读取数据,在GPS接收器上电后会收到他们发出NMEA帧 以及 u-blox 模块私有的 UBX 消息。
GPS接收器必须在发出PPS脉冲后发出UBX消息,让内部集中器的时间戳可以用GPS时基校准。如果GPS接收器发出了GGA NMEA语句,gateway则可以进行3D定位。
对一个典型应用,你需要这么做:
如果应用需要直接访问集中器配置寄存器的话(例如做些高级配置),你还需要这样做:
要在你的应用中使用 HAL,需要遵守如下规则:
一个对HAL的典型应用流程图如下:
loop {
}
/!\ 注意,lgw_send 在LoRa集中器仍然发包时,或者即使在准备开始发包时,是非阻塞立即返回。当有数据包在发送时,将无法收到任何数据。
你的应用需要考虑发包的时长,或者在尝试发包前检查下状态(使用 lgw_status)。
当前一包未完成时立即发一包,会导致前一包无法发送,或者发送部分(会导致接收端出现CRC错误)。
为了调试程序,可以激活调试信息后( 在 library.cfg 中设置 DEBUG_HAL=1 ),编译 loragw_hal 函数。这样就会输出很多细节信息,包括stderr的错误细节信息。
工程中的这些程序提供了一些示例,应该如何使用HAL库。帮助系统构建者单独测试不同部分。
This software is used to set up a LoRa concentrator using a JSON configuration
file and then record all the packets received in a log file, indefinitely, until
the user stops the application.
这个软件用来让LoRa集中器使用JSON配置文件,以及记录所有的包于一个log文件,除非用户停止这个应用。
This software is used to check the reliability of the link between the host
platform (on which the program is run) and the LoRa concentrator register file
that is the interface through which all interaction with the LoRa concentrator
happens.
这个软件用来检测主CPU与LoRa协调器寄存器文件的连接的稳定性。
This software is used to send test packets with a LoRa concentrator. The packets
contain little information, on no protocol (ie. MAC address) information but
can be used to assess the functionality of a gateway downlink using other
gateways as receivers.
这个软件用来做发包测试。包里没有协议信息,但可以用来检测基站下行功能,使用另一台基站来做接收。
This software is used to set LoRa concentrator in Tx continuous mode,
for spectral measurement.
这个软件用来设置LoRa集中器为持续TX模式,用于频谱测试。
This software is used to scan the spectral band in background, where the LoRa
gateway operates.
这个软件用来扫描基站工作环境的频段。
This software is used to test “Listen-Before-Talk” channels timestamps.
这个软件用来测试“Listen-Before-Talk”的信道时间戳。
This script must be launched on IoT Start Kit platform to reset concentrator
chip through GPIO, before starting any application using the concentrator.
这个脚本仅在 IoT Start Kit 平台上运行,用于在启动任何应用前,通过GPIO复位集中器芯片。