1. 课程导入:学习目标、适用人群、课程结构、开发环境总览

欢迎来到《Nordic nRF TinyML入门:nRF52840/nRF5340端侧AI开发流程》的第一章。在接下来的课程中,我们将系统性地探索如何在Nordic Semiconductor的旗舰低功耗蓝牙SoC——nRF52840与nRF5340上,部署和运行轻量级机器学习模型。TinyML并非简单地将模型压缩后塞进单片机,而是一套融合了嵌入式系统设计、信号处理、模型优化与低功耗工程的全新方法论。本章作为整个课程的基石,将帮助你明确学习路线、评估自身基础、理解课程的知识架构,并搭建起一套可复用的开发环境。无论你是刚接触嵌入式AI的硬件工程师,还是希望将算法落地到边缘设备的软件开发者,本章都将为你绘制一幅清晰的技术航海图。

nRF TinyML 课程知识框架与开发环境总览 学习目标 掌握端侧AI开发全流程 理解硬件资源约束 适用人群 嵌入式工程师 算法/物联网开发者 课程结构 30章渐进式学习 理论+实战结合 开发环境 nRF Connect SDK VS Code + nRF插件 端侧AI开发核心流程 数据采集与标注 传感器/日志/清洗 模型训练与量化 TensorFlow/PyTorch 模型转换与优化 TFLite Micro/算子 部署与推理优化 CMSIS-NN/内存 低功耗 调优 nRF52840 (Cortex-M4F, 1MB Flash) 适合轻量级CNN/异常检测 nRF5340 (双核M33, 1MB Flash) 适合复杂音频/传感器融合 图1-1 课程知识框架与端侧AI开发流程总览

1.1 学习目标:从“能跑模型”到“懂系统优化”

本课程的核心目标并非仅仅教会你如何将现成的TensorFlow Lite模型烧录到开发板上,而是培养一种系统级的设计思维。在nRF52840(Cortex-M4F,主频64MHz,内存256KB)和nRF5340(双核Cortex-M33,主频128MHz/64MHz,内存512KB)上运行AI,意味着你必须在极小的SRAM和Flash预算内,平衡推理延迟、功耗预算与识别精度。完成本课程后,你将能够:

  • 独立完成端侧AI全流程:从传感器数据采集(如IMU、麦克风)、数据清洗与标注,到模型训练、量化(INT8/FP16)、转换为TFLite Micro格式,最终在nRF硬件上实现实时推理。
  • 深度理解硬件加速原理:掌握如何利用ARM Cortex-M内核的DSP指令(如SMLAD)和CMSIS-NN软件库对卷积运算进行加速,理解为何同样的模型在nRF52840上比在Cortex-A系列处理器上慢数十倍。
  • 掌握低功耗AI设计范式:学会使用nRF的PPI(可编程外设互连)、DPPI(分布式可编程外设互连)以及事件驱动机制,实现“事件唤醒-推理-睡眠”的极低功耗循环,例如在待机电流低至0.3µA的同时,实现关键词唤醒功能。
  • 具备工程化排障能力:能够通过RTT日志、HardFault分析、功耗曲线(使用Power Profiler Kit)定位模型崩溃、内存溢出或推理结果异常的问题。
核心原理:TinyML的本质是“算法与硬件的协同设计”。在PC上,内存是廉价的,但在nRF52840上,一个256KB的SRAM需要同时容纳激活缓冲区、中间张量、运行时堆栈和全局变量。因此,本课程将反复强调“内存预算表”的概念——在编写任何一行代码前,先估算模型各层的输出尺寸,确保峰值内存不超过硬件上限。

1.2 适用人群:你需要具备哪些基础?

本课程面向具备一定嵌入式或软件开发经验的工程师,但并非要求你已经是AI专家。为了确保学习效果,建议你对照以下画像进行自我评估:

