2. nRF91系列硬件架构与开发环境搭建

nRF91系列是Nordic Semiconductor面向蜂窝物联网(LTE-M/NB-IoT)推出的低功耗SiP(System-in-Package)芯片,典型型号包括nRF9160、nRF9161和nRF9151。理解其内部硬件架构,是后续进行固件开发、功耗优化和外围电路设计的基础。本节从芯片内部结构出发,逐步过渡到nRF Connect SDK开发环境的搭建,最终完成第一个固件的编译与烧录。

2.1 nRF91内部硬件架构

nRF91系列并非单一MCU,而是一个高度集成的系统级封装。其内部主要包含以下几个核心部分:

  • 应用处理器(Application MCU):基于Arm Cortex-M33内核,主频最高128 MHz(nRF9160为64 MHz,nRF9161/9151为128 MHz)。Cortex-M33支持TrustZone安全扩展,具备浮点运算单元(FPU)和DSP指令集,适合运行应用层逻辑、传感器数据处理和协议栈上层。
  • 调制解调器(Modem):独立的LTE-M/NB-IoT基带处理器,支持3GPP Release 13/14标准。调制解调器拥有自己的固件(Modem Firmware),通过IPC(Inter-Processor Communication)与应用处理器通信。调制解调器负责射频控制、小区搜索、附着、数据传输等蜂窝协议栈底层功能。
  • PMIC(电源管理单元):nRF91内部集成了电源管理功能,但通常需要外接nPM1100或nPM1300等PMIC芯片来管理电池充电和系统供电。PMIC负责为应用处理器、调制解调器和射频前端提供多路稳压输出,并支持低功耗模式切换。
  • 射频前端:包括收发器、功率放大器(PA)、低噪声放大器(LNA)和天线接口。nRF91支持多频段LTE,射频前端需要根据目标频段进行匹配设计。
  • 外设资源:应用处理器侧提供GPIO、UART、SPI、I2C、PWM、ADC、定时器等外设。调制解调器侧有专用的UART接口用于AT命令通信。GPIO数量因封装而异,nRF9160 SiP提供32个GPIO,nRF9161提供更多。

应用处理器与调制解调器之间的通信通过IPC机制实现。在nRF Connect SDK中,这一通信被封装为AT命令接口和套接字API。应用处理器通过发送AT命令控制调制解调器,调制解调器则通过IPC将网络事件、数据包等上报给应用处理器。

nRF91系列SiP内部架构与外部连接 nRF91 SiP 封装边界 应用处理器 Arm Cortex-M33 @ 128 MHz TrustZone / FPU / DSP Flash 1MB / RAM 256KB 运行应用逻辑与协议栈上层 调制解调器 LTE-M / NB-IoT 基带 3GPP Release 13/14 独立Modem固件 射频控制 / 小区搜索 / 附着 IPC AT命令 / 套接字 PMIC 电源管理 nPM1100 / nPM1300 电池充电管理 多路稳压输出 / 低功耗模式 射频前端 收发器 / PA / LNA 多频段LTE匹配 天线接口 外设资源(应用处理器侧) GPIO (32路) · UART · SPI · I2C · PWM · ADC · 定时器 · 看门狗 调制解调器侧:专用UART (AT命令) · IPC通道 天线 LTE 电池 Li-Po

2.2 nRF Connect SDK与工具链安装

nRF Connect SDK(简称NCS)是Nordic官方提供的嵌入式开发框架,基于Zephyr RTOS构建,集成了nRF91的驱动、协议栈、示例代码和构建系统。开发环境搭建推荐使用nRF Connect for VS Code扩展,它提供了从工具链管理到调试的完整支持。

安装步骤如下:

  1. 安装nRF Connect for VS Code:在VS Code扩展市场中搜索“nRF Connect for VS Code”并安装。该扩展会自动安装nRF Command Line Tools和SEGGER J-Link驱动。
  2. 安装工具链管理器(Toolchain Manager):在扩展中打开“Manage Toolchains”,选择NCS版本(推荐v2.6.0或更高稳定版),点击安装。工具链包含ARM GCC编译器、CMake、Ninja、West等构建工具。
  3. 安装nRF Util:nRF Util是Nordic的命令行工具,用于固件烧录、调制解调器固件更新等。可通过扩展自动安装或从官网下载。
  4. 配置环境变量:确保工具链路径已加入系统PATH,或在VS Code设置中指定工具链路径。

安装完成后,可通过以下命令验证环境:

west --version
# 输出示例:West version: v1.2.0

arm-none-eabi-gcc --version
# 输出示例:arm-none-eabi-gcc (GNU Arm Embedded Toolchain) 12.2.1

nrfutil version
# 输出示例:nrfutil 7.5.0

2.3 获取示例代码与创建工程

NCS提供了大量示例代码,位于SDK的nrf/samples和zephyr/samples目录下。对于nRF91,最基础的示例是nrf/samples/nrf9160/hello_world(或对应nRF9161的变体)。

使用West创建新工程的方法:

west init -m https://github.com/nrfconnect/sdk-nrf --mr v2.6.0 myproject
cd myproject
west update
west build -b nrf9160dk_nrf9160_ns samples/hello_world

其中-b参数指定目标板。nRF9160 DK的板级定义为nrf9160dk_nrf9160_ns,_ns表示非安全(Non-Secure)构建,即应用运行在TrustZone的非安全区域。若使用nRF9161 DK,则对应nrf9161dk_nrf9161_ns。

2.4 编译与烧录第一个固件

编译过程由CMake和Ninja驱动,West封装了构建命令。编译成功后,生成build/zephyr/zephyr.hex文件。烧录使用nRF Util或J-Link Commander:

# 使用nrfutil烧录
nrfutil device program --firmware build/zephyr/zephyr.hex --serial-number <DK序列号>

# 或使用west flash(需配置J-Link)
west flash

烧录完成后,通过串口查看输出。nRF9160 DK的调试串口通常为115200波特率。使用串口终端(如PuTTY、minicom或VS Code串口监视器)连接后,应看到类似以下输出:

*** Booting Zephyr OS build v3.5.99-ncs1 ***
Hello World! nrf9160dk_nrf9160_ns
[00:00:00.000,000] <inf> app: Application started

若看到“Hello World”输出,说明工具链、编译、烧录和串口通信均正常。此时应用处理器已正常运行,但调制解调器尚未激活。下一步可尝试nrf/samples/nrf9160/lte_ble_gateway或nrf/samples/nrf9160/at_client示例,验证调制解调器通信。

提示:nRF91的调制解调器固件需要单独更新。使用nrfutil device program --firmware mfw_nrf9160_1.3.6.zip可更新调制解调器固件。调制解调器固件版本与NCS版本存在兼容性要求,建议查阅Nordic官方文档确认对应关系。

2.5 关键配置与常见问题

在prj.conf中,需要根据应用需求启用相应配置。例如,启用调制解调器通信需添加:

CONFIG_NRF_MODEM_LIB=y
CONFIG_LTE_LINK_CONTROL=y
CONFIG_NET_SOCKETS=y

常见问题包括:J-Link驱动未安装导致烧录失败、工具链版本与NCS版本不匹配、串口被占用等。建议在VS Code中使用nRF Connect扩展的“Build”和“Flash”按钮,可自动处理大部分配置。