LoRaWAN® 网关模块 WM1302

LoRaWAN® 是 LoRa Alliance® 的授权商标。 LoRa® 标识是 Semtech Corporation 或其子公司的商标。
WM1302 模块提供两种不同的接口版本。SPI 版本是目前的主流选择。如果您偏好 USB 版本,硬件修改需要对原始官方固件进行某些调整才能使模块正常工作。更多详情请参考 FAQ 部分。
WM1302 模块是新一代 mini-PCIe 外形规格的 LoRaWAN® 网关模块。基于 Semtech® SX1302 基带 LoRaWAN® 芯片,WM1302 为网关产品释放了更大的长距离无线传输潜力。与之前的 SX1301 和 SX1308 LoRa® 芯片相比,它具有更高的灵敏度、更低的功耗和更低的工作温度。
WM1302 LoRaWAN® 网关模块在 US915 和 EU868 频段上都有 SPI 和 USB 版本,让您可以选择广泛的 LoRaWAN® 频率计划选项,包括 EU868、US915、AS923、AS920、AU915、KR920 和 IN865。
WM1302 模块已通过 CE、FCC 和 Telec 认证,有助于简化 LoRaWAN® 网关设备的开发和认证过程。
WM1302 专为 M2M 和 IoT 应用而设计,可广泛应用于支持 LPWAN 网关的场景。它将是您显著降低开发 LoRa® 网关设备(包括 LoRaWAN® 网关、热点等)的技术难度和时间消耗的完美选择。
特性
- 采用 Semtech® SX1302 基带 LoRa® 芯片,极低功耗和高性能。
- 标准 52 针金手指的 Mini-PCIe 外形规格,易于与各种网关设备集成。
- 超低工作温度,无需额外散热,减小 LoRaWAN® 网关的尺寸。
- 高灵敏度,配合 SX1250 TX/RX 前端可达 -139 dBm @SF12;TX 功率在 @3.3V 时可达 26 dBm。
- 通过 CE、FCC 和 TELEC 认证。简化最终产品认证过程。
硬件概述
原理图

引脚图


