4. nRF54多协议并发通信的软件架构

nRF54 系列(如 nRF54H20、nRF54L15)在硬件上提供了多组独立无线外设与多核处理能力,但真正让“多协议并发”可工程化落地的,是 nRF Connect SDK(NCS)中的软件架构。理解这套架构,需要同时看清三条主线:协议栈如何分层、Zephyr RTOS 如何调度线程、以及共存框架如何在资源受限条件下分配射频与时间。

一、协议栈分层:从应用到底层射频

NCS 基于 Zephyr RTOS 构建,协议栈并非单一整体,而是按职责分层。自上而下大致可分为:应用层、协议服务层(如 Bluetooth LE Host、Thread、Zigbee、Matter)、控制器/链路层(Link Layer、802.15.4 MAC/PHY)、以及 SoC 硬件抽象与射频驱动层。以 Bluetooth LE 为例,Host 与 Controller 之间通过 HCI 接口通信;在 nRF54 上,Controller 可以运行在独立的网络核(Network Core)上,Host 运行在应用核(Application Core)上,两者通过核间通信(IPC)传递 HCI 命令与事件。

这种分层的意义在于:不同协议可以共享同一套 RTOS 调度、日志、电源管理与驱动框架,同时又能通过独立核或独立外设实现物理隔离。例如 nRF54H20 的应用核负责业务逻辑与 Host 协议栈,网络核负责实时性要求高的 Controller 与 802.15.4 底层,二者通过共享内存与 IPC 通道交换数据,避免应用层任务抖动影响射频时序。

nRF54 多协议并发软件分层与核间关系 应用核 Application Core 应用层 / 业务逻辑 BLE 应用 · Thread 应用 · Matter 应用 协议服务层 Host BLE Host · Thread · Zigbee · Matter Zephyr RTOS 内核 线程调度 · 信号量 · 消息队列 · 工作队列 驱动与 HAL UART · SPI · GPIO · 时钟 · 电源管理 IPC 核间通信端点 共享内存 · 邮箱 · HCI 传输通道 网络核 Network Core BLE Controller Link Layer · 调度器 · 加密引擎 802.15.4 MAC / PHY Thread · Zigbee 底层 射频前端与共存控制 2.4 GHz 收发 · 天线切换 · 优先级仲裁 IPC 核间通信端点 共享内存 · 邮箱 · HCI 传输通道 实时调度 · 低延迟中断处理 IPC / HCI 共存框架:时间片仲裁 · 射频优先级 · 共享资源互斥 · 低功耗状态协调

二、Zephyr RTOS 线程模型:谁在跑、怎么让路

在 Zephyr 中,所有协议栈活动最终都落在若干线程上。典型线程包括:系统时钟与超时线程、BLE Host 的 RX/TX 线程、Thread 的 IP 栈线程、应用主线程、以及各协议的工作队列(workqueue)。线程优先级决定抢占关系:Zephyr 中数值越小优先级越高,协作式线程(cooperative)不可被同优先级或低优先级线程抢占,抢占式线程(preemptive)可被更高优先级线程打断。

多协议并发时,关键不是“线程越多越好”,而是让实时性要求高的任务获得足够优先级,同时避免高优先级线程长期占用 CPU 导致低优先级协议超时。例如 BLE 连接事件需要严格的时间窗口,Controller 侧通常以高优先级中断或协作线程处理;Thread 的 MAC 层重传则可以在稍低优先级线程中完成。应用层若使用 k_work_submit 提交耗时操作,应放入独立工作队列,避免阻塞协议 RX 线程。

一个常见的教学示例配置如下(参数为示例值,非实测):BLE Host RX 线程优先级设为 5,Thread 线程优先级设为 7,应用主线程优先级设为 10,系统工作队列保持默认。这样当 BLE 事件到达时,Host RX 线程可抢占应用线程,及时把 HCI 事件交给协议栈;而 Thread 任务在 BLE 空闲窗口内获得调度,保证其周期性父节点查询不被饿死。

三、协议栈共存框架与资源分配策略

多协议并发最核心的矛盾是:2.4 GHz 射频只有一个(或有限几个),而 BLE、Thread、Zigbee 都希望按自己的时序收发。NCS 的共存框架通常从三个维度分配资源:时间、射频通道、以及 CPU/内存。

时间维度:BLE 连接事件、广播事件与 802.15.4 的 CSMA/CA 退避窗口可能重叠。共存框架通过“优先级 + 时间片”仲裁:BLE 连接事件通常具有最高实时优先级,因为错过连接事件会导致链路断开;802.15.4 的 ACK 与重传可容忍毫秒级延迟。实现上,Controller 会在射频活动前向共存管理器申请时间窗口,若冲突则按优先级让路或延迟。

射频维度:nRF54 支持多天线与多射频路径,但同一时刻同一射频前端只能服务一个协议。若使用单天线共享,则需要天线切换与收发方向控制;若使用多天线,可按协议分配独立天线,降低切换开销,但需注意天线隔离与共存滤波。

CPU 与内存维度:多协议同时运行会显著增加 RAM 占用。BLE Host 与 Thread 栈各自需要缓冲区、连接上下文与定时器。NCS 通过 Kconfig 裁剪功能:例如关闭未使用的 GATT 服务、减小 ACL 缓冲区、限制 Thread 子节点数量。以下是一个示例性的资源分配检查表(字段与数值为教学示例,需按实际项目调整):

资源项BLE 示例占用Thread 示例占用分配策略
RAM 缓冲区ACL RX/TX 各 2 KBIP 分片缓冲 1.5 KB按最大并发连接数裁剪
线程优先级Host RX = 5Thread = 7BLE 实时性优先
射频时间片连接间隔 15 ms轮询周期 30 sBLE 窗口优先,Thread 避让
Flash 占用Host + Controller 约 200 KBThread 栈约 120 KB按需启用协议
在 nRF54H20 上,应用核与网络核各自拥有独立内存与外设,协议栈可物理隔离;在 nRF54L15 等单核方案中,多协议共享同一 CPU,此时线程优先级与射频时间片仲裁更加关键。

四、从架构到落地:一个并发场景的观察点

假设设备同时运行 BLE 外设连接与 Thread 休眠终端。上电后,应用核初始化 BLE Host 与 Thread 栈,网络核启动 BLE Controller 与 802.15.4 底层。BLE 广播被手机连接后,连接事件每 15 ms 触发一次;Thread 终端每 30 s 向父节点发送一次轮询。若观察到 Thread 轮询丢包率升高,应优先检查:BLE 连接事件是否占用了过多射频时间、Thread 线程优先级是否过低、以及 IPC 通道是否出现拥塞。可通过 NCS 的日志与统计接口查看 HCI 事件计数、802.15.4 重传次数与线程栈使用率,从而判断是时间分配问题还是 CPU 调度问题。

架构理解的价值在于:当并发出现异常时,能快速定位问题属于分层中的哪一层——是 Host 缓冲区不足、RTOS 线程饥饿、还是射频共存仲裁失败。只有把分层、线程模型与资源分配策略放在同一张图上思考,nRF54 的多协议并发能力才能真正转化为稳定可交付的工程方案。