Zephyr 中 MAX32657EVKIT 开发板详解:Cortex-M33 + TrustZone 的 Secure / Non-Secure 双模式构建、内存布局与烧录调试
Zephyr 中 MAX32657EVKIT 开发板详解Cortex-M33 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本文基于 Zephyr 仓库中 boards/adi/max32657evkit/doc/index.rst 的官方板级文档展开完整覆盖 MAX32657EVKIT 硬件规格、全部 JP 跳线配置、SecureS与 Non-SecureNS两种固件目标的构建方式、Flash/RAM 分区布局以及如何通过 TF-M 的 CMake 开关和 overlay 文件配置外设与内存的安全归属。读完本文你可以独立完成该板卡的编译west build、烧录west flash包括tfm_merged.hex合并镜像与调试并理解 Zephyr 设备树中分区定义与 TF-M 侧定义必须保持一致这一关键约束。1. 板卡概述与硬件特性MAX32657 是一款面向低功耗无线应用的高级 SoCZephyr 已为其完成移植The Zephyr port is running on the MAX32657 MCU。核心硬件能力如下CPUArm Cortex-M33带 TrustZone® 技术可划分 Secure/Non-Secure 世界与带 DSP 指令的单精度 FPU存储1MB 内部 Flash带 ECC、256KB 内部 SRAM、8KB Cache时钟50MHz 低功耗内部振荡器INRO、外部晶振支持BLE 需要 32MHz 晶振、32.768kHz RTC 外部晶振电源集成 Boost DC-DC 转换器输入范围 1.2V1.6V典型功耗 ACTIVE 模式下运行 Coremark50MHz约 50μA/MHznano-power 睡眠模式可显著延长电池寿命无线Bluetooth 5.4 LE 射频支持 Mesh、长距离编码模式125kbps / 500kbps、高速模式2Mbps与 LE Audio兼容 802.15.4Rx 灵敏度 -96dBmTx 功率 4.5dBm1.5Vin 下 15mW 0dBm单端 50Ω 天线接口安全加密工具箱 CTB包含 TRNG、AES-128/192/256 硬件引擎、Unique ID以及 Secure Boot ROM外设2 个 DMA 控制器Secure 与非 Secure 各一、1 个 SPI、1 个 I2C/I3C、1 个低功耗 UARTLPUART、6 个带 PWM 的 32 位低功耗定时器、14 个可编程 GPIO内部上下拉所有外设均支持 DMA 驱动的内存搬运工作环境温度-20 °C 85 °C已做温度资格认证。Zephyr 官方文档中的板卡照片位于 max32657evkit.webp可用于确认板型与跳线排针位置。2. 支持的硬件特性supported features板级特性清单由机器可读的 yaml 文件定义构建系统与文档生成器都会消费这些字段Secure 目标max32657evkit/max32657见 max32657evkit_max32657.yamlsupported: serial、gpio、trng、watchdog、hwinfo、dma、counter、pwm、rtc_counter、spi、i3cram: 256KB、flash: 960KB工具链支持zephyr与gnuarmemb。Non-Secure 目标max32657evkit/max32657/ns见 max32657evkit_max32657_ns.yamlsupported与 Secure 版本基本一致但不含 trng/hwinfo这些资源归属 Secure 世界ram: 192KB、flash: 576KB——这正是 NS 侧可用的分区大小与下文内存布局表严格对应。文档中的.. zephyr:board-supported-hw::指令即在网页版文档中自动渲染出上表。3. 连接与跳线配置Connections and IOsMAX32657EVKIT 上大量电源、外设与调试功能通过 JP 跳线组切换。完整配置表继承自官方文档逐条说明如下3.1 电源相关跳线跳线名称设置作用JP1VLDO SEL1-2按电阻 R4 的阻值决定系统供电 LDO 输出3-4LDO 系统供电输出固定为 1.2V5-6LDO 系统供电输出固定为 1.5VOpenLDO 系统供电输出固定为 1.6VJP2VIN SEL1-2VIN 由 LDO 供电USB Type-C 连接器作为板卡电源2-3VIN 由电池供电JP3VIN EN1-2将板卡电源通过 VIN 连接到 VSYS_INOpen断开 VIN 与 VSYS_IN切断系统电源JP4VDD12 EN1-2通过 VDD12→VSYS_OUT 将系统电源接到 MAX32657Open断开 VDD12 与 VSYS_OUTMCU 断电JP5VTREF EN1-2将参考电压连接到 OBD 电路Open断开参考电压与 OBD 电路JP6OBD VBUS EN1-2通过 OBD_VBUS→VBUS 使能 OBDOn-Board DebuggerOpen禁用 OBDJ7VSYS EN1-2通过 VSYS→VSYS_OUT 将系统电源送到所有外设Open断开所有外设供电JP14AFE EN1-2通过连接 VSYS 使能 AFEVBATOpen通过断开 VSYS 禁用 AFE3.2 加速度计ADXL367相关跳线跳线名称设置作用JP7ACC VS EN1-2 / Open使能/禁用加速度计供电引脚 VS 与 VSYS 的连接JP8ACC VDD EN1-2 / Open使能/禁用加速度计 VDDIO 与 VSYS 的连接JP9ACC I2C EN1-2 / Open连接/断开加速度计 SDA 与 MAX32657 I2C0_SDAJP10ACC I2C EN1-2 / Open连接/断开加速度计 SCL 与 MAX32657 I2C0_SCLJP16I2C PU EN1-2 / Open使能/禁用 SCL 上拉电阻JP17I2C PU EN1-2 / Open使能/禁用 SDA 上拉电阻3.3 磁开关 / AFE SPI 相关跳线跳线名称设置作用JP11BYP MAG SW1-2 / Open旁路磁开关 / 使能磁开关输出由 AFE 引脚控制JP12LOCK RSTN1-2 / OpenAFE Lock 引脚连接/断开 MAX32657 RSTNJP13LATCH CTRL1-2 / 2-3将 AFE (LOCK) 或 AFE (WAKE) 连接到磁开关的 OUTPUT LATCH CONTROLJP15AFE SPI EN1-2AFE CSB → MAX32657 SPI0_CS03-4AFE SDI → SPI0_MOSI5-6AFE SCLK → SPI0_SCK7-8AFE SDO → SPI0_MISO9-10AFE INTB → MAX32657 P0.711-12AFE GPIO2 → MAX32657 P0.8Open All完全断开 SPI 接口3.4 调试相关跳线跳线名称设置作用JP18OBD SWD EN3-4 / 5-6将 OBD SWDIO/SWCLK 连接到 MAX32657 SWDIO/SWCLK7-8 / 9-10 / 13-14OBD JTAG TDO/TDI/TRST 跳线MAX32657 不使用11-12OBD RSTN 连接到 MAX32657 RSTNOpen All禁用 OBD 到 MAX32657 的 SWD 连接JP19OBD VCOM EN3-4 / 5-6OBD VCOM TXD/RXD 连接到对应 VCOM EN RX/TX 跳线7-8 / 9-10OBD VCOM CTS/RTS 跳线MAX32657 不使用Open禁用 OBD VCOM 连接JP20VCOM EN1-2 / Open将 OBD VCOM RXD 连接/断开到 MAX32657 UART0A_TXJP21VCOM EN1-2 / Open将 OBD VCOM TXD 连接/断开到 MAX32657 UART0A_RXJP22EXT SWD EN1-2 / Open外部 SWD 连接器数据线连接/断开 MAX32657 SWDIOJP23EXT SWD EN1-2 / Open外部 SWD 连接器时钟线连接/断开 MAX32657 SWDCLK4. Zephyr 板级目标BOARD optionsMAX32657 的 Cortex-M33 支持 TrustZoneZephyr 据此提供两个板级目标BOARD说明max32657evkit/max32657构建 TrustZone 禁用的纯 Secure固件max32657evkit/max32657/ns使用 TF-M 构建同时产出 NS S 两个镜像板级目标在 board.yml 中声明socs下的max32657带有一个名为ns的变体Kconfig.max32657evkit 中BOARD_MAX32657EVKIT会在选中任一目标时select SOC_MAX32657。4.1 BOARD: max32657evkit/max32657Secure 固件TF-M 关闭构建该目标将生成Secure 固件960KB Flash 用于代码slot064KB 用于 storage 持久存储段。此模式下 TF-M 关闭、Secure 标志打开即CONFIG_TRUSTED_EXECUTION_SECUREyCONFIG_BUILD_WITH_TFMn这与 max32657evkit_max32657_defconfig 中的默认配置一致其中明确注释 It is secure fw, enable flags 并设置CONFIG_TRUSTED_EXECUTION_SECUREy。对应 Flash 布局名称地址[大小]说明slot00x1000000[960k]Secure Zephyr 镜像storage0x10f0000[64k]文件系统 / 持久存储使用blinky示例构建west build -b max32657evkit/max32657 samples/basic/blinky在设备树层面可以验证这一布局max32657evkit_max32657.dts 将zephyr,sram指向 256KB 的secure_ram0x30000000TrustZone 下 Secure 侧的别名地址zephyr,code-partition指向slot0_partitionreg 0x0960KB并在flash0下定义了 0xf0000 起始的 64KBstorage_partition。该目标还启用了trng与dma1Secure 侧 DMA 控制器UART0 的 TX/RX 分别使用 dma1 的 slot 1/slot 0。4.2 BOARD: max32657evkit/max32657/nsTF-M Zephyr 双镜像max32657evkit/max32657/ns目标用于使用 TF-M 构建Secure 固件CONFIG_BUILD_WITH_TFMy使用 Zephyr 构建Non-Secure 固件CONFIG_TRUSTED_EXECUTION_NONSECUREy见 max32657evkit_max32657_ns_defconfig。使用blinky示例构建west build -b max32657evkit/max32657/ns samples/basic/blinky该命令会构建 bootloader 镜像MCUboot构建 TF-MSecure固件镜像将 Zephyr 应用构建为 Non-Secure 固件镜像将三者合并为tfm_merged.hex。注意NS 目标还会在 defconfig 中设置签名方式CONFIG_TFM_MCUBOOT_SIGNATURE_TYPERSA-3072与 TF-M/MCUboot 的签名密钥配套。TF-M profile 说明Zephyr 以CONFIG_TFM_PROFILE_TYPE_NOT_SET模式构建 TF-M满足大多数用例尤其是 BLE 相关应用的配置需求如果你的应用内存预算更紧可将CONFIG_TFM_PROFILE_TYPE_SMALLy切换到 small profile以降低 TF-M 的 RAM 与 Flash 占用。4.3 内存映射Memory mappingsMAX32657 的 1MB Flash 与 256KB RAM 被划分给 MCUboot、TF-MS、ZephyrNS以及用于安全服务与配置的 storage 段。/ns目标默认布局如下Flash名称地址[大小]说明boot0x1000000[64K]MCU Bootloaderslot00x1010000[320k]Secure 镜像 slot0TF-Mslot0_ns0x1060000[576k]Non-secure 镜像 slot0Zephyrslot10x10F0000[0k]slot0 的更新槽位slot1_ns0x10F0000[0k]slot0_ns 的更新槽位storage0x10f0000[64k]持久存储RAM名称地址[大小]说明secure_ram0x20000000[64k]Secure 内存non_secure_ram0x20010000[192k]Non-Secure 内存设备树层面的对应定义在 max32657evkit_max32657_ns.dtsreserved-memory中secure_ram位于 0x2000000064KB、non_secure_ram位于 0x20010000192KBflash0分区依次为boot_partition64KBlabel mcuboot、slot0_partition0x10000320KB、slot0_ns_partition0x60000576KB、tfm_storage_partition0xf000064KBlabel tfm-storage。NS 目标选用non_secure_ram作为zephyr,sram、slot0_ns_partition作为zephyr,code-partitionUART0 的 DMA 使用非 Secure 侧的dma0slot 1/0。Flash 布局必须双侧一致布局既定义在 Zephyr 板级设备树max32657evkit_max32657_common.dtsi 所在板级目录的 dts 文件的 flash 段中也定义在 TF-M 工程的trusted-firmware-m/platform/ext/target/adi/max32657/partition/flash_layout.h中两者必须保持一致。若要为应用调整 Flash 区域需同步修改这两处。此外固件更新OTA功能需要 slot1 与 slot1_ns 分区默认二者大小设为 0/ns的 dts 中相关分区以注释形式保留因为默认配置不开启固件更新。5. 外设与内存所有权Peripherals and Memory OwnershipARM Security Extensions 允许开发者将硬件与软件资源切分为 Secure 世界安全子系统与 Normal 世界其余部分。正确的系统设计确保 Normal 世界无法访问 Secure 世界的资产把敏感资源放入 Secure 世界并运行强健的软件来抵御各类软件攻击官方文档引用了 Arm 文档 DN100935《The TrustZone hardware architecture》作为参考。在 MAX32657 上MPCMemory Protection Controller与PPCPeripheral Protection Controller分别负责保护内存与外设。所有默认所有权定义在 TF-M 工程的trusted-firmware-m/platform/ext/target/adi/max32657/s_ns_access.cmake中通过一组 CMake 布尔开关ON/OFF控制某外设/内存块是否对 Non-Secure 世界开放。官方文档给出了完整的默认配置示例ON 表示 NS 可访问set(ADI_NS_PRPH_GCR ON CACHE BOOL ) set(ADI_NS_PRPH_SIR ON CACHE BOOL ) set(ADI_NS_PRPH_FCR ON CACHE BOOL ) set(ADI_NS_PRPH_WDT ON CACHE BOOL ) set(ADI_NS_PRPH_AES OFF CACHE BOOL ) set(ADI_NS_PRPH_AESKEY OFF CACHE BOOL ) set(ADI_NS_PRPH_CRC ON CACHE BOOL ) set(ADI_NS_PRPH_GPIO0 ON CACHE BOOL ) set(ADI_NS_PRPH_TIMER0 ON CACHE BOOL ) set(ADI_NS_PRPH_TIMER1 ON CACHE BOOL ) set(ADI_NS_PRPH_TIMER2 ON CACHE BOOL ) set(ADI_NS_PRPH_TIMER3 ON CACHE BOOL ) set(ADI_NS_PRPH_TIMER4 ON CACHE BOOL ) set(ADI_NS_PRPH_TIMER5 ON CACHE BOOL ) set(ADI_NS_PRPH_I3C ON CACHE BOOL ) set(ADI_NS_PRPH_UART ON CACHE BOOL ) set(ADI_NS_PRPH_SPI ON CACHE BOOL ) set(ADI_NS_PRPH_TRNG OFF CACHE BOOL ) set(ADI_NS_PRPH_BTLE_DBB ON CACHE BOOL ) set(ADI_NS_PRPH_BTLE_RFFE ON CACHE BOOL ) set(ADI_NS_PRPH_RSTZ ON CACHE BOOL ) set(ADI_NS_PRPH_BOOST ON CACHE BOOL ) set(ADI_NS_PRPH_BBSIR ON CACHE BOOL ) set(ADI_NS_PRPH_BBFCR ON CACHE BOOL ) set(ADI_NS_PRPH_RTC ON CACHE BOOL ) set(ADI_NS_PRPH_WUT0 ON CACHE BOOL ) set(ADI_NS_PRPH_WUT1 ON CACHE BOOL ) set(ADI_NS_PRPH_PWR ON CACHE BOOL ) set(ADI_NS_PRPH_MCR ON CACHE BOOL ) # SRAMs set(ADI_NS_SRAM_0 OFF CACHE BOOL Size: 32KB) set(ADI_NS_SRAM_1 OFF CACHE BOOL Size: 32KB) set(ADI_NS_SRAM_2 ON CACHE BOOL Size: 64KB) set(ADI_NS_SRAM_3 ON CACHE BOOL Size: 64KB) set(ADI_NS_SRAM_4 ON CACHE BOOL Size: 64KB) # Ramfuncs section size set(ADI_S_RAM_CODE_SIZE 0x800 CACHE STRING Default: 2KB) # Flash: BL2, TFM and Zephyr are contiguous sections. set(ADI_FLASH_AREA_BL2_SIZE 0x10000 CACHE STRING Default: 64KB) set(ADI_FLASH_S_PARTITION_SIZE 0x50000 CACHE STRING Default: 320KB) set(ADI_FLASH_NS_PARTITION_SIZE 0x90000 CACHE STRING Default: 576KB) set(ADI_FLASH_PS_AREA_SIZE 0x4000 CACHE STRING Default: 16KB) set(ADI_FLASH_ITS_AREA_SIZE 0x4000 CACHE STRING Default: 16KB)可以看到默认策略AES、AESKEY、TRNG 以及 SRAM_0/SRAM_1 只归 Secure 世界OFF其余外设与 SRAM_2~4 对 NS 开放Flash 侧 BL264KB、S 分区320KB、NS 分区576KB与上文内存映射表完全吻合。推荐的 overlay 方式不改动 TF-M 源码s_ns_access.cmake末尾有如下逻辑——# # Allow user set S-NS resources ownership by overlay file # if(EXISTS ${CMAKE_BINARY_DIR}/../../s_ns_access_overlay.cmake) include(${CMAKE_BINARY_DIR}/../../s_ns_access_overlay.cmake) endif()因此官方推荐做法是在你的项目根目录下创建s_ns_access_overlay.cmake只写入需要覆盖的条目例如让 TRNG、SRAM_0、SRAM_1 仅 Secure 世界可访问set(ADI_NS_PRPH_TRNG OFF CACHE BOOL ) set(ADI_NS_SRAM_0 OFF CACHE BOOL Size: 32KB) set(ADI_NS_SRAM_1 OFF CACHE BOOL Size: 32KB)这样无需修改 TF-M 源码即可获得自定义的 S/NS 资源所有权划分升级 TF-M 时也更易维护。6. 编程与调试Programming and Debugging文档中的.. zephyr:board-supported-runners::指令渲染出支持的调试器列表从 board.cmake 看该板支持J-Linkboard_runner_args(jlink --deviceMAX32657 --reset-after-load)与OpenOCDinclude 了boards/common/openocd-adi-max32.boards.cmake与通用openocd.board.cmake默认使用 J-Link 主机工具。6.1 烧录Flashing以hello_world应用为例Secure 目标west build -b max32657evkit/max32657 samples/hello_world west flash打开串口终端按下板上的 RESET 按钮复位应看到***** Booting Zephyr OS build v4.1.0 ***** Hello World! max32657evkit/max326576.2 烧录 TrustZone 双世界镜像/ns 目标/ns目标的产物tfm_merged.hex需要手动用 J-Link 烧录board.cmake中通过set_property(TARGET runners_yaml_props_target PROPERTY hex_file tfm_merged.hex)已为该目标配置好默认 hex 文件普通west flash也会选到它官方文档给出的显式方式为west build -b max32657evkit/max32657/ns samples/hello_world west flash --hex-file build/zephyr/tfm_merged.hex文档注明 reset and erase are for recovering a locked core即核被锁死时可用 reset/erase 恢复。烧录成功后的串口输出示例[INF] Starting bootloader [WRN] This device was provisioned with dummy keys. This device is NOT SECURE [INF] PSA Crypto init done, sig_type: RSA-3072 [WRN] Cannot upgrade: slots have non-compatible sectors [WRN] Cannot upgrade: slots have non-compatible sectors [INF] Bootloader chainload address offset: 0x10000 [INF] Jumping to the first image slot ***** Booting Zephyr OS build v4.1.0 ***** Hello World! max32657evkit/max32657/ns输出中的信息对应启动链MCUboot 启动 → 校验镜像签名默认 dummy keys故提示 NOT SECURE→ slots have non-compatible sectors 对应 slot1/slot1_ns 大小为 0未启用固件更新→ 从 0x10000 偏移 chainload 到第一个镜像槽位 → 依次经过 TF-MS进入 ZephyrNS。6.3 调试Debugging同样以hello_world为例使用默认的 J-Link 主机工具west build -b max32657evkit/max32657 samples/hello_world west debug在调试器中逐步执行串口侧应看到***** Booting Zephyr OS build v4.1.0 ***** Hello World! max32657evkit/max326577. 板级设备树要点小结boards/adi/max32657evkit/max32657evkit_max32657_common.dtsi 是两个目标共用的板级定义值得注意的配置包括控制台/Shell 均使用uart0系统计时器伴生计数器为counter_wut1WUT1低功耗唤醒定时器时钟clk_inro内部低速振荡、clk_ipo内部快速振荡使能clk_32k以clk_inro为时钟源无 32.768kHz 晶振场景下的 RTC 计数时钟spi0引脚MOSI→P0.2、MISO→P0.4、SCK→P0.6、CS0→P0.3i3c0I2C/I3C 复用SCL→P0.0、SDA→P0.1I2C 模式 200kHz、I3C 模式 800kHz、开漏 SCL 400kHz其上挂载 ADXL367 三轴加速度计compatibleadi,adxl3677 位地址 0x53并有别名accel0 adxl367LED1绿色在 P0.13按键 SW2PB1在 P0.12上拉、低有效别名led0、sw0便于示例复用看门狗wdt0使能别名watchdog0。两个目标各自的 dts 差异主要体现在 SRAM/Flash 分区与 DMA 控制器选择Secure 目标用dma1trng 256KB secure_ramNS 目标用dma0 192KB non_secure_ram MCUboot/TF-M 多分区。8. 适用前提与注意事项本文所有构建命令默认已准备好 Zephyr 工具链zephyr或gnuarmemb二者在板级 yaml 中均声明支持与 west 工作区/ns目标依赖 TF-M、MCUboot 等模块west build会自动经由 sysbuild 拉取并构建修改 Flash 分区时必须同步 Zephyr 板级设备树与 TF-M 的flash_layout.h否则启动校验会失败或镜像加载到错误地址调整外设/内存 S/NS 归属时优先使用项目根目录的s_ns_access_overlay.cmake方式避免直接改动 TF-M 源码串口默认波特率 1152008N1见 common.dtsi 中current-speed调试/烧录前请确认 JP19JP23 等 VCOM/SWD 跳线处于文档默认连接状态。相关仓库路径速查板级文档 boards/adi/max32657evkit/doc/index.rst、板级描述 board.yml、目标特性 max32657evkit_max32657.yaml 与 max32657evkit_max32657_ns.yaml、Secure 目标设备树 max32657evkit_max32657.dts 与 NS 目标设备树 max32657evkit_max32657_ns.dts、共用定义 max32657evkit_max32657_common.dtsi、调试器配置 board.cmake、默认配置 max32657evkit_max32657_defconfig 与 max32657evkit_max32657_ns_defconfig。【免费下载链接】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),仅供参考