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

资讯详情

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

Zephyr 在 NXP i.MX952 EVK 上的移植与启动实战指南:A55/M7 双集群编程调试全解析

Zephyr 在 NXP i.MX952 EVK 上的移植与启动实战指南:A55/M7 双集群编程调试全解析 Zephyr 在 NXP i.MX952 EVK 上的移植与启动实战指南A55/M7 双集群编程调试全解析【免费下载链接】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 官方仓库中 boards/nxp/imx952_evk/doc/index.rst 为核心完整梳理 NXP i.MX952 EVK 评估板的硬件资源、Zephyr 板级支持现状以及如何在 Cortex-A55 与 Cortex-M7 两个不同核心集群上构建、烧录、启动与调试 Zephyr 应用的完整流程。读完本文你将掌握 J-Link 下载、U-Boot 引导、SPSDK 制作flash.bin容器镜像等三套独立可用的 A55/M7 开发路径并能根据 TCM 与 DDR 两种 M7 板级变体的差异正确选择目标。i.MX952 EVK 硬件概览i.MX952 EVK 是一块面向 i.MX 952 汽车级应用处理器的入门级评估板旨在以较低成本展示该处理器最常用的功能特性帮助开发者在投入资源进行更具体的定制设计之前熟悉这颗芯片。板载的 i.MX952 器件采用紧凑的 19 x 19 mm / 15 x 15 mm 封装。核心处理器i.MX 952 汽车级应用处理器集成最多四个 Arm Cortex-A55 核心同时内置 Arm Cortex-M33 与 Cortex-M7 核心以支持功能安全functional safety应用。存储与内存DRAM128-Gbit LPDDR5eMMC64 GB Micron eMMCSPI NOR Flash1 Gbit 八线octalFlash接口与外设类别详细说明USB两个 USB 口Type-A 与 Type-C音频一颗 WM8962BECSN/R 编解码器1 TX 1 RX 通道一个 3.5 mm 4 极 CTIA 标准音频插孔一个 4 针喇叭连接器以太网ENET2 控制器连接 60 针以太网连接器支持可配置为 100 Mbit/s 或 1000 Mbit/s 的 PHY 子卡ENET1 控制器通过外部 PHY RTL8211 支持 100/1000 Mbit/s RGMII 以太网带一个 RJ45 连接器10 Gbit 以太网控制器通过外部 PHY Marvell AQR113C 支持 XFI 与 USXGMII 接口带一个 10 Gbit RJ45 ICM无线M.2 接口一个基于 NXP AW693 芯片的 Murata Type-2EL Wi-Fi/蓝牙模块支持 2x2 Wi-Fi 6 与蓝牙 5.2摄像头/显示MIPI CSI36 针 miniSAS 连接器x4 lane 配置MIPI CSIDSI36 针 miniSAS 连接器x4 lane 配置两个 LVDS mini-SAS 连接器各 x4-lane 配置其他两个 4 针 CAN 接头一个 4-bit SD3.0 microSD 卡接口I2C1~I2C7 控制器FT4232H I2C 接口PCT2075 温度传感器与电流监控器件DMIC 接口两个数字麦克风单比特 PDM 输出两个 4 通道 ADC 接头扩展音频板接口支持 PCIe x4 插槽Quantum board 连接与 PCIe x8 插槽Audio I/O board 连接调试一个 USB-to-UART/MPSSE 器件 FT4232H一个 USB 2.0 Type-C 连接器J31为 FT4232H 提供四路串口系统时钟与串口配置根据板级文档该板配置的 A55 系统时钟频率为 24 MHzCortex-A55 核心最高可运行至 1.7 GHzCortex-M7 核心最高运行在 800 MHzSYSTICK 与核心同频运行。串口方面板级配置使用单路串行通信通道Cortex-A55 使用 CPU 的 UART1Cortex-M7 使用 UART3。这一点可以在 A55 的 imx952_evk_mimx9529_a55.dts 中得到印证——chosen节点将zephyr,console与zephyr,shell-uart都指向lpuart1其current-speed 115200即默认 115200 波特率。板级支持的软件形态在仓库中imx952_evk 板定义于 boards/nxp/imx952_evk共提供 4 个 board variant可通过board.yml确认VariantCPU 集群说明imx952_evk/mimx9529/a55a55单核 A55core0imx952_evk/mimx9529/a55/smpa55A55 多核 SMP最多 4 核imx952_evk/mimx9529/m7m7M7 使用 TCM 内存imx952_evk/mimx9529/m7/ddrm7M7 使用 DDR 内存在 Kconfig.imx952_evk 中M7 系列 variant 会select SOC_MIMX9529_M7A55 系列 variant 会select SOC_MIMX9529_A55并统一select SOC_PART_NUMBER_MIMX9529xxVZx选定器件型号。A55 单核 defconfig 要点imx952_evk_mimx9529_a55_defconfig 展示了 A55 配置的核心选项CONFIG_AARCH64_IMAGE_HEADERy生成 AArch64 镜像头CONFIG_ARMV8_A_NSy运行在非安全态CONFIG_MAX_XLAT_TABLES24MMU 转换表数量CONFIG_CACHE_MANAGEMENTy、CONFIG_DCACHE_LINE_SIZE_DETECTy、CONFIG_ICACHE_LINE_SIZE_DETECTy缓存管理及行大小自动探测CONFIG_XIPn从 RAMDDR运行而非 XIPCONFIG_SERIALy、CONFIG_UART_INTERRUPT_DRIVENy、CONFIG_CONSOLEy、CONFIG_UART_CONSOLEy串口与控制台CONFIG_CLOCK_CONTROLy、CONFIG_MBOXy、CONFIG_ARM_SCMIy时钟、信箱与 SCMI 协议支持。A55 SMP variantimx952_evk_mimx9529_a55_smp_defconfig额外启用了CONFIG_SMPy、CONFIG_MP_MAX_NUM_CPUS4与CONFIG_PM_CPU_OPSy对应最多 4 个 A55 核心的对称多处理与 CPU 电源管理操作。M7 defconfig 要点M7 的 TCM variantimx952_evk_mimx9529_m7_defconfig与 DDR variantimx952_evk_mimx9529_m7_ddr_defconfig的核心差异是TCM variant 使用CONFIG_XIPy代码从 ITCM 就地执行DDR variant 使用CONFIG_XIPn镜像加载到 DDR 运行。两者都启用了时钟控制、串口控制台以及CONFIG_MBOXy、CONFIG_MBOX_INIT_PRIORITY0、CONFIG_ARM_SCMIy、CONFIG_ARM_SCMI_NXP_VENDOR_EXTENSIONSy——M7 通过 SCMI 与运行在 M33 上的 System Manager 通信因此还启用了 NXP 厂商扩展。初始化优先级调整在 Kconfig.defconfig 中A55 平台将 GIC、MBOX、SCMI 共享内存与传输、时钟控制等驱动的初始化优先级统一设为 31。注释说明GIC ITS 依赖初始化优先级为 30 的内核堆因此 GIC 设为 31而 mailbox 与 SCMI 会按 dts 依赖顺序在相同优先级下依次初始化。该文件还针对板载 CAN 收发器、I2C 多路复用器等外设设置了依赖顺序例如 CAN PHY 必须在 board mux 之后初始化GPIO_PCA_SERIES_INIT_PRIORITY为 62、CAN_TRANSCEIVER_INIT_PRIORITY为 65、I2C TCA954X 根/通道分别为 60/61。A55 设备树中的关键节点A55 单核设备树 imx952_evk_mimx9529_a55.dts 中值得注意的实现细节dram: memoryd0000000DDR 起始地址0xd0000000大小 10 MB与 U-Boot 引导文档中的加载地址0xd0000000完全对应默认禁用cpu0、cpu100、cpu200仅保留 core0 供单核运行lpuart1使能并配置 115200 波特率lpi2c4上挂载pcal640821GPIO 扩展器flexcan2连接nxp,tja1463CAN 收发器max-bitrate 8000000chosen中将zephyr,canbus指向flexcan2。在 A55 上编程与调试 ZephyrA55 上有多种加载 Zephyr 的方式下面逐一展开。方式一使用 J-Link Runner默认imx952_evk/mimx9529/a55的默认 runner 是 J-Link。在 board.cmake 中可以确认if(CONFIG_SOC_MIMX9529_A55) board_runner_args(jlink --deviceIMX952_A55 --no-reset --flash-sram) include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) endif()操作步骤如下将 EVK 板的 JTAG 连接器用 J-Link 调试器连接到主机将 SW9[2] 拨到 On将 JTAG_UART5_SEL 置为高电平用 bcu 工具将 FTA_SEL 置为高电平例如sudo bcu set_gpio ft_fta_sel 1 -boardimx952evk19 -id1-1.4.1-id需要通过bcu lsftdi查询实际 ID 后替换给板上电并在 U-Boot 命令行处停住执行west flash或west debug从主机加载zephyr.bin并在 A55 core0 上启动 Zephyr。Flash 并运行以hello_world示例为例Unix 主机west build -b imx952_evk/mimx9529/a55 -p samples/hello_world west flash启动后可在 UART1 控制台上看到*** Booting Zephyr OS build v4.4.0-4173-g6d6cc2de7574 *** Hello World! imx952_evk/mimx9529/a55Debug同样以hello_world为例west build -b imx952_evk/mimx9529/a55 -p samples/hello_world west debugwest debug会启动 J-Link 调试会话如 GDB便于打断点、单步与查看寄存器。方式二使用 U-Boot 命令引导U-Boot 的go命令可在 A55 core0 上启动 Zephyrcpu命令则用于把 Zephyr 加载并踢到其他 A55 次核secondary cores。当前cpu命令由 Real-Time Edge U-Boot 支持使用uboot_vxxxx.xx-y.y.y分支其中xxxx.xx是 U-Boot 版本、y.y.y是 Real-Time Edge Software 版本例如uboot_v2023.04-2.9.0对应 Real-Time Edge Software v2.9.0 中使用的 U-Boot v2023.04预编译镜像与用户指南见 Real-Time Edge Software 发布物原文档提供的外部链接此处不展开。第一步把 Zephyr 镜像下载到 DDR可以通过 tftp 直接下载tftp 0xd0000000 zephyr.bin也可以把zephyr.bin拷到 SD 卡后插到板上。若放在 SD 卡的 FAT 分区用如下命令加载到 DDR假设 SD 卡为 dev 1、FAT 分区 ID 为 1可按实际环境调整fatload mmc 1:1 0xd0000000 zephyr.bin;第二步启动 Zephyr构建目标注意原文档此处以samples/hello_world/为例描述为运行基础 Zephyr 应用与内核测试的通用配置west build -b imx952_evk/mimx9529/a55 -p samples/hello_world构建产物为zephyr.bin。然后在 U-Boot 中于 core0 上启动dcache off; icache flush; go 0xd0000000;或使用cpu命令从次核启动例如 Core1dcache flush; icache flush; cpu 1 release 0xd0000000预期控制台输出*** Booting Zephyr OS build v4.4.0-4173-g6d6cc2de7574 *** Hello World! imx952_evk/mimx9529/a55注意go与cpu命令在 dcache/icache 处理上的差异go前建议dcache off而cpu release前使用dcache flush因为多核场景下需要先冲刷缓存保证镜像对次核可见。在 M7 上编程与调试 Zephyri.MX System Manager 与 SCMI 架构i.MX952 使用 i.MX System ManagerSM——一个运行在 Cortex-M33 处理器上的应用。Cortex-M33 是启动核心运行 boot ROM加载 SM及其他启动代码后跳转到 SMSM 随后配置硬件如隔离机制再启动系统中的其他核心。启动这些核心后SM 进入服务模式通过基于 ARM System Control and Management InterfaceSCMI的客户端 RPC API 提供时钟、电源、传感器与引脚控制访问。这也解释了为何 A55/M7 defconfig 中均包含CONFIG_ARM_SCMIy且 M7 还启用CONFIG_ARM_SCMI_NXP_VENDOR_EXTENSIONSy。板级初始化代码 board.c 的注释也明确指出由于平台使用 ARM SCMIscmi、mbox 等驱动在PRE_KERNEL_1阶段初始化因此板级 init 放在PRE_KERNEL_2SYS_INIT(board_init, PRE_KERNEL_2, 10)。制作 flash.bin 容器镜像要给 M7 编程必须制作 i.MX 容器镜像flash.bin其中包含多个必需元素ELEV2X 固件、System Manager、TCM OEI、Cortex-M7 镜像等。使用 SPSDK runner 构建flash.bin前需要先获取二进制 blobwest update west blobs fetch hal_nxp建议在west update之后执行上述命令。构建与烧录flash.bin有两种路径路径 1若板级 variant 不提供CONFIG_BOARD_NXP_SPSDK_IMAGE则制作flash.bin与烧录的步骤应参考 i.MX952 MCUX SDK release 中的Getting Started with MCUXpresso SDK for IMX952LPD5EVK-19.pdf。对于 DDR variant应使用包含ddr关键字的 Makefile 目标参考其中 4.2 Run an example application只需把zephyr.bin改名为m7_image.bin即可制作 flash.bin 并烧录到 SD/eMMC。路径 2若板级 variant 提供且启用了CONFIG_BOARD_NXP_SPSDK_IMAGE则flash.bin会自动构建。烧录前需将 SW7[1:4] 配置为0b1001进入 USB 下载模式将 USB1 与 DBG 口连接到 PC枚举出 4 个串口115200 8n1使用第一个串口给 M7第四个串口给 M33 System Manager。flasher 为 spsdk已通过scripts/requirements.txt安装。Linux 主机上还需按 SPSDK 安装指南配置 USB 设备权限。常用烧录命令# 加载并运行但不写入下次烧录前需在第四个串口执行 reset $ west flash # 烧录到 SD 卡然后设置 SW7[1:4]0b1011 重启 $ west flash --bootdevice sd # 烧录到 eMMC然后设置 SW7[1:4]0b1010 重启 $ west flash --bootdeviceemmc两个 M7 板级变体TCM 与 DDRZephyr 支持两个基于 M7 的 i.MX952 板级变体imx952_evk/mimx9529/m7与imx952_evk/mimx9529/m7/ddr。二者的主要区别在于使用的内存imx952_evk/mimx9529/m7使用 TCMITCM 存放代码及通常的只读数据DTCM 存放读写数据对应 defconfig 中CONFIG_XIPyimx952_evk/mimx9529/m7/ddr使用 DDR对应 defconfig 中CONFIG_XIPn。imx952_evk_mimx9529_m7.yaml中记录的 ram/flash 容量为 256 KB/256 KBsupported 外设包括 adc、dma、gpio、uart且 testing binaries 指明flash.bin。分别构建hello_worldwest build -b imx952_evk/mimx9529/m7 -p samples/hello_worldwest build -b imx952_evk/mimx9529/m7/ddr -p samples/hello_world制作好flash.bin并烧录到 SD/eMMC 后打开串口终端并复位板子。对于imx952_evk/mimx9529/m7预期输出*** Booting Zephyr OS build v3.6.0-4569-g483c01ca11a7 *** Hello World! imx952_evk/mimx9529/m7对于imx952_evk/mimx9529/m7/ddr预期输出*** Booting Zephyr OS build v3.6.0-4569-g483c01ca11a7 *** Hello World! imx952_evk/mimx9529/m7/ddr常见问题与排错建议J-Link 识别不到器件确认 JTAG 连接无误、SW9[2]OnJTAG_UART5_SEL 为高、FTA_SEL 已通过 bcu 置高并核对bcu lsftdi得到的-id。U-Boot 引导后无输出确认镜像确实加载到0xd0000000go前执行dcache off; icache flushcpu前执行dcache flush; icache flush。M7 烧录后无法启动检查 SW7[1:4] 拨码是否与烧录目标匹配USB 下载0b1001、SD 启动0b1010/0b1011对应 eMMC/SD 的启动组合并确认使用的是正确的串口第 1 个给 M7、第 4 个给 M33。west blobs 拉取失败先执行west update再执行west blobs fetch hal_nxp。串口波特率A55 使用 UART1、M7 使用 UART3均为 115200 8n1。总结i.MX952 EVK 在 Zephyr 中的支持覆盖了从单核 A55、4 核 SMP A55 到基于 TCM/DDR 的 M7 共四条板级路径。A55 侧既可以通过默认 J-Link runner 快速 flash/debug也可以借助 Real-Time Edge U-Boot 的go/cpu命令灵活地从 DDR 引导M7 侧则以 i.MX System Manager SCMI 为运行基础通过 SPSDK 自动构建并烧录flash.bin容器镜像。开发者可根据调试习惯与部署场景自由选择本文涉及的构建命令、拨码开关配置与源码依据均可直接在当前仓库 boards/nxp/imx952_evk 目录下复现验证。【免费下载链接】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),仅供参考
返回列表