尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Zephyr RTOS 中的 nRF9160 INNBLUE22 蜂窝 IoT 开发板:硬件、TrustZone-M 安全启动与 Secure/Non-Secure 构建实践

Zephyr RTOS 中的 nRF9160 INNBLUE22 蜂窝 IoT 开发板:硬件、TrustZone-M 安全启动与 Secure/Non-Secure 构建实践 Zephyr RTOS 中的 nRF9160 INNBLUE22 蜂窝 IoT 开发板硬件、TrustZone-M 安全启动与 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本篇文章以 Zephyr RTOS 仓库中 innblue22 开发板文档 为核心系统介绍基于 nRF9160 SiP 的 INNBLUE22 蜂窝 IoT 传感开发板从板载硬件资源、LED/按键引脚映射、传感器外设的设备树配置到 Armv8m 安全扩展下的 Secure/Non-Secure 双镜像构建、合并与烧录全流程。读完本文你将掌握如何在 Zephyr 中为 innblue22 配置工程、使用 nRF Connect SDK 工具链完成 TrustZone-M 双区镜像构建以及如何通过 Segger J-Link 完成烧录与调试。innblue22 开发板概览innblue22 是 InnBlue 推出的一款蜂窝 IoT 传感开发板核心为 Nordic nRF9160 SiPSystem-in-Package支持NB-IoT 与 LTE-M两种蜂窝连接制式。在 Zephyr 中该板卡标识符为innblue22其设备树模型声明为innblue v22 Dev Kit兼容字符串为innblue,innblue22见 innblue22_common.dtsi。板卡在 Zephyr 构建系统中以 Secure 与 Non-Secure 两种形式存在innblue22/nrf9160Secure默认innblue22/nrf9160/nsNon-Secure通过BOARDinnblue22/nrf9160/ns指定这一双形态对应 nRF9160 的 Arm TrustZone-MCortex-M33 Security Attribution Unit能力具体形态映射记录在 board.yml 中。板载硬件资源根据 innblue22 官方文档板载主要器件包括器件型号类型加速度计ST LIS2DH123 轴加速度传感器I2C加密元件Atmel ATECC608a硬件安全认证芯片湿度传感器ST HTS221温湿度传感器I2CQi 无线充电TI BQ51013无线充电接收端电池电量计TI BQ27421电池燃料计I2C在设备树层面上述传感器除 ATECC608a 与 Qi 充电部分外被完整建模在 innblue22_common.dtsi 的i2c2节点下TI BQ27421bq2742155I2C 地址0x55并配置了design-voltage 37003.7 V 设计电压、design-capacity 18001800 mAh 容量、taper-current 45、terminate-voltage 3000等电量计参数ST LIS2DH12lis2dh12-accel19I2C 地址0x19中断引脚接 P0.0 与 P0.1ST HTS221hts2215fI2C 地址0x5f数据就绪引脚drdy接 P0.3ST LPS22HBlps22hb-press5c气压传感器I2C 地址0x5cAMS CCS811ccs8115a空气质量VOC/CO2传感器I2C 地址0x5aBosch BME680bme68076集成温度/湿度/气压/气体四合一传感器I2C 地址0x76。I2C 总线配置为nordic,nrf-twim兼容节点工作于I2C_BITRATE_FAST400 kHz快速模式引脚复用为 SDAP0.25、SCLP0.26并提供 default/sleep 两套 pinctrl 状态以实现低功耗详见 innblue22_common-pinctrl.dtsi。此外板载一颗5V Boost 升压使能控制en_5v0_boost为固定稳压器节点由 P0.21高电平有效控制带 10 ms 启动延时并默认开机使能regulator-boot-on。支持的 Zephyr 功能与 Kconfig 配置Zephyr 板卡元数据声明在 innblue22_nrf9160.yaml 中identifier: innblue22/nrf9160 name: nRF9160-INNBLUE22 type: mcu arch: arm toolchain: - gnuarmemb - zephyr ram: 64 flash: 256 supported: - i2c - pwm - watchdog架构ARMCortex-M33支持工具链gnuarmemb、zephyr片上资源64 KB RAM、256 KB FlashSecure 形态下可见官方声明的受支持外设i2c、pwm、watchdog其余外设虽在设备树中启用但不在官方 supported 清单中Secure 形态的默认 Kconfiginnblue22_nrf9160_defconfig启用了CONFIG_ARM_MPUy # 启用 MPU 内存保护 CONFIG_ARM_TRUSTZONE_My # 启用 Arm TrustZone-M CONFIG_GPIOy # GPIO 驱动 CONFIG_SERIALy # UART 串口驱动 CONFIG_CONSOLEy # 控制台 CONFIG_UART_CONSOLEy # UART 控制台Non-Secure 形态的 innblue22_nrf9160_ns_defconfig 在此基础上额外声明CONFIG_TRUSTED_EXECUTION_NONSECUREy明确该镜像运行在 Non-Secure 世界。板级 Kconfig 逻辑位于 Kconfig.defconfig当选择 Non-Secure 变体BOARD_INNBLUE22_NRF9160_NS时自动启用USE_DT_CODE_PARTITION使链接器严格按设备树中的 Non-Secure code-partition 链接启用蓝牙时自动打开BT_HCI_VSNordic vendor-specific HCI 命令支持启用传感器时自动打开REGULATOR供 5V Boost 等固定稳压器使用。引脚映射与连接LED板载 4 颗 LED全部为低电平有效GPIO_ACTIVE_LOW对应设备树 leds 节点设备树节点别名颜色引脚red_ledled0红P0.7green_ledled1绿P0.6blue_ledled2蓝P0.5mode_ledled3红模式指示P0.4其中前三颗组成 RGB LEDP0.5/P0.6/P0.7 同时被 pwm0 复用PWM_OUT0/1/2nordic,invert反转电平以匹配低有效硬件可用于呼吸灯等 PWM 调光效果P0.4 为独立模式指示 LED同时被 pwm1 的 PWM_OUT0 复用PWM_OUT1 接 P0.9。设备树中提供了rgb-pwm pwm0、mode-pwm pwm1别名方便示例程序直接引用。按键BUTTON1P0.31内部上拉、低电平有效GPIO_PULL_UP | GPIO_ACTIVE_LOW设备树别名sw0并映射输入事件码INPUT_KEY_0buttons 节点可直接配合 Zephyr input 子系统使用。串口UART板卡启用了三路 UART默认控制台为uart0zephyr,console、zephyr,shell-uart、zephyr,uart-mcumgr均指向 uart0波特率 115200外设TXRX用途uart0P0.29P0.30默认控制台/Shell/mcumgruart1P0.14P0.15通用串口uart2P0.18P0.19通用串口三路 UART 均配置了 default/sleep 两套 pinctrl 状态sleep 状态通过low-power-enable降低空闲功耗见 innblue22_common-pinctrl.dtsi。安全组件IDAU/SPU 与 Secure BootnRF9160 采用 Armv8-M 安全扩展架构innblue22 文档中明确了以下安全特性Implementation Defined Attribution UnitIDAUnRF9160 以 System Protection UnitSPU实现 IDAU用于划分 Secure 与 Non-Secure 内存映射。默认情况下全部内存空间Flash、SRAM、外设地址空间被定义为仅 Secure 可访问Secure Boot支持安全启动流程。在 Zephyr 构建层面Secure 镜像通过CONFIG_ARM_MPUy与CONFIG_ARM_TRUSTZONE_My启用 TrustZone-M 支持见 innblue22_nrf9160_defconfig。设备树层面Secure 变体包含nordic/nrf9160_sica.dtsiNon-Secure 变体包含arm/nordic/nrf9160_ns_sica.dtsi两者通过nordic/nrf91xx_partition.dtsi引入默认内存分区表见 innblue22_nrf9160.dts 与 innblue22_nrf9160_ns.dtsSecure 形态zephyr,sram指向sram0、zephyr,code-partition指向slot0_partitionNon-Secure 形态zephyr,sram指向sram0_ns、zephyr,code-partition指向slot0_ns_partition。构建 Secure/Non-Secure 双镜像应用当需要同时运行 Secure 与 Non-Secure 固件时按以下三步执行源自 innblue22 文档 的官方流程构建 Secure Zephyr 应用使用-DBOARDinnblue22并在应用工程配置文件如prj.conf中设置CONFIG_TRUSTED_EXECUTION_SECUREy构建 Non-Secure Zephyr 应用使用-DBOARDinnblue22/nrf9160/nsNon-Secure 变体的 defconfig 已自动置入CONFIG_TRUSTED_EXECUTION_NONSECUREy合并两个固件镜像将两个二进制合并为一个镜像供安全启动流程加载。关键约束务必注意构建 Secure/Non-Secure 双镜像时Secure 应用必须配置 IDAUSPU将 Non-Secure 应用固件所使用到的全部 CPU 资源内存与外设开放为 Non-Secure 可访问SPU 配置必须在跳转到 Non-Secure 应用之前完成若 Secure 固件与 Non-Secure 镜像组合TRUSTED_EXECUTION_SECUREySecure 固件镜像必须严格限制在其代码分区code partition大小之内若 Secure 固件将交由 MCUboot 加载则应链接到设备树定义的 code-partition 中。Non-Secure 固件则无论何种情况都必须链接到设备树定义的 Non-Secure code-partition这一约束由 Kconfig.defconfig 中的USE_DT_CODE_PARTITION自动保证。构建 Secure-only 应用如果不需要 Non-Secure 世界仅构建 Secure 固件则按 Zephyr 标准流程执行west build -b innblue22 应用目录使用默认-DBOARDinnblue22即可。此时固件直接链接到 Flash 起始位置或链接到设备树中定义的 code-partition若计划由 MCUboot 加载。烧录与运行innblue22 支持三种烧录方式声明于 board.cmakeboard_runner_args(jlink --devicenRF9160_xxAA --speed4000) include(${ZEPHYR_BASE}/boards/common/nrfutil.board.cmake) include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)nrfutilNordic 新一代命令行工具nrfutil device 编程器nrfjprog传统 Nordic 命令行烧录工具jlinkSegger J-Link烧录参数指定目标芯片nRF9160_xxAA、接口速度 4000 kHz。准备工作烧录前需安装并配置 Nordic 官方工具链Segger J-Link 软件包、nrfjprog/nrfutil具体步骤可参考 Zephyr 文档中的 Nordic 工具安装指南nordic_segger与nordic_segger_flashing相关章节。设备通过板载调试口接入后在 Linux 下通常识别为/dev/ttyACM0。hello_world 烧录示例先开启终端监听串口输出$ minicom -D tty_device -b 115200将tty_device替换为 nRF9160 innblue22 实际枚举的串口设备Linux 下例如/dev/ttyACM0波特率 115200。然后按标准流程构建并烧录hello_world示例$ west build -b innblue22 samples/hello_world $ west flashwest build负责编译west flash会自动选择nrfutil/nrfjprog/jlink中可用的 runner 完成烧录若使用 Segger J-Link则会带上nRF9160_xxAA与 4000 kHz 参数。烧录完成后应在 minicom 窗口中看到Hello World! innblue22输出。调试innblue22 通过板载 Segger 调试接口进行调试。参考 Zephyr 文档中关于 Nordic 板卡调试的说明nordic_segger相关章节使用以下命令启动调试会话$ west debug如需在 IDE 中调试可先在终端运行west debugserver启动 GDB Server再使用支持 GDB 的 IDE如 VS Code、SEGGER Embedded Studio附加连接。结合本文提到的 TrustZone-M 双镜像构建调试时 Secure 与 Non-Secure 固件需分别加载对应的 ELF并在切换安全状态时留意 SPU/IDAU 的访问权限配置。在应用工程中使用 innblue22 的实践要点获取传感器数据启用CONFIG_LIS2DH12y、CONFIG_HTS221y等传感器 Kconfig 后可通过 Zephyr Sensor API 读取加速度、温湿度、气压与空气质量数据设备树节点见 innblue22_common.dtsi驱动 RGB LED通过别名rgb-pwm引用 pwm0 实现三通道 PWM 调色或通过led0~led3做 GPIO 开关控制蜂窝通信启用CONFIG_MODEMynRF9160 调制解调器驱动与相应的 NB-IoT/LTE-M 网络配置即可基于 Zephyr 网络协议栈开发蜂窝 IoT 应用电量管理通过bq2742155节点使用 Zephyr Fuel Gauge API 读取电池电量配合 Qi 无线充电TI BQ51013实现无接触供电方案。小结innblue22 是 nRF9160 平台上功能完备的蜂窝 IoT 开发板。本文基于 Zephyr 仓库中的 innblue22 文档 与 板级源码完整梳理了板载硬件、引脚映射、TrustZone-M 双镜像构建流程、烧录与调试方法。实践时请牢记构建 Secure/Non-Secure 双镜像时Secure 固件必须在跳转前完成 SPU 对 Non-Secure 资源访问权限的配置且两个固件都必须严格限制在各自的 code-partition 内——这是 nRF9160 安全启动体系下保障系统隔离与可靠运行的关键。【免费下载链接】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),仅供参考
返回列表