1. 课程导入与开发环境全景
在进入具体编码之前,先把整门课要用的“地图”铺开。这门课围绕 Nordic Semiconductor 的 nRF 系列无线 SoC 与 Zephyr RTOS 展开,目标不是零散地讲 API,而是建立一套可复用的工程方法:从芯片选型、工具链搭建、设备树与 Kconfig 配置,到 BLE/Thread 协议栈集成、低功耗调优与量产固件交付。理解 nRF 与 Zephyr 各自的定位,以及它们如何组合成一个完整开发栈,是后续所有章节的前提。
nRF 系列芯片:从无线 SoC 到多协议平台
nRF 系列并不是单一型号,而是一条覆盖不同无线协议与算力档位的产品线。课程中会反复接触以下几类代表:
- nRF52 系列:基于 ARM Cortex-M4F,主打 Bluetooth Low Energy(BLE)、ANT、2.4GHz 私有协议,是低功耗传感器、穿戴设备的主力。典型型号 nRF52832(512KB Flash / 64KB RAM)、nRF52840(1MB Flash / 256KB RAM,支持 USB 与 802.15.4)。
- nRF53 系列:双核 Cortex-M33(应用核 + 网络核),支持 Bluetooth LE Audio、Direction Finding、Thread/Zigbee,适合需要协议栈与应用逻辑隔离的场景,如 nRF5340。
- nRF91 系列:蜂窝物联网模组,集成 LTE-M/NB-IoT 与 GNSS,用于远程资产追踪、表计等广域连接场景,如 nRF9160。
- nRF54 系列:新一代多协议 SoC,面向更高集成度与更低功耗的下一代产品。
这些芯片的共同点是:无线子系统与 MCU 深度集成,外设(GPIO、SPI、I2C、PWM、ADC、定时器)通过统一寄存器模型暴露,且都提供 Nordic 的 SoftDevice 或协议栈固件。但“裸机 + SoftDevice”的开发方式在复杂度上升后会遇到明显瓶颈:协议栈与应用耦合、内存布局手工维护、跨型号移植成本高。这正是 Zephyr 要解决的问题。
Zephyr RTOS 在 Nordic 生态中的角色
Zephyr 是一个开源、可裁剪、面向资源受限设备的实时操作系统。对 Nordic 开发者而言,它的价值体现在三个层面:
- 统一抽象层:Zephyr 通过设备树(Devicetree)描述硬件,通过 Kconfig 管理功能开关,通过驱动模型统一外设访问。同一份应用代码,在 nRF52840 与 nRF5340 之间迁移时,主要改动集中在板级配置而非业务逻辑。
- 协议栈集成:Nordic 官方维护的 nRF Connect SDK(NCS)以 Zephyr 为内核,集成了蓝牙协议栈、Thread、Zigbee、Matter、蜂窝协议栈等。开发者通过 Kconfig 选项启用协议栈,而不是手动链接二进制库。
- 构建与调试工具链:Zephyr 提供 west 元工具、CMake 构建系统、原生支持 J-Link 调试与 RTT 日志。配合 nRF Connect for VS Code,可以完成从创建工程到烧录调试的完整闭环。
需要明确的是:Zephyr 不是 Nordic 的私有 RTOS,而是一个由 Linux 基金会托管、Nordic 深度参与的上游项目。NCS 是 Nordic 在 Zephyr 之上叠加的发行版,包含芯片支持、协议栈、示例与工具。课程中说的“Zephyr 开发”,实际指的是“基于 NCS 的 Zephyr 应用开发”。
开发环境全景:从主机到目标板
一个完整的 nRF + Zephyr 开发环境由四部分组成:主机工具链、SDK 与源码、目标硬件、调试与观测通道。下图展示了它们之间的连接关系与数据流向,可作为后续环境搭建的参照。
图中左侧是主机侧工具,右侧是目标硬件,中间通过 USB/SWD 与 RTT 形成双向通道。构建流程从 west build 开始,经过 CMake 配置、编译链接,生成可烧录的 .hex 文件,再由 west flash 写入芯片。四个关键配置文件决定了“编译什么、怎么编译、烧到哪里”:prj.conf 控制功能开关,.overlay 描述板级硬件差异,CMakeLists.txt 声明源码与依赖,west.yml 锁定 SDK 版本。
课程实战目标与最终交付物
本课程不满足于“点灯 + 串口打印”,而是以一条完整的无线产品开发链路为主线。最终交付物包括:
- 可编译、可烧录、可调试的 Zephyr 工程:基于 NCS,支持 nRF52840 DK 与 nRF5340 DK 两块板卡,包含 BLE 外设与 Central 两种角色示例。
- 设备树与 Kconfig 配置集:针对自定义外设(如 I2C 温湿度传感器、SPI 显示屏)的 overlay 文件,以及低功耗模式下的电源管理配置。
- 低功耗测量与优化记录:使用 PPK2 或电流表测量广播、连接、休眠三种状态下的电流,给出优化前后的对比数据。
- 量产固件打包脚本:基于
west与nrfutil的自动化构建、签名与 DFU 包生成流程。
这些交付物会分散在各章节中逐步完成,最终拼装成一个可演示的无线传感节点。每完成一个模块,都应能在开发板上观察到明确的行为变化:LED 状态、RTT 日志、手机 App 收到的广播包、电流表读数。判断标准不是“代码编译通过”,而是“目标行为可复现、可测量、可解释”。
west build -b <board> 与 west flash 两个动作。把这张全景图放在手边:左边是你要操作的软件栈,右边是你要控制的硬件,中间是构建与观测通道。接下来每一章,都会在这张图上增加一个具体的模块或一条具体的连线。