本节摘要:LoRaWAN 的区域参数决定频率、信道、速率档位、占空比与发射功率,是"一套协议栈适配全球"的关键。本节对比 EU868、US915、CN470 三张参数表,并给出区域参数驱动的实现架构。位置:6.1 讲了 ADR 机制,本节给机制配上区域化的规则。
| 项目 | EU868 | US915 | CN470 |
|---|---|---|---|
| 频段 | 863–870MHz | 902–928MHz | 470–510MHz |
| 上行信道 | 8(868.1–868.5MHz 主) | 64 个 + 8 个标准 | 96 个 |
| 下行信道 | 与上行复用 | 8 个(923.3–927.5MHz) | 48 个 |
| 默认上行 DR | DR5(SF7/125k) | DR0(SF10/125k,取模跳频) | DR0/DR2 随配置 |
| 发射功率上限 | 14dBm | 按信道 20–30dBm(US902) | 19–22dBm(按地区) |
| 占空比 | 1% | 无统一 1% 限制(总 10% 口径) | 无统一限制 |
| 最大净荷(SF12) | 51B | 11B(SF10 跳频) | 59B(SF12) |
注意两处反直觉的点:US915 的默认速率不是最快而是 SF10——因为其上行采用"取模跳频"(每帧换信道),且净荷上限受跳频规则约束,SF10 是合规且稳妥的默认;CN470 没有统一占空比限制,但信道频率使用要符合当地无线电管理规定,且区域版本差异大(不同省市频段分配不同),部署前必须核实当地备案要求。
协议栈绝不能把区域参数写死,正确姿势是"参数表 + 区域选择":
/* 伪代码:区域参数表结构(每区域一个实例) */ typedef struct { uint32_t uplink_freqs[16]; /* 上行信道频率列表 */ uint32_t downlink_freqs[16]; /* 下行信道频率列表 */ int8_t tx_power_max; /* 发射功率上限(dBm) */ uint8_t dr_default; /* 默认数据速率 */ uint16_t duty_cycle_permille;/* 占空比(千分比,0 表示无限制) */ uint8_t payload_max[6]; /* 各 DR 的净荷上限 */ } region_params_t; /* 编译期选择或运行时从 Flash 加载,统一接口供上层查询 */ const region_params_t *region_get(region_id_t id);
上层(ADR、占空比、信道选择、净荷规划)全部通过接口查询参数表,换区域只换数据不换代码。信道列表的合法性校验也应由参数表提供(当前 DR 是否支持该信道、频率是否在允许范围),设备侧的 LinkADRReq 校验直接调这张表。
区域参数写错是"上线后设备大批不工作"的头号原因,验证按三层来:
第一层,静态核对:频率、信道数、默认 DR、功率上限逐项对照 LoRa Alliance 的区域参数规范文档(RP002 及各区域附录)。第二层,协议一致性测试:用官方或社区的一致性测试工具(如 LoRaWAN Certification Test Tool)跑一遍入网、收发、命令交互,参数错误会直接暴露。第三层,实网冒烟:在目标区域放一台设备做全流程验证——入网、上行、下行、ADR 各跑一轮,并核对网关日志里的实际频率与功率。
| 区域 | 最常写错的参数 | 后果 |
|---|---|---|
| EU868 | 下行信道与上行复用配置 | 下行频率错,设备收不到 |
| US915 | 跳频模式下的净荷上限 | 超限帧被拒 |
| CN470 | 信道分组与上下行配对 | 上行收得到、下行全落空 |
代码层面把区域参数做成可插拔模块:region_eu868.c、region_us915.c、region_cn470.c 各自实现统一接口(信道查询、DR 校验、净荷上限、占空比),编译期或运行期选择。好处三条:新增区域不改核心逻辑、区域差异的 bug 隔离在单文件、测试可以按区域分别跑。尤其注意 CN470 的细分:470–510MHz 覆盖多个省市频段分配方案,同一代码要支持按运营商/地区加载不同信道表,这是一些设备厂商提供"地区配置工具"的原因。
要点回顾:区域参数表决定频率、速率、功率、占空比与净荷上限,是实现"一套协议栈适配全球"的根基;参数表驱动架构换区域只换数据;CN470 的合规要求要单独核实。下一节看 Class B/C 与多播在实现层的进阶细节。
一套固件多区域出货,架构上要解决三件事:参数表多套(每个区域一个参数表实例,编译期或运行期选择)、区域切换的校验(切换时对频率、功率、净荷上限做一致性校验,防止非法组合)、区域标识的持久化(设备出厂区域标识烧录在 Flash,升级不丢)。
区域选择流程(生产烧录时): 1. 烧录区域标识(如 0x01=EU868, 0x02=US915, 0x03=CN470) 2. 首次启动按标识加载参数表 3. 运行中禁止热切换(防误操作产生非法发射) 4. 升级包内包含全部区域参数,但激活的区域由标识决定
常见事故:同一固件发往不同国家,产线只烧了一种区域标识,导致设备在目标国家以错误频率发射——轻则无法入网,重则违反当地无线电管理。区域标识的产线校验(回读比对)要写进产测流程。
LoRaWAN 规范本身在演进(1.0.x → 1.0.4 → 1.1),区域参数也随之调整。工程上要记录"固件支持的规范版本 × 区域参数版本",与网络服务器的版本矩阵做兼容性核对——版本不匹配的表现往往是"单测全过、实网时好时坏"。升级协议栈或 NS 时,先看版本兼容矩阵,再决定升级范围。
小结与速查:区域参数决定频率、信道、DR、功率、占空比与净荷上限;EU868 1% 占空比、US915 取模跳频、CN470 无统一占空比但信道分配要核实;参数表驱动架构换区域只换数据;验证三层:静态核对 → 一致性测试 → 实网冒烟;CN470 按地区细分。