Raspberry Pi 引脚映射
| 40 Pin No.(BOARD#) | Raspberry Pi GPIO(BCM#) | WM1302 Pi HAT Pinout |
|---|---|---|
| 1 | 3.3V | NC |
| 2 | 5V | 5V |
| 3 | GPIO 2 | I2C_SDA |
| 4 | 5V | 5V |
| 5 | GPIO 3 | I2C_SCL |
| 6 | GND | GND |
| 7 | GPIO 4 | NC |
| 8 | GPIO 14 | GPS_RXD |
| 9 | GND | GND |
| 10 | GPIO 15 | GPS_TXD |
| 11 | GPIO 17 | SX1302_RESET SPI 版本:高电平有效 USB 版本:低电平有效 |
| 12 | GPIO 18 | SX1262_BUSY |
| 13 | GPIO 27 | NC |
| 14 | GND | GND |
| 15 | GPIO 22 | NC |
| 16 | GPIO 23 | SX1262_DIO1 |
| 17 | 3.3V | NC |
| 18 | GPIO 24 | SX1262_DIO2 |
| 19 | GPIO 10 | SPI_MOSI |
| 20 | GND | GND |
| 21 | GPIO 9 | SPI_MISO |
| 22 | GPIO 25 | GPS_RST |
| 23 | GPIO 11 | SPI_SCK |
| 24 | GPIO 8 | SX1302_CS |
| 25 | GND | GND |
| 26 | GPIO 7 | NC |
| 27 | GPIO 0 | I2C_SDA(EEPROM) |
| 28 | GPIO 1 | I2C_SCL(EEPROM) |
| 29 | GPIO 5 | SX1262_RST |
| 30 | GND | GND |
| 31 | GPIO 6 | SX1262_CS |
| 32 | GPIO 12 | GPS_WAKE_UP |
| 33 | GPIO 13 | NC |
| 34 | GND | GND |
| 35 | GPIO 19 | NC |
| 36 | GPIO 16 | NC |
| 37 | GPIO 26 | NC |
| 38 | GPIO 20 | NC |
| 39 | GND | GND |
| 40 | GPIO 21 | NC |
规格参数
| 区域 | EU868 | US915 |
|---|---|---|
| 频率 | 863-870MHz | 902-928MHz |
| 灵敏度 | -125dBm @125K/SF7 -139dBm @125K/SF12 | -125dBm @125K/SF7 -139dBm @125K/SF12 |
| TX 功率 | 26 dBm(3.3V 电源供电) | 25 dBm(3.3V 电源供电) |
| LED | 电源:绿色 配置:红色 TX:绿色 RX:蓝色 | |
| 外形规格 | Mini PCIe,52 针金手指 | |
| 功耗(SPI 版本) | 待机:7.5 mA TX 最大功率:415 mA RX:40 mA | |
| 功耗(USB 版本) | 待机:20 mA TX 最大功率:425 mA RX:53 mA | |
| LBT(先听后说) | 支持 | |
| 天线连接器 | U.FL | |
| 工作温度 | -40°C 至 85°C | |
| 尺寸 | 30 mm(宽)× 50.95 mm(长) | |
| 认证 | CE | |
应用
-
LPWAN 网关设备开发
-
任何长距离无线通信应用开发
-
LoRa® 和 LoRaWAN® 应用学习和研究
尺寸

入门指南
SPI 版本和 USB 版本的区别
对于 WM1302 LoRaWAN® 网关模块 SPI 版本,Semtech SX1302 和 SX126x 芯片通过相同的 SPI 总线连接到 Raspberry Pi,使用不同的片选(CS)引脚。
对于 WM1302 LoRaWAN® 网关模块 USB 版本,Semtech SX1302 和 SX126x 芯片连接到 STM32L4 MCU,这个出厂预编程的 MCU 将作为 USB 设备工作,成为 Raspberry Pi 和 SX1302/SX126x 之间的桥梁。
WM1302 快速入门
所需硬件
-
WM1302 LoRaWAN® 网关模块
-
带有 40 针 GPIO 接头的 Raspberry Pi 开发板(例如 Raspberry Pi 4B 或 Raspberry 3B+)
-
适用于 Raspberry Pi 的 WM1302 Pi Hat
-
Raspberry Pi 电源适配器
-
一个 LoRa® 天线
-
一张 8G 或更大的 SD 卡和读卡器
-
如果使用 WM1302 LoRaWAN® 网关模块 USB 版本,需要一根 Type C USB 线
所需软件
-
最新的 Raspberry Pi OS 镜像:推荐使用 Raspberry Pi OS Lite
-
Balena Etcher:用于将 Raspberry Pi OS 镜像刷写到 SD 卡
-
putty:在 Windows 上通过 SSH 连接到 Raspberry Pi
- WM1302 SPI 版本
- WM1302 USB 版本
步骤 1. 安装 WM1302 Raspberry Pi Hat 并安装 WM1302 模块
首先关闭 Raspberry Pi 电源,按照下图将 WM1302 模块插入 Pi Hat 并用螺丝固定。

步骤 2. 启用 Raspbian I2C 和 SPI 接口
WM1302 模块通过 SPI 和 I2C 接口与 Raspberry Pi 通信。但这两个接口在 Raspbian 中默认未启用,因此开发者需要在使用 WM1302 之前启用它们。这里,我们介绍一种命令行方式来启用 SPI 和 I2C 接口。
首先,通过 SSH 登录 Raspberry Pi 或使用显示器(不要使用串行控制台,因为 Pi Hat 上的 GPS 模块占用了 Pi 的硬件 UART 引脚),然后在命令行中输入 sudo raspi-config 打开 Raspberry Pi 软件配置工具:
sudo raspi-config

-
选择
Interface Options -
选择
SPI,然后选择Yes启用它 -
选择
I2C,然后选择Yes启用它 -
选择
Serial Port,然后对"Would you like a login shell..."选择No,对"Would you like the serial port hardware..."选择Yes -
完成后,请重启 Raspberry Pi 以确保这些设置生效。
步骤 3. 获取并编译 SX1302 源代码
现在让我们安装 git 并从 github 下载 sx1302_hal(SX1302 LoRa 网关的库和程序):
sudo apt update
sudo apt install -y git
cd ~
git clone https://github.com/Lora-net/sx1302_hal
移动到 sx1302_hal 文件夹并编译所有内容:
cd ~/sx1302_hal
make
步骤 4. 运行 Semtech SX1302 数据包转发器
将 reset_lgw.sh 复制到 packet_forwarder 文件夹,并使用文本编辑器 nano 修改 reset_lgw.sh 脚本中 SX1302 和 SX1261 的 reset pin:
cp tools/reset_lgw.sh packet_forwarder/
cd packet_forwarder
nano tools/reset_lgw.sh
您将看到默认的 reset pin 如下:
# GPIO mapping has to be adapted with HW
#
SX1302_RESET_PIN=23 # SX1302 reset
SX1302_POWER_EN_PIN=18 # SX1302 power enable
SX1261_RESET_PIN=22 # SX1261 reset (LBT / Spectral Scan)
AD5338R_RESET_PIN=13 # AD5338R reset (full-duplex CN490 reference design)
这里我们使用 cat /sys/kernel/debug/gpio 命令,这是内核 debugfs 文件系统提供的调试接口。它主要用于监控 Raspberry Pi 上所有 GPIO 引脚的实时状态。
gpiochip0 是我们真正感兴趣的:WM1302 模块通过 Pi HAT 的 40 针接头连接到 Raspberry Pi,所有这些都由这个控制器管理。
pi@raspberrypi:~/sx1302_hal/packet_forwarder $ cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 571-624, parent: platform/1f000d0000.gpio, pinctrl-rp1:
gpio-571 (ID_SDA )
gpio-572 (ID_SCL )
gpio-573 (GPIO2 )
gpio-574 (GPIO3 )
gpio-575 (GPIO4 )
gpio-576 (GPIO5 )
gpio-577 (GPIO6 )
gpio-578 (GPIO7 |spi0 CS1 ) out hi ACTIVE LOW
gpio-579 (GPIO8 |spi0 CS0 ) out hi ACTIVE LOW
gpio-580 (GPIO9 )
gpio-581 (GPIO10 )
gpio-582 (GPIO11 )
gpio-583 (GPIO12 )
gpio-584 (GPIO13 )
gpio-585 (GPIO14 )
gpio-586 (GPIO15 )
gpio-587 (GPIO16 )
gpio-588 (GPIO17 )
gpio-589 (GPIO18 )
gpio-590 (GPIO19 )
gpio-591 (GPIO20 )
gpio-592 (GPIO21 )
gpio-593 (GPIO22 )
gpio-594 (GPIO23 )
gpio-595 (GPIO24 )
gpio-596 (GPIO25 )
gpio-597 (GPIO26 )
gpio-598 (GPIO27 )
gpio-599 (PCIE_RP1_WAKE )
gpio-600 (FAN_TACH )
gpio-601 (HOST_SDA )
gpio-602 (HOST_SCL )
gpio-603 (ETH_RST_N |phy-reset ) out hi ACTIVE LOW
gpio-604 (- )
gpio-605 (CD0_IO0_MICCLK |cam0_reg ) out lo
gpio-606 (CD0_IO0_MICDAT0 )
gpio-607 (RP1_PCIE_CLKREQ_N )
gpio-608 (- )
gpio-609 (CD0_SDA )
gpio-610 (CD0_SCL )
gpio-611 (CD1_SDA )
gpio-612 (CD1_SCL )
gpio-613 (USB_VBUS_EN )
gpio-614 (USB_OC_N )
gpio-615 (RP1_STAT_LED |PWR ) out hi ACTIVE LOW
gpio-616 (FAN_PWM )
gpio-617 (CD1_IO0_MICCLK |cam1_reg ) out lo
gpio-618 (2712_WAKE )
gpio-619 (CD1_IO1_MICDAT1 )
gpio-620 (EN_MAX_USB_CUR )
gpio-621 (- )
gpio-622 (- )
gpio-623 (- )
gpio-624 (- )
如果您的系统没有自动挂载 debugfs,您必须首先手动挂载它:
sudo mount -t debugfs none /sys/kernel/debug
根据这些信息,我们可以找出 GPIO 引脚 gpio-588, gpio-589, gpio-576 与其对应的物理引脚索引 (GPIO17), (GPIO18), (GPIO5) 之间的关系。
请参考 Raspberry Pi 引脚映射 表获取完整的 GPIO 引脚映射。
根据我们获得的 GPIO 信息修改 SX1302_RESET_PIN、SX1302_POWER_EN_PIN 和 SX1261_RESET_PIN,如下所示:
# GPIO mapping has to be adapted with HW
#
SX1302_RESET_PIN=588 # SX1302 reset
SX1302_POWER_EN_PIN=589 # SX1302 power enable
SX1261_RESET_PIN=576 # SX1261 reset (LBT / Spectral Scan)
AD5338R_RESET_PIN=13 # AD5338R reset (full-duplex CN490 reference design)
按 CTRL + x,然后按 y 和 Enter 保存这些更改并关闭文本编辑器。
您也可以参考下面的完整脚本:reset_lgw.sh
#!/bin/sh
# This script is intended to be used on SX1302 CoreCell platform, it performs
# the following actions:
# - export/unpexort GPIO23 and GPIO18 used to reset the SX1302 chip and to enable the LDOs
# - export/unexport GPIO22 used to reset the optional SX1261 radio used for LBT/Spectral Scan
#
# Usage examples:
# ./reset_lgw.sh stop
# ./reset_lgw.sh start
# GPIO mapping has to be adapted with HW
#
SX1302_RESET_PIN=588 # SX1302 reset
SX1302_POWER_EN_PIN=589 # SX1302 power enable
SX1261_RESET_PIN=576 # SX1261 reset (LBT / Spectral Scan)
AD5338R_RESET_PIN=13 # AD5338R reset (full-duplex CN490 reference design)
WAIT_GPIO() {
sleep 0.1
}
init() {
# setup GPIOs
echo "$SX1302_RESET_PIN" > /sys/class/gpio/export; WAIT_GPIO
echo "$SX1261_RESET_PIN" > /sys/class/gpio/export; WAIT_GPIO
echo "$SX1302_POWER_EN_PIN" > /sys/class/gpio/export; WAIT_GPIO
echo "$AD5338R_RESET_PIN" > /sys/class/gpio/export; WAIT_GPIO
# set GPIOs as output
echo "out" > /sys/class/gpio/gpio$SX1302_RESET_PIN/direction; WAIT_GPIO
echo "out" > /sys/class/gpio/gpio$SX1261_RESET_PIN/direction; WAIT_GPIO
echo "out" > /sys/class/gpio/gpio$SX1302_POWER_EN_PIN/direction; WAIT_GPIO
echo "out" > /sys/class/gpio/gpio$AD5338R_RESET_PIN/direction; WAIT_GPIO
}
reset() {
echo "CoreCell reset through GPIO$SX1302_RESET_PIN..."
echo "SX1261 reset through GPIO$SX1302_RESET_PIN..."
echo "CoreCell power enable through GPIO$SX1302_POWER_EN_PIN..."
echo "CoreCell ADC reset through GPIO$AD5338R_RESET_PIN..."
# write output for SX1302 CoreCell power_enable and reset
echo "1" > /sys/class/gpio/gpio$SX1302_POWER_EN_PIN/value; WAIT_GPIO
echo "1" > /sys/class/gpio/gpio$SX1302_RESET_PIN/value; WAIT_GPIO
echo "0" > /sys/class/gpio/gpio$SX1302_RESET_PIN/value; WAIT_GPIO
echo "0" > /sys/class/gpio/gpio$SX1261_RESET_PIN/value; WAIT_GPIO
echo "1" > /sys/class/gpio/gpio$SX1261_RESET_PIN/value; WAIT_GPIO
echo "0" > /sys/class/gpio/gpio$AD5338R_RESET_PIN/value; WAIT_GPIO
echo "1" > /sys/class/gpio/gpio$AD5338R_RESET_PIN/value; WAIT_GPIO
}
term() {
# cleanup all GPIOs
if [ -d /sys/class/gpio/gpio$SX1302_RESET_PIN ]
then
echo "$SX1302_RESET_PIN" > /sys/class/gpio/unexport; WAIT_GPIO
fi
if [ -d /sys/class/gpio/gpio$SX1261_RESET_PIN ]
then
echo "$SX1261_RESET_PIN" > /sys/class/gpio/unexport; WAIT_GPIO
fi
if [ -d /sys/class/gpio/gpio$SX1302_POWER_EN_PIN ]
then
echo "$SX1302_POWER_EN_PIN" > /sys/class/gpio/unexport; WAIT_GPIO
fi
if [ -d /sys/class/gpio/gpio$AD5338R_RESET_PIN ]
then
echo "$AD5338R_RESET_PIN" > /sys/class/gpio/unexport; WAIT_GPIO
fi
}
case "$1" in
start)
term # just in case
init
reset
;;
stop)
reset
term
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
exit 0
根据您使用的模块,在相应的 global_conf.json.sx1250.xxxxx 中选择您首选的 LoRaWAN 网络服务器 server_address 和网关 EUI gateway_ID,并将 up/down port 修改为 1700。然后运行以下代码启动集中器:
cd ~/sx1302_hal/packet_forwarder
# Please select one of the following comands based on your module
# for WM1302 LoRaWAN Gateway Module (SPI) - EU868
./lora_pkt_fwd -c global_conf.json.sx1250.EU868
# for WM1302 LoRaWAN Gateway Module (SPI) - US915
./lora_pkt_fwd -c global_conf.json.sx1250.US915
步骤 1. 安装 WM1302 Raspberry Pi Hat 并安装 WM1302 模块
首先关闭 Raspberry Pi 电源,按照下图将 WM1302 模块插入 Pi Hat 并用螺丝固定。使用 Type C USB 线将其 Type C 端口连接到 Raspberry Pi 的一个 USB 端口。