人群类型 基础要求 本课程带来的核心价值
嵌入式软件工程师 熟悉C语言,了解UART/SPI/I2C外设驱动,有RTOS(如Zephyr、FreeRTOS)使用经验。 补齐机器学习与数据处理短板,掌握模型量化与部署技能,提升产品附加值。
物联网/硬件工程师 熟悉电路原理图,能看懂nRF52840-DK原理图,了解低功耗设计基础。 学会如何将传感器数据转化为AI决策,理解模型对硬件资源的消耗。
算法/数据科学工程师 熟悉Python,使用过TensorFlow或PyTorch训练过分类或回归模型。 突破“只能在服务器上跑模型”的思维定式,掌握模型压缩、算子替换与边缘部署技巧。
在校学生/创客 有基本的C语言和Python基础,对硬件有好奇心。 系统化地进入嵌入式AI领域,获得从零到一的完整项目经验。

如果你对Zephyr RTOS完全陌生,建议在课程初期先花2-3天熟悉nRF Connect SDK的基本工程结构(如hello_world、blinky示例)。本课程在涉及Zephyr设备树(Devicetree)配置时,会从原理层面进行讲解,而非仅仅给出配置代码。

1.3 课程结构:30章渐进式学习路径

本课程共30章,分为四大知识模块,每个模块之间环环相扣。建议按照顺序学习,尤其是前10章的基础部分,将为后续的实战项目打下坚实基础。

  • 模块一:基础与环境(第1-5章):本章节即属于此模块。后续将深入讲解nRF52840/nRF5340的架构差异、Zephyr设备树语法、nRF Connect SDK的编译系统(CMake + west),以及如何配置调试器(J-Link)与串口日志。
  • 模块二:数据与模型(第6-12章):聚焦于端侧AI的数据工程。你将学习如何利用nRF52840-DK上的板载传感器(如BMI270 IMU、PDM麦克风)采集数据,并使用Python进行信号处理(FFT、滤波)。随后,我们将使用TensorFlow训练一个简单的关键词识别(KWS)模型和一个手势分类模型。
  • 模块三:部署与优化(第13-22章):这是课程的核心实战部分。你将学习如何将训练好的模型转换为TFLite Micro格式,并处理量化过程中的精度损失问题。重点章节包括:CMSIS-NN算子优化、内存规划技巧(算子融合、张量复用)、以及利用nRF5340的双核架构(网络核处理BLE协议栈,应用核运行AI推理)实现性能最大化。
  • 模块四:高级应用与调试(第23-30章):探索更复杂的端侧AI应用,如异常检测(基于自动编码器)、多传感器融合(IMU+麦克风)、以及如何使用nRF21540前端模块扩展通信距离。最后,我们将深入讲解如何使用Power Profiler Kit进行功耗剖析,并分享工业级产品的量产测试经验。
学习建议:每章末尾的“实战任务”并非可选项。例如,在第7章学习完数据采集后,请务必自己动手采集一段包含“是/否”语音的数据集,并标注好标签。因为后续章节的模型训练和部署都将基于你亲手采集的数据,这能让你更深刻地理解数据分布对模型性能的影响。

1.4 开发环境总览:搭建你的第一套nRF TinyML工作台

在开始编写代码之前,我们需要搭建一套稳定、可复现的开发环境。Nordic官方主推的nRF Connect SDK(NCS)基于Zephyr RTOS,其版本迭代较快,因此版本锁定是避免环境灾难的关键。以下是推荐的开发环境配置清单:

  1. 硬件准备:nRF52840-DK(PCA10056)或nRF5340-DK(PCA10095)开发板一块。建议初学者使用nRF52840-DK,其资料更丰富,且与nRF5340的编程模型高度相似。此外,准备一根Micro-USB数据线(用于供电和调试)和一个J-Link OB调试器(开发板已板载)。
  2. 软件工具链:推荐使用VS Code + nRF Connect for VS Code扩展包。该扩展包集成了项目向导、设备树编辑器、终端和烧录工具。你也可以选择使用Nordic官方的nRF Connect for Desktop桌面应用,但VS Code插件在代码编辑和调试体验上更优。
  3. SDK与工具链管理:使用nrfutil命令行工具安装和管理NCS版本。例如,执行 nrfutil install ncs-toolchain 会自动安装匹配的west、Zephyr SDK、ARM GCC编译器以及OpenOCD。

下面是一个典型的NCS环境初始化流程(以macOS/Linux为例):

# 1. 安装 nrfutil(Nordic官方工具)
pip3 install nrfutil

# 2. 安装最新稳定版NCS工具链(包含west、Zephyr SDK等)
nrfutil install ncs-toolchain

