拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Zephyr 在 NXP S32Z2 上的移植指南:X-S32Z27X-DC (DC2) 板级支持详解

Zephyr 在 NXP S32Z2 上的移植指南X-S32Z27X-DC (DC2) 板级支持详解【免费下载链接】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/s32z2xxdc2板级定义文档为核心系统讲解如何面向 NXP X-S32Z27X-DCDC2评估板开发与调试 Zephyr 应用。你将掌握该板基于双 RTUReal-Time Unit实时单元× 4 核 Cortex-R52 的硬件资源布局、GPIO pad 到端口/引脚的映射关系、SRAM 启动与双调试器NXP S32 Debug Probe 与 Lauterbach TRACE32的完整使用流程以及 lock-step 与 split-lock 两种核心配置模式下的构建与调试方法。板级概览一个 SoC两个 Zephyr 板目标X-S32Z27X-DC简称 DC2基于 NXP S32Z2 实时处理器Real-Time Processor。该 SoC 包含两个 RTU每个 RTU 由四个 ARM Cortex-R52 核心组成并支持灵活的 split/lock分离/锁步配置。由于 Zephyr 当前移植只支持单核运行仓库为每个 SoC/RTU 组合提供独立的板目标s32z2xxdc2/s32z270/rtu0面向 S32Z270/RTU0s32z2xxdc2/s32z270/rtu1面向 S32Z270/RTU1。板目标的名称与 SoC 的对应关系定义在 Kconfig.s32z2xxdc2 中BOARD_S32Z2XXDC2会根据所选 RTU 目标select SOC_S32Z270_RTU0或SOC_S32Z270_RTU1并固定器件型号SOC_PART_NUMBER_P32Z270ADCK0MJFT。两个板目标的设备树入口分别为 s32z2xxdc2_s32z270_rtu0.dts 与 s32z2xxdc2_s32z270_rtu1.dts二者共用同一份 SoC 级 dtsi s32z2xxdc2_s32z270.dtsi仅在内核选择、CAN 总线别名等细节上有所差异。此外board.yml 声明了该板的 PCB 修订版本支持默认修订为 B同时提供 D 修订。这意味着同一块板卡的不同 PCB 版本需要选用带修订后缀的板目标见后文调试一节。硬件资源与连接支持的硬件特性根据 s32z2xxdc2_s32z270_rtu0.yaml该板在 Zephyr 中支持的外设包括uart、gpio、watchdog、以太网netif:eth、can、spi、counter、adc、i2c、dma、pwm、sent、psi5与crypto片上 SRAM 为 1024 KB。Pad 到端口/引脚的映射表S32Z2 的 SoC pad 为了与 GPIO 驱动及本移植所用的 HAL 驱动保持一致被分组为端口port与引脚pin。在配置 GPIO 或为设备驱动配置 pinmux 时必须依据下表进行 pad 与 port/pin 的换算Pads端口/引脚PAD_000 - PAD_015PA0 - PA15PAD_016 - PAD_030PB0 - PB14PAD_031PC15PAD_032 - PAD_047PD0 - PD15PAD_048 - PAD_063PE0 - PE15PAD_064 - PAD_079PF0 - PF15PAD_080 - PAD_091PG0 - PG11PAD_092 - PAD_095PH12 - PH15PAD_096 - PAD_111PI0 - PI15PAD_112 - PAD_127PJ0 - PJ15PAD_128 - PAD_143PK0 - PK15PAD_144 - PAD_145PL0 - PL1PAD_146 - PAD_159PM2 - PM15PAD_160 - PAD_169PN0 - PN9PAD_170 - PAD_173PO10 - PO13需要注意映射并非连续覆盖所有 port/pin例如 PC0–PC14、PH0–PH11 等不存在对应 pad因此在使用 GPIO 或配置 pinmux 时务必以 pad 编号为准反查端口。板级 pinmux 的默认配置见 s32z2xxdc2_s32z270_pinctrl.dtsi其中定义了emdio_default、eth0_default、canxl0_default、canxl1_default、flexcan0_default、flexcan1_default、qspi0_default等状态节点。用户 LED 与按键该板不包含用户 LED 或按键。因此blinky、button这类依赖板载 LED/按键的示例无法直接运行需要按照示例说明中的步骤自行扩展 GPIO 支持后才能在此板上使用。系统时钟Cortex-R52 核心被配置为以 1 GHz 运行。在板级 defconfig s32z2xxdc2_s32z270_rtu0_defconfig 中可看到配套配置CONFIG_SYS_CLOCK_TICKS_PER_SEC1000系统 tick 1 kHz、CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC8000000硬件时钟周期频率 8 MHz对应片上定时器/时钟源并启用了CONFIG_XIP从 SRAM 原地执行、CONFIG_ARM_MPU、CONFIG_SERIAL与CONFIG_CONSOLE。串口Serial PortSoC 提供 12 个 LINFlexD 实例可工作于 UART 模式。默认情况下控制台console输出通过 USB micro-B 连接器J119访问。连接后使用任意终端程序监听即可例如使用跨平台的 pySerial minitermpython -m serial.tools.miniterm port 115200将port替换为开发板对应的串口设备例如 Linux 下通常是/dev/ttyUSB0波特率为 115200。看门狗Watchdog该板的看门狗驱动SWT别名watchdog0目前仅支持定时器到期时触发中断。由于 Zephyr 当前是从 SRAM 运行的系统复位reset并不受支持——即看门狗超时后无法通过复位 SoC 来恢复系统只能借助中断处理程序进行软件层面的兜底处理。SWT 节点在 s32z2xxdc2_s32z270.dtsi 中被使能status okay。以太网EthernetNETC 驱动支持管理物理站接口PSI0Physical Station Interface以及单个虚拟 SIVSI其余 VSI 应分配给系统中的其他核心使用。从设备树可见RTU0 目标使用enetc_psi0并通过mru0的 mailboxrx-channels 1接收以太网报文RTU1 目标则使用mru4。板级 dtsi 中为 PSI0 配置了固定 MAC 地址00 00 00 01 02 00、300 MHz 时钟、MDIO 总线上的 PHYethernet-phy7以及对应的 pinctrl。关于以太网控制器的完整配置方法请参考示例nxp_s32_netc位于 samples/boards/nxp/s32/netc/README.rst。CAN 总线CANEXCELCANEXCEL 支持 CAN ClassicCAN 2.0与 CAN FD 两种模式但不支持远程传输请求RTR。RTU0 目标的zephyr,canbus默认指向canxl0见 s32z2xxdc2_s32z270_rtu0.dts。需要特别注意的是该板目前并未为 CANEXCEL 端口安装 CAN 收发器。要实现外部通信需要自行加装与 CAN 2.0 和 CAN FD 协议引脚兼容的 CAN 收发器。FlexCANFlexCAN 同样支持 CAN ClassicCAN 2.0与 CAN FD 两种模式。RTU1 目标的zephyr,canbus默认指向flexcan0。板级 dtsi 中canxl0、canxl1、flexcan0、flexcan1均配置了默认 pinctrl其中 FlexCAN 控制器默认使能。ADCADC 由 ADC SAR逐次逼近型控制器提供共2 个实例每个实例为12 位分辨率。ADC 通道分为两组精度组precision与内部/标准组internal/standard。板级 dtsi 中为sar_adc0与sar_adc1统一配置了参考电压vref-mv 18001.8 V。注意同一个实例的所有通道在同一时刻只能在 1 个组的通道上运行。这意味着不能同时采样同一实例中分别属于两个不同组的通道设计采样任务时需将通道按组分开调度。EDMAEDMA 模块包含四个 EDMA3 实例实例 0 具有32 通道实例 1、4、5 各具有16 通道。这些通道可用于内存到内存、外设到内存等 DMA 搬运支撑串口、SPI、以太网等高速外设的数据流处理。外部 Flash板载S26HS512T 512M-bit64 MBHyperFlash存储器连接到 QSPI 控制器 A1 端口本板配置将其选为默认 flash 控制器zephyr,flash-controller s26hs512t。设备树 s32z2xxdc2_s32z270.dtsi 中完整描述了该 HyperFlash 的时序与电气参数兼容nxp,s32-qspi-hyperflashsize DT_SIZE_M(512)jedec-id、write-block-size 2、read-latency-cycles 16max-program-buffer-size 256、vcc-mv 1800、drive-strength-ohm 27QSPI 控制器配置为 DDR 数据率、word-addressable地址模式并开启 DLLAUTO UPDATE 模式、外部 DQS 作为接收时钟源以及 4 个 AHB 主设备缓冲各 256 字节内部还定义了storage_partitionpartition0大小 0x10000用于存储用途。需要说明的是虽然板上存在 HyperFlash但当前 Zephyr 应用仍只能加载到内部 SRAM执行见下文编程与调试flash 控制器更多用于后续存储扩展与固件部署规划。CRYPTOHSE 硬件安全引擎硬件安全引擎HSE支持哈希与对称加密运算具备 ECB、CBC、CTR 模式使用基于 RAM 的密钥目录key catalog支持128 位或 256 位密钥长度。使用前有一个重要前提驱动假定 HSE 固件已经被安装并配置完毕例如密钥目录已格式化、所使用的 MU 实例已激活等。HSE 固件的安装与配置阶段在《HSE Firmware User Manual》中有文档说明需联系 NXP 销售人员或分销商获取该文档。编程与调试Programming and Debuggings32z2xxdc2系列板目标的构建方式与 Zephyr 标准流程一致。目前该板仅支持将 Zephyr 应用二进制加载到核心内部 SRAM 中执行不支持从外部 flash 启动。板级支持两种 West runnerNXP S32 Debug Probe默认Lauterbach TRACE32。在使用前请先按所选调试工具的安装说明完成环境准备。runner 的具体参数在 board.cmake 中定义它会把elfFile、rtu${CONFIG_NXP_S32_RTU_INDEX}、lockstep以及默认--core-name如R52_rtu_0_LS等参数自动传递给启动脚本。硬件连接与串口设置将外部调试探针连接到板上的 JTAG 连接器J134再通过 USB 或以太网视探针支持而定连接到主机将板上的 USB/UART 端口J119连接到主机运行终端程序监听串口输出例如python -m serial.tools.miniterm /dev/ttyUSB0 115200构建并调试 hello_world面向s32z2xxdc2/s32z270/rtu0构建并启动调试会话west build -b s32z2xxdc2/s32z270/rtu0 samples/hello_world west debug如果你使用的是较新的 PCB 修订版本默认修订为 B则需要使用带修订后缀的板目标。例如修订 Dwest build -b s32z2xxdc2D/s32z270/rtu0 samples/hello_world west debug注意s32z2xxdc2_s32z270_rtu0_D.overlay与s32z2xxdc2_s32z270_rtu0_B.overlay分别对应两种修订后者定义了修订差异。调试会话开始后即可设置断点并输入c继续运行进入程序。此时终端应输出Hello World! s32z2xxdc2使用 Lauterbach TRACE32 调试如果使用 Lauterbach TRACE32 软件则运行west debug -r trace32该命令会调用 support/startup.cmm 启动脚本。从脚本源码可以看到它执行的关键步骤复位并初始化 JTAG40 MHz 时钟、DualPort 使能、将 RTU 子系统从复位中释放MC_ME 相关寄存器操作、初始化 RTU SRAM、根据lockstep参数写 CFG_CORE 的 SPLT_LCK 位、将 ELF 加载到 EAXISRAM地址空间并把 PC 设置为__start。烧录Flashing如果只想把应用下载到板载 SRAM 并直接运行可使用flash命令。flash命令目前仅由 Lauterbach TRACE32 runner 支持west build -b s32z2xxdc2/s32z270/rtu0 samples/hello_world west flash -r trace32说明Lauterbach 启动脚本在执行flash与debug时所做的事情相同初始化 SoC、把应用加载到 SRAM区别在于flash会隐藏 TRACE32 界面、直接运行应用并退出。如果想用 NXP S32 Debug Probe runner 模拟类似行为可以运行带 GDB 批处理模式的debug命令west debug --tool-opt--batchRTU 与核心配置Lock-step / Split-lock本 Zephyr 移植只能运行单核且只能运行在任意一个 Cortex-R52 核心上支持 lock-step锁步或 split-lock分离锁步两种模式。默认情况下Zephyr 运行在所选择 RTU 的第一个核心core 0并采用lock-step 模式——这也是芯片的复位默认配置。在 lock-step 模式下Core0/Core2 与 Core1/Core3 分别组成冗余锁步对。若要以split-lock 模式构建需要在应用 Kconfig 中禁用CONFIG_DCLS。板级配置会依据构建配置自动设置 runner 参数见 board.cmake启用CONFIG_DCLS时向 trace32 传入lockstepyes、向 nxp_s32dbg 传入--core-name R52_rtu_0_LS禁用时分别传入lockstepno与R52_rtu_0。如需调试非默认核心使用--core-name参数lockstep 配置下west debug --core-nameR52_rtu_id_core_id_LSsplit-lock 配置下west debug --core-nameR52_rtu_id_core_id其中rtu_id从零开始的 RTU 索引0 或 1core_id相对于所在 RTU 的核心索引0、1、2 或 3。例如以 split-lock 配置构建并运行于 RTU0 的第二个核心core 1west build -b s32z2xxdc2/s32z270/rtu0 samples/hello_world -DCONFIG_DCLSn west debug --core-nameR52_0_1如果使用 Lauterbach TRACE32所有 runner 参数必须从命令行显式覆盖west debug -r trace32 --startup-args elfFileelf_path rturtu_id corecore_id lockstepyes/no其中elf_path为输出目录下 Zephyr 应用 ELF 的路径。在 startup.cmm 中可以看到这些参数的默认值与取值范围rtu有效值为 0/1默认 0core有效值为 0–3默认 0lockstep默认yes同时脚本会根据 RTU 选择不同的启动地址与 CFG_CORE 配置地址RTU00x79900000/0x76120000RTU10x7D900000/0x76920000并校验 ELF 路径与参数合法性。小结X-S32Z27X-DCDC2是 Zephyr 在 S32Z2 安全实时处理器上的重要参考平台双 RTU × 4 核 Cortex-R52 的架构、1 GHz 主频、12 路 LINFlexD UART、CANEXCEL/FlexCAN、双 SAR ADC、四实例 EDMA、HyperFlash 以及 HSE 安全引擎覆盖了实时控制、车载通信与功能安全场景的核心外设。开发时请牢记三个关键点当前仅支持 SRAM 运行与单核调试、RTU0/RTU1 需选用独立板目标、lock-step 与 split-lock 通过CONFIG_DCLS切换并配合--core-name选择目标核心。相关的设备树、pinctrl、defconfig 与调试脚本均可在boards/nxp/s32z2xxdc2目录下继续深入研究。【免费下载链接】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),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门