news 2026/9/19 4:27:42

Zephyr 下 nRF9160 innblue21 蜂窝物联网开发板实战:硬件资源、TrustZone 安全启动与 Secure/Non-Secure 应用构建

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Zephyr 下 nRF9160 innblue21 蜂窝物联网开发板实战:硬件资源、TrustZone 安全启动与 Secure/Non-Secure 应用构建

Zephyr 下 nRF9160 innblue21 蜂窝物联网开发板实战:硬件资源、TrustZone 安全启动与 Secure/Non-Secure 应用构建

【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr

innblue21 是一块基于 Nordic nRF9160 SiP(System-in-Package)的蜂窝物联网传感器开发板,支持 NB-IoT 与 LTE-M 连接,板载加速度计、湿度传感器、Qi 无线充电与电池电量计等丰富外设。本文以 boards/innblue/innblue21/doc/index.rst 为骨架,结合仓库内该板的设备树、Kconfig 与构建配置,系统讲解 innblue21 的硬件资源、引脚映射、安全特性,以及如何在 Zephyr 中完成 Secure / Non-Secure(TrustZone-M)应用构建、烧录与调试。

innblue21 板级概览

innblue21 的核心是一颗 nRF9160 SiP,它在单一封装内集成了应用处理器(Arm Cortex-M33)、LTE-M/NB-IoT 调制解调器、射频前端以及电源管理单元,非常适合低功耗蜂窝物联网传感器节点类产品。在 Zephyr 中该板标识为innblue21,对应 SoC 为 nRF9160 SICA 变体(见 Kconfig.innblue21 中的select SOC_NRF9160_SICA),板级名称与兼容字符串定义于 innblue21_common.dtsi(model = "innblue v21 Dev Kit"compatible = "innblue,innblue21")。

板载硬件

开发板内置了以下传感器与功能器件:

类别器件说明
加速度计ST LIS2DH12三轴加速度计,I2C 接口,地址0x19
CryptoElementMicrochip ATECC608a安全加密芯片,用于密钥存储与认证
湿度传感器ST HTS221相对湿度与温度传感器,I2C 地址0x5f
Qi 无线充电TI BQ51013无线充电接收端
电池电量计TI BQ27421电池燃料电量计

需要说明的是,设备树 innblue21_common.dtsi 中 I2C 总线上实际使能并绑定了更多传感器节点,除文档列出的 LIS2DH12 与 HTS221 外,还包括:

  • ST LPS22HB 气压计(lps22hb-press@5c);
  • AMS CCS811 空气质量传感器(ccs811@5a);
  • Bosch BME680 环境传感器(bme680@76)。

这些节点均挂接在i2c2(Nordic TWIM 实例)下,时钟频率配置为I2C_BITRATE_FAST(400 kHz)。传感器使能时,Kconfig.defconfigREGULATOR会默认开启(default y if SENSOR),配合板载的 3.3V 传感器电源与 5V 升压电源开关使用。

支持的 Zephyr 功能

从设备树与默认配置可以确认,该板在 Zephyr 中支持以下驱动与子系统:

  • GPIO(CONFIG_GPIO=y)、GPIOTE 事件控制器;
  • UART 串口(CONFIG_SERIAL=y)、控制台(CONFIG_CONSOLE=yCONFIG_UART_CONSOLE=y),默认波特率 115200;
  • I2C(TWIM)与多类传感器驱动;
  • PWM(两个实例,分别驱动 RGB LED 与模式 LED);
  • 看门狗 WDT、固定稳压器 regulator、TrustZone-M(CONFIG_ARM_TRUSTZONE_M=y)与 MPU(CONFIG_ARM_MPU=y)。

以上驱动能力由 innblue21_nrf9160_defconfig 等配置文件在构建时统一开启。

引脚连接与 IO 映射

LED

板载 4 颗 LED,其中 3 颗组成 RGB 通道、1 颗为模式指示灯,均通过 GPIO 高电平驱动,引脚分配如下:

LED颜色GPIO
LED1红(RGB 红色通道)P0.7
LED2绿(RGB 绿色通道)P0.6
LED3蓝(RGB 蓝色通道)P0.5
LED4红(模式红色通道)P0.4

