ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

LoRaWAN集成方案解析:PSoC 6与SX126x如何加速智能门锁开发

LoRaWAN集成方案解析:PSoC 6与SX126x如何加速智能门锁开发 做物联网硬件开发这几年有一个问题几乎每个产品定义会上都会撞上无线连接到底选什么WiFi 功耗太大蓝牙距离不够NB-IoT 要插卡还要算资费。剩下的选项里LoRaWAN 在低功耗和覆盖距离上确实能打但真正让它难受的是系统集成——LoRa 射频芯片和主控制器是两家的东西中间要自己连线、自己调协议栈、自己做低功耗唤醒逻辑。Cypress 和 Semtech 这次联手推出的集成 LoRaWAN 方案恰恰是在解决这个从模块化拼装到系统级整合的问题。这篇文章我结合两者合作的公开资料聊聊这个方案解决了什么、怎么用以及基于 LoRaWAN 设计智能门锁这类产品时真正要关注哪些事。1. 这次合作不是“联名”LoRaWAN 集成的真实价值先把这个合作摆到正确的坐标里。Cypress现在属于英飞凌旗下但 PSoC 系列产品线依然活跃做控制器Semtech 是 LoRa 技术的源头这两家坐下来握手绝不只是发布会上的一个 PR 动作。对做产品的工程师来说这次合作意味着过去那种“MCU 一颗、LoRa radio 一颗、两边自己粘”的开发方式终于能有一个官方背书的打包选项。1.1 以前做 LoRaWAN 设备到底麻烦在哪我见过很多团队做 LoRaWAN 终端硬件结构大同小异一颗低功耗 MCU比如 STM32L 或者 nRF52再外挂一颗 SX1261/SX1262 收发器或者一个 LoRaWAN 模组。模组还好一点出厂前厂商已经把协议栈烧进去了你通过 AT 指令操作但直接贴 radio 芯片的方案就得自己搞定所有事MCU 和 SX126x 之间的 SPI 通信要自己写驱动LoRaWAN 协议栈要自己移植常见的开源选择是 Semtech 的 LoRaMac-node但真正把它在自家 MCU 上跑起来中间要处理定时器、中断、低功耗唤醒的配合射频前端匹配网络要自己调SMA 座、天线开关、balun 的匹配参数设计不好灵敏度会掉好几个 dB低频次上报还好一旦涉及 Class C 连续接收MCU 和 radio 的供电协同就是个麻烦。这些问题单个拿出来都不致命但叠加在一起一个 LoRaWAN 终端从画板到真正入网稳定运行一个熟练的工程师也要花掉两到三周。而 Cypress 和 Semtech 这次做的集成就是把前面这一大堆“脏活累活”提前打包。1.2 两家各拿出了什么东西从公开信息可以看到这套集成方案的核心是把 Semtech 的 LoRaWAN 协议栈深度适配进 Cypress 的 ModusToolbox 开发环境。也就是说你不再需要自己把 LoRaMac-node 从 GitHub 拉下来之后对着 undefined reference 发呆而是在 ModusToolbox 的组件库里直接就能拉到已经适配好的 LoRaWAN 组件。硬件层面Cypress 的 PSoC 6 系列 MCU 本身就是一个很适合做 LoRaWAN 终端的平台双核架构Cortex-M4 Cortex-M0M0 可以专职管理射频收发和低功耗调度M4 跑应用逻辑。而 Semtech 的 SX126x 系列则是目前 LoRaWAN 终端里最主流的收发器内部集成了 LoRa 调制解调器、基带处理和部分协议辅助功能。这两个东西放在一起配合上官方给出的参考电路设计和 PCB 布局建议就能形成一套“MCU LoRa 射频”的组合拳。它不像很多人误解的那样是两颗芯片封进一颗 SiP而是从软件、硬件参考设计、功耗验证三个层面做的深度整合。2. PSoC 6 与 SX126x 的协同从接口到功耗管理的一次打包既然说是“集成的 LoRaWAN 方案”就要拆开看它到底把哪些环节整合了。把“集成”二字理解成“只是提供了参考原理图”那就太浅了。真正的集成体现在软件栈、硬件接口和低功耗设计三个维度。2.1 硬件接口不用再纠结 SPI 拉线与中断分配PSoC 6 和 SX126x 的连接方式其实并不复杂SX126x 对外接口就那几个SPISCK、MOSI、MISO、NSS、 busy 引脚作为状态指示、DIO1 作为中断输出再加上 RESET 和供电。但在参考设计里Cypress 把这些引脚分配做到了一个开箱即用的程度——你拿到的是已经匹配好的 smartio 配置不需要反复翻阅两颗芯片的数据手册去核对引脚冲突。实际画板时有个小细节值得提醒SX126x 的 BUSY 引脚在射频收发状态下会频繁拉高如果把它接到 MCU 的一个普通 GPIO 而不是带中断能力的引脚上后续软件里就要靠轮询去等 BUSY 释放代码很别扭。Cypress 这套参考设计里BUSY 走的是 PSoC 6 的 GPIO 中断线路DIO1 分配给了另一个中断源两个事件可以独立响应这在软件编写上舒服很多。2.2 功耗协同从“各自为政”到统一调度LoRaWAN 终端产品很少有插着电源用的大部分都是电池或者能量采集。所以 MCU 和射频部分的功耗协同是决定产品能不能用一年的关键。拆开来看PSoC 6 的低功耗模式有 Sleep、Deep Sleep、Hibernate 等几档。SX126x 在工作状态下也有 Sleep、Standby、RX、TX 几个状态Standby 下还要细分 RC 模式还是 XOSC 模式。过去用两颗芯片最麻烦的是让它们“一起睡、一起醒”MCU 进入 Deep Sleep 之前得先确保 radio 也进了 Sleepradio 的唤醒中断来了MCU 还得能从 Deep Sleep 里快速恢复。在 PSoC 6 SX126x 的集成方案里Semtech 的 LoRaWAN 协议栈对 SX126x 的电源状态做了封装MCU 的电源管理命令和 radio 的状态迁移绑定在同一个调度循环里。你在应用层只需要调用lorawan_sleep()这样的接口底层会自动完成“先让 radio 进入指定状态再让 MCU 进低功耗”这个全过程。这个细节对实际产品续航的影响非常大。我做了一个简单的状态对照表方便理解工作状态MCU 行为SX126x 行为典型场景Active-TX正常运行TX 发射数据上报、入网申请Active-RX正常运行RX 接收窗口Class A 的后两个接收窗口IdleSleep / Deep SleepSleep等待定时上报Wakeup-RX快速唤醒RX 监听下行命令随时可能到达2.3 协议栈适配LoRaWAN 1.0.4 的好处不止是“多了一个版本号”这次集成基于 LoRaWAN 1.0.4 协议栈。很多刚接触 LoRaWAN 的人对版本号不敏感但 1.0.4 相比 1.0.3 有几个重要改进对下行链路的确认机制做了更清晰的描述对 Join 流程中的一些边界条件做了修正还增加了对多播的支持说明。对设备量产来说协议栈越稳定后面做 LoRaWAN 认证的时候就越省事。协议栈集成在 ModusToolbox 里还有一个好处你可以直接看到协议栈的源码。这和用一颗“黑盒模组”完全不同。遇到 Join 失败、上下行不通的时候直接进协议栈代码里设断点能看到状态机的流转过程。这种调试体验说实话在 AT 指令模组上很难实现。3. 智能门锁为什么是 LoRaWAN 方案的第一站最近“基于 LoRaWAN 设计智能门锁”这个热度很高原因也很实在。智能门锁是典型的电池供电、需要远距离连接、对安全要求高的设备这几个属性和 LoRaWAN 的匹配度几乎完美。3.1 智能门锁的连接痛点WiFi 和 BLE 解决不了先说 WiFi。智能门锁用 WiFi 的不少但痛点很明显功耗大。WiFi 要保持连接模组得持续保持活跃状态稍微上点档次的 WiFi 模组平均功耗就是几十毫安级别门锁那几节电池根本扛不住几个月。有些人会说“可以只在开门时连 WiFi”但这样门锁就变成了离线设备远程下发密码、查看开门记录这些功能都成了摆设。再说 BLE。BLE 低功耗是低功耗但有距离限制手机得走到锁旁边才能连上。如果人不在附近家人访客来了怎么办只能靠临时密码而且临时密码怎么安全地下发到门锁上也是一个问题。BLE 门锁搭配一个家庭网关倒是能做到远程但每户都要装一个网关成本上不划算。LoRaWAN 的逻辑完全不同门锁本身不依赖手机靠近操作而是通过 LoRaWAN 网关接入网络。公共 LoRaWAN 网络比如国内的运营商级 LoRa 网络或者私有化部署的 LoRaWAN 网络提供覆盖门锁上报状态和接收指令都走这个通道。由于 LoRa 的链路预算高门锁在楼道内、铁门后这种复杂环境下依然能保持连接而且电池能用很久。3.2 LoRaWAN 智能门锁的功能设计要点如果把 PSoC 6 SX126x 这套方案用于智能门锁功能上可以这么切上报类功能门锁开关状态变化上报开门、关门、反锁电池电量定期上报防拆报警上报离线事件缓存上报长时间没有网络时先存本地下行类功能远程下发临时密码远程修改管理员权限远程升级固件主动查询门锁状态这里有一个 LoRaWAN 协议层面的问题要想清楚LoRaWAN 的下行通信不是实时的。Class A 模式下终端发送上行后会在随后的两个短时间窗口内听下行网络侧要想主动下发指令得等终端下一次上行。这对门锁场景来说意味着“远程下发临时密码”通常不是秒级的——可能等几分钟也可能等很久取决于门锁的上行频率。所以做门锁产品时如果用户需求是“我在手机上点一下门锁立刻开门”LoRaWAN 的 Class A 是不太合适的。这种场景要么配合 Class B增加定期下行时隙要么走“门锁支持 BLE 近场开锁 LoRaWAN 远程管理”的组合。后者其实更符合实际使用人在门口用 BLE 开锁人不在时远程配置和管理走 LoRaWAN。这也是为什么 PSoC 6 这个方案有价值——PSoC 6 本身就集成了 BLE一颗芯片同时给了你 BLE 和 LoRaWAN 两种连接能力不再需要外挂一个 BLE 模块。3.3 安全机制PSoC 6 的硬件安全叠加 LoRaWAN 加密智能门锁的安全等级和普通传感器不一样它控制的是物理世界的进出权。这套方案里有两层安全机制可以叠加LoRaWAN 协议层的 AES-128 加密保障的是无线链路上的数据安全防止别人截获和篡改PSoC 6 内置的硬件安全模块可以安全地存放密钥防止攻击者通过调试接口读取敏感信息。门锁的固件里LoRaWAN 的 AppKey 和 DevEUI 建议存放在 PSoC 6 的安全存储区不要以明文形式写在 Flash 里。这个点在开发阶段容易被忽略但一旦产品到了批量阶段如果有人通过固件提取工具拿到一组设备的密钥直接冒充设备接入网络后面处理起来就非常麻烦。4. 基于这套方案快速动手从模组选型到上报数据跑通前面讲了原理和价值这一节是纯实操向的内容。基于 PSoC 6 SX126x 做一套 LoRaWAN 设备从零到打通数据上报大体要经历这几个阶段。4.1 硬件选型模组 or 分立方案第一步先想清楚用现成模组还是自己贴分立器件。用 LoRa 模组比如基于 SX126x 的贴片模组的好处是射频部分已经调好天线匹配电路、晶振、balun 都集成好了产品申请无线电认证时直接引用模组的认证报告就可以省心很多。缺点是成本稍高一点体积也略大。用分立器件MCU SX126x 芯片的好处是成本控制更灵活PCB 布局可以更紧凑但射频调试的功夫得你自己下。SX126x 本身已经把 LoRa 调制解调做进芯片里了你主要操心的是天线匹配和阻抗控制。对于没有射频工程师的小团队我建议第一次打样先用模组等产品验证跑通了再考虑分立方案降成本。4.2 开发环境ModusToolbox 的 LoRaWAN 集成Cypress 的开发环境已经从旧的 PSoC Creator 迁移到了 ModusToolbox这套方案基于 ModusToolbox 3.x。你需要在电脑上安装ModusToolbox 3.x建议直接装最新 3.2 以上版本Semtech LoRaWAN 组件包在 ModusToolbox 的 Library Manager 里搜 LoRaWAN可以看到 Semtech 官方维护的组件安装完切换工作区后创建一个新的 PSoC 6 应用配置设备选择器选定具体的芯片型号。然后在 Library Manager 里加上 LoRaWAN middleware以及配套的 HAL 驱动。如果硬件是自己画的板子还需要确认设备配置器里所有引脚分配都和原理图对应上。4.3 一个最小上报示例的代码逻辑应用代码的框架其实比较固定。我以发送一个 4 字节 payload 上报电池电压为例核心流程是#include cyhal.h #include lorawan.h // APP EUI / DEV EUI / APP KEY 通常存在 secure storage static uint8_t app_eui[8] {0x00, 0x00, ...}; static uint8_t dev_eui[8] {0x00, 0x00, ...}; static uint8_t app_key[16] {0x00, 0x00, ...}; int main(void) { cy_rslt_t result; uint8_t payload[4]; // 1. 初始化 LoRaWAN 协议栈 result lorawan_init(NULL); if (result ! CY_RSLT_SUCCESS) { CY_ASSERT(0); } // 2. 设置 DevEUI / AppEUI / AppKey lorawan_set_deveui(dev_eui); lorawan_set_appeui(app_eui); lorawan_set_appkey(app_key); // 3. 发起 OTAA 入网 lorawan_join(); // 4. 入网成功后定时上报 while (1) { if (lorawan_is_joined()) { // 把电池电压填到 payload payload[0] (uint8_t)(voltage_mv 8); payload[1] (uint8_t)(voltage_mv 0xFF); lorawan_send(payload[0], 4, CONFIRMED_MSG, 1, 5); } cyhal_system_delay_ms(60000); // 每分钟上报一次 } }这只是把流程梳理出来实际代码里要做的事更多电池电压的 AD 采集、按键中断触发上报、错误处理与重试策略、低功耗状态机等。不过 LoRaWAN 组件的接口封得比较干净核心的入网和收发都在几个 API 里不会让人在协议细节里陷太深。4.4 和 ChirpStack 联调的验收标准设备端代码写完总得有个对端吧。本地开发时最常用的 LoRaWAN 网络服务器有 ChirpStack、The Things Network 等。先在 ChirpStack 里注册设备填入和代码一样的 DevEUI、AppKey然后在网络监控页面上观察设备是否成功发送了 Join Request 并收到 Join Accept设备上行数据是否到达了应用服务器应用服务器主动下发一条数据设备是否收到。这个流程跑通说明从射频发射到协议栈回环的整条链路都是通的。如果 Join 都过不去优先查三样东西DevEUI/AppKey 是否和数据表一致、频率是否在正确的工作信道上、天线的驻波比是否正常。5. 量产前必须处理的四件事射频、功耗、认证和升级功能 Demo 跑通了离产品落地还有一段路。这一段是量产前必须过的关每一项都藏着不少坑。5.1 射频性能灵敏度不是看规格书就完事的SX126x 的灵敏度标称可以做到 -137dBm 甚至更低条件是在理想模式下低数据速率、大扩频因子。但实际产品里灵敏度和你的天线设计、PCB 布局、外壳材质都有关系。测试上至少要在暗室里做一次天线效率测试或者退一步在半开放环境下对比“参考设计收到的 RSSI”和“自己板子收到的 RSSI”。如果差出 3dB 以上基本可以确定天线匹配有问题。LoRa 的链路预算虽然余量大但门锁安装在金属门体上时天线效果很受影响金属表面的感应电流会改变天线谐振频率。我见过一个项目同一块板子在金属门上灵敏度掉了 5dB后来是靠调整天线朝向和增加地平面净空区才拉回来。这里还有一个很实际的建议样板阶段就多留一个天线调测用的 π 型匹配焊盘方便后续调试时焊接 0Ω 电阻、并联电容等调匹配。5.2 功耗验证不要用万用表测沉睡中的设备LoRaWAN 设备的平均功耗很低但峰值电流不小——SX126x 发射时电流可以到 100mA 以上PSoC 6 跑满频时也有几十毫安。万用表在这种场景下测出来的是平均电流参考意义有限更准确的方法是并联一个小电阻比如 10mΩ采样用示波器或者专用的功耗分析仪记录电流曲线。重点观察三个时间点的电流时间点预期电流常见问题深睡阶段10uA 以下有外部电阻漏电路径发射瞬间100mA 级电源去耦不足导致电压跌落接收窗口几 mA 到十几 mASX126x RX 电流偏高如果深睡电流降不下去优先检查 SPI 上拉电阻、射频电路供电 LDO 的静态电流、以及 MCU 的 GPIO 悬浮状态。这套方案里PSoC 6 和 SX126x 之间的 SPI 引脚如果配置成上拉模式在 MCU 深睡时可能通过上拉电阻形成通路白白消耗几个微安。5.3 认证LoRaWAN 认证和无线电认证是两回事“认证”这个词很容易混淆。做 LoRaWAN 设备要过两个体系的认证一是 LoRa Alliance 的 LoRaWAN 认证验证的是设备对 LoRaWAN 协议标准的符合性。这个认证涉及终端设备的入网流程、上下行通信、数据加密等协议层面。Semtech 的协议栈如果保持版本一致认证会比较顺利。二是各个目标市场的无线电认证。中国这边需要考虑无线电发射设备型号核准欧盟是 CE-RED美国是 FCC。使用已认证的 LoRa 模组能显著简化这个过程因为你不需要再从射频传导杂散、辐射杂散这些测试开始做起模组厂商的认证报告可以直接引用。5.4 固件升级LoRaWAN 也可以做 OTA最后说一个容易被忽略的点LoRaWAN 设备的固件升级。智能门锁量产出门之后不可能把每一把锁拆下来烧程序。LoRaWAN 本身支持通过下行链路做 FUOTAFirmware Updates Over The Air协议栈里已经定义了相关的 multi-packet 传输机制。但 LoRaWAN 的下载速度不像 WiFi 那么快一个几百 KB 的固件在 SF7 的速率下可能要传几个小时。所以做 FUOTA 时既要考虑协议层的分包与重传也要在门锁的应用层设计一个可回滚的升级机制先把新固件下载到缓存区校验通过后再写回应用区防止升级过程中断电导致门锁变砖。在这一步上PSoC 6 双核架构也能派上用场。M0 核跑一个极简的 bootloaderM4 核跑实际应用。升级时通过 M0 接收和写入固件M4 应用崩溃了还可以通过 bootloader 恢复。这种架构在门锁产品里非常有用。以上内容其实是把一个成熟的 LoRaWAN 终端项目拆开来看从合作背景到硬件选型再到量产要点每一步都有不少值得玩味的细节。我自己在测试 PSoC 6 和 SX126x 组合时的真实感受是集成方案真正省时间的部分不在硬件接线而在协议栈和低功耗调度的整合这恰恰是之前每个 LoRaWAN 项目都会反复打磨的地方。对于准备做基于 LoRaWAN 的智能门锁或者类似电池供电设备的团队这套方案值得拿来作为第一版打样的起点。
返回列表