步骤 2. 启用 Raspbian I2C 和 SPI 接口
WM1302 模块通过 SPI 和 I2C 与 Raspberry Pi 通信。但这两个接口在 Raspbian 中默认未启用,因此开发者需要在使用 WM1302 之前启用它们。这里,我们介绍一种命令行方式来启用 SPI 和 I2C 接口。
首先,通过 SSH 或使用显示器登录 Raspberry Pi(不要使用串行控制台,因为 Pi Hat 上的 GPS 模块占用了 Pi 的硬件 UART 引脚),然后在命令行中输入 sudo raspi-config 打开 Raspberry Pi 软件配置工具:
sudo raspi-config

-
选择
Interface Options -
选择
SPI,然后选择Yes启用它 -
选择
I2C,然后选择Yes启用它 -
选择
Serial Port,然后对 "Would you like a login shell..." 选择No,对 "Would you like the serial port hardware..." 选择Yes -
完成后,请重启 Raspberry Pi 以确保这些设置生效。
步骤 3. 获取并编译 SX1302 源代码
现在让我们安装 git 并从 github 下载 sx1302_hal(SX1302 LoRa 网关的库和程序):
sudo apt update
sudo apt install -y git
cd ~
git clone https://github.com/Lora-net/sx1302_hal
移动到 sx1302_hal 文件夹并编译所有内容:
cd ~/sx1302_hal
make
步骤 4. 运行 Semtech SX1302 数据包转发器
要获取特定的 USB 端口,请按照以下步骤操作:
lsusb
在我的情况下,我们 WM1302 模块的 Product ID 是 8047
pi@raspberrypi:~/sx1302_hal/packet_forwarder $ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 003: ID 2886:8047 Seeed Technology Co., Ltd. WM1302 USB Port
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
然后获取 Product ID 为 8047 的 USB 设备。
sudo dmesg | grep 8047
sudo modprobe cdc_acm
在我的情况下,USB 端口号是 1-1.3。
pi@raspberrypi:~/sx1302_hal/packet_forwarder $ sudo dmesg | grep 8047
[ 215.459617] usb 1-1.3: New USB device found, idVendor=2886, idProduct=8047, bcdDevice= 2.00
现在我们可以使用以下命令获取设备端口:
sudo dmesg | grep 1-1.3
pi@raspberrypi:~/sx1302_hal/packet_forwarder $ sudo dmesg | grep 1-1.3
[ 215.364299] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd
[ 215.459617] usb 1-1.3: New USB device found, idVendor=2886, idProduct=8047, bcdDevice= 2.00
[ 215.459643] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 215.459657] usb 1-1.3: Product: WM1302 USB Port
[ 215.459669] usb 1-1.3: Manufacturer: SEEED
[ 215.459680] usb 1-1.3: SerialNumber: 4E100336FF7F
[ 215.543301] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device
所以在我的情况下,USB 设备是 ttyACM0。global_conf.json.sx1250.xxxxx.USB 中的默认 USB 设备设置是 ttyACM0,所以我们在这里不需要做任何事情。
如果您的设备使用其他 USB 端口,我们可以使用 sed 命令 sed -i 's/search_string/replacement_string/g' filename 来修改相应区域的 global_conf.json.sx1250.xxxxx.USB 配置文件。
根据您使用的模块,在相应的 global_conf.json.sx1250.xxxxx 中选择您首选的 LoRaWAN 网络服务器 server_address 和网关 EUI gateway_ID,并将 up/down port 修改为 1700。然后运行以下代码启动集中器:
cd ~/sx1302_hal/packet_forwarder
# Please select one of the following comands based on your module
# for WM1302 LoRaWAN Gateway Module (USB) - EU868
./lora_pkt_fwd -c global_conf.json.sx1250.EU868.USB
# for WM1302 LoRaWAN Gateway Module (USB) - US915
./lora_pkt_fwd -c global_conf.json.sx1250.US915.USB
现在,数据包转发器能够正确运行。要成功将数据转发到我们的 LoRaWAN 网络服务器(例如 TTN 或 ChripStack),我们仍需要在服务器端进行一些配置。
为此,我们需要首先将刚刚构建的 Raspberry Pi 网关注册到我们的 LoRa 网络服务器。以 TTN 为例,登录 TTN 控制台,点击左侧面板上的 Gateways 按钮,然后点击 Register gateway。填写 Gateway EUI、Gateway Server address 和 Frequency plan,其他选项保持默认设置。
-
Gateway EUI: 您网关的 64 位唯一标识符。
-
Gateway Server address: 部署网络服务器的集群的 URL(例如
eu1.cloud.thethings.network)。 -
Frequency plan: 根据您的地区配置相应的频率计划。欧洲使用
Europe 863-870 MHz (SF9 for RX2-recommended),美国使用United States 902-928 MHz, FSB 2。

成功注册网关后,按 CTRL + c 停止 lora_pkt_fwd,然后编辑并检查 global_conf.json.sx1250.xxxx 配置文件,确保 "gateway_ID" 和 "server_address" 条目与 LNS 中的设置完全匹配。
...
"gateway_conf": {
"gateway_ID": "AA555A0000000000",
/* change with default server address/ports */
"server_address": "eu1.cloud.thethings.network",
"serv_port_up": 1700,
"serv_port_down": 1700,
...
使用命令 ./lora_pkt_fwd -c global_conf.json.sx1250.xxxxx 重启 lora_pkt_fwd,您应该能够发现您的 Raspberry Pi 网关已连接到 TTN。
常见问题
为什么即使所有设置都正确,我的设备也无法加入网络服务器?
我们观察到某些模块(WM1302-US915 USB 版本)可能由于硬件差异而无法正确传输下行数据包。要解决此问题,请将宏 TX_JIT_DELAY(您可以在 /sx1302_hal/packet_forwarder/src/jitqueue.c 中找到此宏)的值从 40000 修改为 120000,并重新编译 sx1302_hal。
资源
认证
技术支持与产品讨论
请将任何技术问题提交到我们的论坛。
感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。