在设备树中它们被声明为gpio-leds节点red_ledgreen_ledblue_ledmode_led,并通过 aliases 映射为led0led3,以便兼容各类示例程序(见 innblue21_common.dtsi)。同时 aliases 提供了rgb-pwm = &pwm0mode-pwm = &pwm1,意味着可以直接用 PWM 做呼吸灯等效果——pinctrl 中 PWM 输出引脚(P0.5/P0.6/P0.7 与 P0.4/P0.9)配置了nordic,invert反向标志,与共阳/共阴 LED 的驱动极性相对应。

按键与开关

  • BUTTON1 = P0.31,设备树中声明为gpio-keys节点button0,配置GPIO_PULL_UP上拉并关联INPUT_KEY_0输入事件码,aliases 映射为sw0

其他关键引脚

从 innblue21_common-pinctrl.dtsi 可进一步梳理出串口、I2C 与 PWM 的完整引脚复用:

外设功能引脚
UART0(默认控制台)TX / RXP0.29 / P0.30
UART1TX / RXP0.14 / P0.15
UART2TX / RXP0.18 / P0.19
I2C2(TWIM)SDA / SCLP0.25 / P0.26
PWM0OUT0/OUT1/OUT2P0.5 / P0.6 / P0.7
PWM1OUT0/OUT1P0.4 / P0.9

所有外设都定义了defaultsleep两套 pinctrl 状态,sleep 状态通过low-power-enable在空闲时降低引脚功耗,这是典型的低功耗蜂窝节点设计考量。此外,en_3v3_sensor(P0.12)与en_5v0_boost(P0.21)两个固定稳压器节点负责为传感器与 5V 升压轨供电,均配置了regulator-boot-on上电即开启,并带 10 ms 启动延时。

安全特性:IDAU/SPU 与安全启动

innblue21 基于 Armv8-M 安全扩展构建,文档明确列出两项安全特性:

  • Implementation Defined Attribution Unit(IDAU):通过 System Protection Unit(SPU)实现,用于划分 Secure 与 Non-Secure 内存映射。默认情况下,全部内存空间(Flash、SRAM 及外设地址空间)仅允许 Secure 访问,Non-Secure 侧需要由 Secure 固件显式放行。
  • Secure boot:固件默认从 Secure 状态启动。

这一设计决定了 innblue21 在 Zephyr 中存在两种板级目标:

  1. innblue21(Secure):使用 innblue21_nrf9160.dts,包含nordic/nrf9160_sica.dtsi,code partition 指向slot0_partition
  2. innblue21/nrf9160/ns(Non-Secure):使用 innblue21_nrf9160_ns.dts,包含arm/nordic/nrf9160_ns_sica.dtsi,SRAM 指向sram0_ns_app、code partition 指向slot0_ns_partition

两种目标的差异还体现在 Kconfig 上:innblue21_nrf9160_ns_defconfig 额外设置了CONFIG_TRUSTED_EXECUTION_NONSECURE=y;而 Kconfig.defconfig 中USE_DT_CODE_PARTITION仅在 NS 目标下被 select,保证 Non-Secure 固件无论如何都链接到设备树定义的 code partition 内。

构建 Secure / Non-Secure 应用

构建安全应用需要 Secure 与 Non-Secure 两个镜像配合,流程如下:

  1. 构建 Secure Zephyr 应用:使用-DBOARD=innblue21,并在应用项目的 prj.conf 中设置CONFIG_TRUSTED_EXECUTION_SECURE=y
  2. 构建 Non-Secure Zephyr 应用:使用-DBOARD=innblue21/nrf9160/ns(NS 目标默认即非安全固件);
  3. 合并两个二进制镜像:将 Secure 与 Non-Secure 固件按分区布局合并后烧录。

其中关键约束是:Secure 应用必须预先配置 IDAU(SPU),将 Non-Secure 固件所需的所有 CPU 资源(Flash、SRAM、外设)开放给 Non-Secure 侧访问,并且 SPU 配置必须在跳转到 Non-Secure 应用之前完成。也就是说,Secure 镜像承担着“信任根 + 资源放行”的职责。

Secure 镜像自身也有大小限制——Kconfig.defconfig 中的注释明确说明:当 Secure 固件要与 Non-Secure 镜像合并(TRUSTED_EXECUTION_SECURE=y)时,Secure 固件镜像必须始终被限制在其 code partition 的大小范围内,否则会覆盖 Non-Secure 分区。