# 3. 创建并进入工作目录
mkdir nrf_ai_workspace && cd nrf_ai_workspace

# 4. 初始化west工作区(拉取NCS主仓库及所有模块)
west init -m https://github.com/nrfconnect/sdk-nrf --mr v2.6.0
west update

# 5. 导出Zephyr环境变量(每次打开新终端需执行)
source zephyr/zephyr-env.sh
风险提示:NCS的版本兼容性极其重要。例如,NCS v2.6.0对应Zephyr 3.6.0,如果你混用了不同版本的west manifest文件,可能会导致设备树头文件冲突或CMSIS-NN库编译失败。建议在项目根目录下使用 west update --narrow -f always 命令确保所有子模块版本与manifest文件严格一致。另外,Windows用户请务必关闭杀毒软件的实时扫描功能,否则编译速度会降低5-10倍,且可能误删编译中间文件。

在环境搭建完成后,我们可以通过一个简单的“LED闪烁+串口打印”示例来验证工具链是否正常。但请注意,本课程后续的AI项目将大量使用Zephyr的设备树(Devicetree)来配置外设。例如,要使用nRF52840-DK上的BMI270 IMU传感器,你需要在设备树文件中添加如下节点(简化示例):

/ {
    sensors {
        compatible = "i2c-devices";
        bmi270: bmi270@68 {
            compatible = "bosch,bmi270";
            reg = <0x68>;
            label = "BMI270";
            int-gpios = <&gpio0 29 GPIO_ACTIVE_LOW>;
        };
    };
};

这段配置告诉Zephyr内核,BMI270传感器挂载在I2C总线上,地址为0x68,中断引脚连接在P0.29上。理解设备树是驾驭NCS的关键,我们将在第3章详细拆解其语法。

1.5 案例拆解:从零开始点亮nRF52840-DK并验证AI开发链路

为了让你对开发环境有一个直观的感知,我们通过一个“最小可行性验证”案例来结束本章。该案例的目标是:在nRF52840-DK上运行一个基于CMSIS-NN的简单正弦波预测模型,并通过串口打印输出结果。虽然这并非一个完整的AI应用,但它能验证你的工具链、编译系统、烧录流程以及浮点运算单元(FPU)是否正常工作。

背景与约束:假设你刚拿到一块全新的nRF52840-DK,电脑上已安装好VS Code和nRF Connect插件。你的目标是确保从“源码编辑”到“串口输出”的整个链路畅通无阻。

操作步骤:

  1. 在VS Code中,使用nRF Connect插件创建新项目,选择 nrf52840dk_nrf52840 作为目标板,模板选择 hello_world。
  2. 修改 prj.conf 文件,启用浮点打印支持:CONFIG_FPU=y 和 CONFIG_CMSIS_NN=y(后者用于后续AI加速)。
  3. 在 main.c 中,编写一个简单的循环,每秒钟计算一次 sin(x) 的值,并通过 printk 输出。
  4. 点击“烧录”按钮,观察J-Link调试器是否成功识别芯片。打开串口终端(波特率115200),查看输出。

结果与复盘:如果一切顺利,你将看到类似 sin(0)=0.000000 的输出。如果出现 HardFault 或乱码,请优先检查以下三个环节:

  • 电源:开发板上的VREG指示灯是否点亮?如果使用外部调试器,是否与板载调试器冲突?
  • 串口驱动:是否安装了SEGGER J-Link驱动?在设备管理器中是否识别到COM端口?
  • 时钟配置:NCS默认使用外部高频晶振(HFXO),如果开发板上的晶振损坏或未焊接,系统将无法启动。此时可尝试在 prj.conf 中添加 CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=64000000 强制使用内部RC振荡器(不推荐用于实际产品,仅用于验证)。
总结复盘:本章节的核心在于建立“全局观”。你不需要在这一章就完全掌握所有工具,但必须理解:nRF52840与nRF5340的AI开发并非孤立的算法移植,而是一个涉及数据、模型、编译、硬件加速和功耗管理的系统工程。在后续的29章中,我们将逐一攻克这些环节。请务必在课后完成开发环境的搭建,并成功运行上述示例。如果遇到问题,请记录下错误日志,这将是你在后续章节中学习排障技巧的第一手素材。