LoRa Gateway 源码工程梳理

版权声明:本文为twowinter原创文章,请联系微信公众号twowinter,未经博主允许不得转载。 https://blog.csdn.net/iotisan/article/details/72633960

最近手痒研究LoRaWAN基站,初步了解了LoRaGateway的github工程,做些梳理记录。

本文作者twowinter,转载请注明作者:http://blog.csdn.net/iotisan/

1.核心库:libloragw

这个目录包含了编译一个多通道基站库所需的源码。编译之后就会生成固定链接的libloragw.a。

lora_gateway\libloragw\tst
目录下还有不同子模块的测试程序。

1.1 HAL介绍

这部分也就是LoRa集中器的HAL层(LoRa concentrator Hardware Abstraction Layer),它是个C库,让大家使用少量的C函数就可以对LoRa集中器芯片进行配置硬件,以及收发数据包。

LoRa集中器是数字化的多信道多数据包标准的射频芯片,使用LoRa或者FSK模式进行收发数据。

1.2 HAL的组成

这个库是由6(8)个模块组成:

  • loragw_hal

主模块,包含高等级函数来配置和使用集中器

  • loragw_reg

这个模块用来操作集中器的寄存器

  • loragw_spi

通过SPI接口来操作集中器的寄存器

  • loragw_aux

包含一个主机需要的wait_ms函数,用于指定ms的延时

  • loragw_gps

通过基准时基来同步集中器内部计数,例如例程中的GPS授时。

  • loragw_radio

配置 SX125x 和 SX127x。

  • loragw_fpga (only for SX1301AP2 ref design)

SX1301AP2参考设计才需要,用于操作FPGA的寄存器,以及配置FPGA功能。

  • loragw_lbt (only for SX1301AP2 ref design)

SX1301AP2参考设计才需要,用于配置和使用LBT功能。

1.3 软件编译

1.3.1 软件细节

这个库按照ANSI C99进行编写。loragw_aux模块中的ms精确延时含有POSIX格式函数,嵌入式平台可以用硬件定时器进行重写。

1.3.2 编译选项

library.cfg 中 DEBUG_xxx 如果置为1,则会用 fprintf 输出对应的调试信息。

1.3.3 编译流程

对于交叉编译,需要设置 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 也用来直接选择动态链接库。

1.3.4 导出

如果想在其他系统使用编译后的库,你需要导出这些文件:

  • libloragw/library.cfg -> 根配置文件
  • libloragw/libloragw.a -> 静态库
  • libloragw/readme.md -> license要求
  • libloragw/inc/config.h -> 从 library.cfg 衍生出的C配置标志
  • libloragw/inc/loragw_*.h -> 你需要用到的头文件 (例如. _hal and _gps)

在这个库链接到你的应用之后,只有 license 文件要求在程序文件中拷贝和保留。

1.4 硬件条件

1.4.1 硬件版本

loragw_reg 和 loragw_hal 是针对Semtech硬件编写的特殊版本:

  • Semtech SX1301 芯片
  • Semtech SX1257 or SX1255 收发器

如果硬件版本和库版本不匹配的话,这个库将无法使用。你可以用 test_loragw_reg 来测试软硬件是否匹配。

1.4.2 SPI通信

loragw_spi 的SPI函数适合平台相关的,如果你用别的SPI接口可能需要重写这个函数:

  • SPI master matched to the Linux SPI device driver (provided)
  • SPI over USB using FTDI components (not provided)
  • native SPI using a microcontroller peripheral (not provided)

你可以用 test_loragw_spi 来测试SPI通信。

1.4.3 GPS接收

为了使用库中的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定位。

1.5 使用

1.5.1 设置软件环境

对一个典型应用,你需要这么做:

  • 源码中包含 loragw_hal.h
  • 编译时链接 libloragw.a 静态库文件
  • 由于 loragw_aux 的依赖关系,需要链接 librt 库

如果应用需要直接访问集中器配置寄存器的话(例如做些高级配置),你还需要这样做:

  • 源码中包含 loragw_reg.h

1.5.2 使用软件API

要在你的应用中使用 HAL,需要遵守如下规则:

  • 在射频启动之前需要配置好 radios path 和 IF+modem path
  • 只有在调用了 start 函数之后,配置才会传送给硬件
  • 只有在 radio 使能,同时IF+modem 使能,以及集中器启动后,才能接收数据包。
  • 只有在 radio 使能,以及集中器启动后,才能发送数据包。
  • 改变配置之前,必须停止集中器。

一个对HAL的典型应用流程图如下:

<configure the radios and IF+modems>
<start the LoRa concentrator>
loop {
	<fetch packets that were received by the concentrator>
	<process, store and/or forward received packets>
	<send packets through the concentrator>
}
<stop the concentrator>

/!\ 注意,lgw_send 在LoRa集中器仍然发包时,或者即使在准备开始发包时,是非阻塞立即返回。当有数据包在发送时,将无法收到任何数据。

你的应用需要考虑发包的时长,或者在尝试发包前检查下状态(使用 lgw_status)。

当前一包未完成时立即发一包,会导致前一包无法发送,或者发送部分(会导致接收端出现CRC错误)。

1.5.3 调试模式

为了调试程序,可以激活调试信息后( 在 library.cfg 中设置 DEBUG_HAL=1 ),编译 loragw_hal 函数。这样就会输出很多细节信息,包括stderr的错误细节信息。

2.帮助程序

工程中的这些程序提供了一些示例,应该如何使用HAL库。帮助系统构建者单独测试不同部分。

2.1. util_pkt_logger

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文件,除非用户停止这个应用。

2.2. util_spi_stress

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协调器寄存器文件的连接的稳定性。

2.3. util_tx_test

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.
这个软件用来做发包测试。包里没有协议信息,但可以用来检测基站下行功能,使用另一台基站来做接收。

2.4. util_tx_continuous

This software is used to set LoRa concentrator in Tx continuous mode,
for spectral measurement.
这个软件用来设置LoRa集中器为持续TX模式,用于频谱测试。

2.5. util_spectral_scan

This software is used to scan the spectral band in background, where the LoRa
gateway operates.
这个软件用来扫描基站工作环境的频段。

2.6. util_lbt_test

This software is used to test “Listen-Before-Talk” channels timestamps.
这个软件用来测试“Listen-Before-Talk”的信道时间戳。

3. 帮助脚本

3.1. reset_lgw.sh

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复位集中器芯片。

End


展开阅读全文

没有更多推荐了,返回首页