构建 Secure-only 应用

如果不需要 Non-Secure 侧(例如仅运行一个受信任的传感器采集程序),则按常规方式构建即可:

west build -b innblue21 samples/hello_world

此时整个应用运行在 Secure 状态,无需考虑分区与镜像合并问题。

烧录(Flashing)

innblue21 的烧录走 Nordic 标准工具链。从 board.cmake 可以看到该板注册了三种 runner:

board_runner_args(jlink "--device=nRF9160_xxAA" "--speed=4000") include(${ZEPHYR_BASE}/boards/common/nrfutil.board.cmake) include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)

即同时支持nrfutilnrfjprogJ-Link三种烧录方式,其中 J-Link 明确指定器件型号为nRF9160_xxAA、调试时钟 4000 kHz。使用前需参照 Nordic 官方 Segger 相关文档安装并配置好 nrfjprog / nrfutil 与 J-Link 软件。

烧录前先打开终端监听串口输出(默认控制台为 UART0,波特率 115200):

minicom -D /dev/ttyACM0 -b 115200

/dev/ttyACM0替换为 innblue21 在系统中的实际串口设备(Linux 下通常形如/dev/ttyACM0)。随后构建并烧录示例应用:

west build -b innblue21 samples/hello_world west flash

west flash会自动选择可用的 runner(优先 nrfutil),完成后即可在 minicom 中看到串口输出。

调试(Debugging)

innblue21 板载 Segger 调试接口,调试方式与 Nordic 其他开发板一致:参照 Segger 相关页面配置 J-Link 调试器与 GDB,即可进行断点调试、寄存器与内存查看。调试会话同样通过west与 J-Link 配合启动(runner 参数中的--speed=4000即针对该板的调试时钟配置),可结合 Secure/Non-Secure 目标分别对两个镜像进行调试。

小结

从本文可以看出,innblue21 在 Zephyr 中是一个完整支持 TrustZone-M 安全模型的双目标开发板:硬件上以 nRF9160 SiP 提供蜂窝连接与丰富传感器资源,软件上通过innblue21(Secure)与innblue21/nrf9160/ns(Non-Secure)两个板级目标,配合CONFIG_TRUSTED_EXECUTION_SECURE/CONFIG_TRUSTED_EXECUTION_NONSECURE与 SPU 分区放行机制,实现安全启动与可信执行环境。对于需要 NB-IoT/LTE-M 连接且对安全敏感的低功耗物联网产品,这套“硬件传感器 + 蜂窝模组 + 双镜像安全架构”的组合可直接作为开发起点,相关配置均可在仓库 boards/innblue/innblue21 目录下对照查阅。

【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/19 4:27:32

LM Studio本地部署实战:GGUF模型加载、量化选择与API调用全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/19 4:25:12

Vue 3 + Leaflet 地图可视化实战:从选型到排坑全指南

做前端的人大概都逃不过“地图可视化”这道坎。我这两年陆陆续续做了五六个带地图的Vue项目,从最早拿高德、百度全家桶硬怼,到后来换成Leaflet,再到现在把整块地图逻辑收进Vue 3的组合式API里,每一步都踩了不少坑。这次就把我最近…

作者头像 李华
网站建设 2026/9/19 4:24:59

CrewAI 调模型 401?TaoToken 这样填 Base URL

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/19 4:22:55

数据库开发技术核心要点:从ER模型到索引与事务优化

简介:一份配套南京大学中国大学MOOC《数据库开发技术》2023年课程的课后章节答案与期末考试题库,面向选课学生、数据库初学者及备考者,可用于考前自测、知识点查漏补缺和重点复盘。题库以选择题形式覆盖索引管理、SQL查询与数据类型、多表查询…

作者头像 李华
网站建设 2026/9/19 4:20:50

tmux 会话、窗口与窗格详解:从心智模型到高效远程开发实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/19 4:20:22

从PFC到ECN:AI训练无损网络的拥塞控制全解

1. 一次训练中断排查:丢包为什么会拖垮整个集群去年秋天我碰到过一次特别棘手的训练中断事故。4千亿参数的多模态模型,256张A100跑分布式训练,loss曲线在关键的第三个epoch突然拉平,然后开始周期性出现NaN。第一反应是代码有bug&a…

作者头像 李华