02-区域参数:EU868、US915与CN470的规则账


6.2 区域参数:EU868、US915 与 CN470 的规则账

本节摘要: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 覆盖多个省市频段分配方案,同一代码要支持按运营商/地区加载不同信道表,这是一些设备厂商提供"地区配置工具"的原因。

易错点补充

  • 默认用 EU868 参数交付到中国:CN470 的信道组、默认 DR、功率上限与 EU868 完全不同,不换参数表直接"能用"的设备一定是违规或不可用的;
  • 净荷上限表不全:只给了 SF12 的上限,ADR 升到 SF7 后净荷可以更大,但代码里要有完整表,否则白白限制业务;
  • 区域切换测试不充分:同一固件多区域出货时,每区域都要独立跑一致性测试,只测一个区域就发货是生产事故的温床。

易错点清单

  • 默认信道列表不核对:EU868 的 8 主信道、CN470 的 96 信道分组,任何一处写错都会导致"设备上报但网络侧收不到";
  • 净荷上限按最大档算:净荷上限随 DR 变化,按 SF12 算出的上限在升速后可能超限,规划报文要按"最坏 DR"设计;
  • 占空比口径混淆:EU868 1% 与 US915 的 10% 口径不同,代码里按区域取参,别用一个常数;
  • 忽略下行信道与上行信道的频差:US915 的下行在 923MHz 段,设备必须在入网后正确解析下行频率,否则只上不下。

要点回顾:区域参数表决定频率、速率、功率、占空比与净荷上限,是实现"一套协议栈适配全球"的根基;参数表驱动架构换区域只换数据;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、上下行配对都不同,出货前按区域各跑一轮一致性测试。

本节速查

小结与速查:区域参数决定频率、信道、DR、功率、占空比与净荷上限;EU868 1% 占空比、US915 取模跳频、CN470 无统一占空比但信道分配要核实;参数表驱动架构换区域只换数据;验证三层:静态核对 → 一致性测试 → 实网冒烟;CN470 按地区细分。

本节速查

作者与出处
原作者:灏天文库
来源:平台策划编纂
整理人: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U