ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Zephyr 开发 NXP S32K5XXCVB 板卡指南:S32K566 双核架构、GPIO 映射与 Lauterbach 调试实战

Zephyr 开发 NXP S32K5XXCVB 板卡指南:S32K566 双核架构、GPIO 映射与 Lauterbach 调试实战 Zephyr 开发 NXP S32K5XXCVB 板卡指南S32K566 双核架构、GPIO 映射与 Lauterbach 调试实战【免费下载链接】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/nxp/s32k5xxcvb/doc/index.rst 为核心系统讲解面向汽车电子场景的 NXP S32K5XXCVB 评估板的移植细节包括 S32K566 的 Cortex-M7/Cortex-R52 双核选择、RM 手册与 Zephyr GPIO 的端口映射、板载 LED/按键与时钟配置以及基于 Lauterbach TRACE32 的编译、烧录与多核启动流程。读完本文你将能够基于该板卡完成 Zephyr 应用从选核、构建、烧录到串口验证的完整闭环。板卡概述面向车载网络的 S32K5 系列NXP S32K5XXCVB 评估板基于 NXP S32K5 系列汽车级微控制器MCU。S32K5 系列在 S32K3 的基础上进一步扩展目标是提供更高的性能、更大的存储容量以及更强的车载网络通信能力同时降低整体功耗。S32K5 MCU 在核心设计上采用了三簇异构的 Arm 核心分工面向计算的 Arm Cortex-R52 核心承担实时性要求高的计算负载面向平台的 Arm Cortex-M7 核心负责平台级任务与通用处理面向低功耗的 Arm Cortex-M4 核心用于低功耗场景。Zephyr OS 当前移植到了其中两个核心簇上运行对应两个板级目标s32k5xxcvb/s32k566/m7面向 S32K566 的 Cortex-M7默认从 Code MRAM 执行代码s32k5xxcvb/s32k566/r52面向 S32K566 的 Cortex-R52默认同样从 Code MRAM 执行代码。硬件资源速览板载主控为 NXP S32K566其关键硬件特性如下Arm Cortex-M7共 6 个核心提供两种可选配置——3 对 Lock-Step锁步模式或 2 对 Lock-Step 2 个单核模式板卡默认采用第二种配置。Arm Cortex-R52包含一个 R52 簇内部集成两个 Cortex-R52 核心。1.5 MB SRAM供 Cortex-M7 使用带 ECC1 MB SRAM连接至 Cortex-R52带 ECC32 MB Code Magnetic RAMMRAM供所有核心使用带 ECC集成以太网交换机、CAN FD/XL、QSPI14-bit 3 Msps ADC、24-bit eMIOS 定时器等外设。在 Zephyr 的板级定义文件 s32k5xxcvb_s32k566_m7.yaml 中可以确认该板卡的资源规模与已支持的外设清单identifier: s32k5xxcvb/s32k566/m7 name: NXP S32K5XXCVB M7 type: mcu arch: arm ram: 512 flash: 32768 toolchain: - zephyr supported: - adc - can - spi - dma - gpio - pwm - counter - i2c - watchdog - flash vendor: nxp其中ram: 512表示 Zephyr 可用的 SRAM 为 512 KBflash: 32768对应 32 MB 的 Code MRAM。支持的 Zephyr 功能板卡支持的具体 Zephyr 功能由zephyr:board-supported-hw::指令在文档中自动展开其数据来源即上文 YAML 文件中的supported列表。从源码结构看板卡默认启用或配置的外设集中在 s32k5xxcvb_s32k566.dtsi 中包括GPIO 端口gpiof、gpion、gpioo、gpiop使能外部中断控制器eirq1CAN 控制器flexcan0并作为zephyr,canbus默认 CAN 通道启动看门狗swt_startup别名为watchdog0XSPI 控制器xspi0及其下挂的 HyperRAMIS66WVH8M8DAL512 Mbit含一个storage分区eDMA 控制器edma。两块具体板级目标m7 与 r52的差异主要体现在选用的 SoC 头文件与 SRAM 上m7 目标在 s32k5xxcvb_s32k566_m7.dts 中通过#include arm/nxp/s32/nxp_s32k566_m7.dtsi引入 M7 SoC 定义并将zephyr,sram指向sram0r52 目标在 s32k5xxcvb_s32k566_r52.dts 中引入nxp_s32k566_r52.dtsi并将zephyr,sram指向cpe_sram。两者都以cmram作为zephyr,flash这与文档中默认从 Code MRAM 执行代码的描述一致。连接与 I/ORM 端口到 Zephyr 端口映射Zephyr 移植中使用的 GPIO 驱动按端口Port 引脚Pin组织而 S32K5XXCVB 参考手册RM中的 Port 列按 GPIO 编号组织。为了在使用 GPIO 驱动或为设备驱动配置引脚复用pin mux时保持一致必须按下表进行换算参考手册 PortsZephyr Ports/PinsGPIO0 - GPIO15PA0 - PA15GPIO16 - GPIO31PB0 - PB15GPIO32 - GPIO47PC0 - PC15GPIO48 - GPIO63PD0 - PD15GPIO64 - GPIO78PE0 - PE14GPIO80 - GPIO95PF0 - PF15GPIO96 - GPIO111PG0 - PG15GPIO112 - GPIO127PH0 - PH15GPIO128 - GPIO138PI0 - PI10GPIO160 - GPIO175PK0 - PK15GPIO176 - GPIO191PL0 - PL15GPIO192 - GPIO207PM0 - PM15GPIO208 - GPIO223PN0 - PN15GPIO224 - GPIO239PO0 - PO15GPIO240 - GPIO254PP0 - PP14GPIO256 - GPIO263PQ0 - PQ7GPIO304 - GPIO319PT0 - PT15GPIO320 - GPIO335PU0 - PU15GPIO336 - GPIO351PV0 - PV15GPIO352 - GPIO363PW0 - PW11例如参考手册中的 GPIO1 对应 Zephyr 的 PA1GPIO337 对应 PV1。需要注意部分编号区间存在跳号如 GPIO79、GPIO139-159、GPIO264-303 等未出现在映射表中实际使用时以 SoC 引脚定义为准。这一映射关系在板级设备树中可以直接得到印证在 s32k5xxcvb_s32k566.dtsi 中红色 LED 定义为gpios gpiop 1 GPIO_ACTIVE_HIGH即 PP1与文档中Red LED 位于 PP1完全对应。LED板卡提供三颗用户 RGB LED各 LED 的 Devicetree 节点、颜色与引脚如下Devicetree 节点颜色引脚led0 / user_led_red红PP1led1 / user_led_green绿PO2led2 / user_led_blue蓝PN10用户可以通过任意方式控制这些 LED。需要注意其有效电平输出1点亮 LEDGPIO_ACTIVE_HIGH。在设备树中三颗 LED 分别被别名为led0/led1/led2因此可以直接使用 Zephyr 的 LED APIgpio_dt_specled_on/led_off或按别名索引访问。按键板卡提供两颗用户按键Devicetree 节点标签引脚sw0 / user_button_0USERSW0PF3sw1 / user_button_1USERSW1PF9在设备树中两颗按键以gpio-keys兼容节点描述并分别绑定输入事件码INPUT_KEY_0与INPUT_KEY_1同时配置为GPIO_ACTIVE_LOW按下时电平为低。这意味着使用 Zephyr Input 子系统时可以将其直接作为按键输入设备使用。系统时钟板卡的两个核心簇运行频率差异较大分别对应其计算与平台分工Arm Cortex-M7200 MHzArm Cortex-R52800 MHz两个板级目标的 defconfig 均通过CONFIG_CLOCK_CONTROLy启用时钟控制子系统例如 s32k5xxcvb_s32k566_m7_defconfig 与 s32k5xxcvb_s32k566_r52_defconfig。此外两者都启用了CONFIG_ARM_MPUyARM 内存保护单元与CONFIG_XIPy从 Flash/MRAM 就地执行后者的含义是代码默认从 32 MB Code MRAM 运行这也解释了为什么 board.cmake 中会依据CONFIG_XIP来决定加载目标。板卡上电与调试器连接搭建开发环境时请将外部调试探针连接到板卡的JTAG Cortex ETM 连接器J17再将探针通过 USB 或以太网连接到主机具体连接方式以所用探针支持的能力为准。NXP S32K5XX-MB 扩展板ShieldNXP S32K5XX-MB 是配套的 Zephyr shield主板用于扩展 S32K5XXCVB 板的 I/O 连接能力。它提供了以下功能串口 UART用于查看 Zephyr 应用输出该 shield 的完整说明见 boards/shields/nxp_s32k5xx_mb/doc/index.rst其 overlay 定义在 nxp_s32k5xx_mb.overlay 中核心内容包括将zephyr,console与zephyr,shell-uart指向lpuart3波特率 115200将zephyr,canbus指向canxlCAN XL 通道并挂载nxp,tja1463CAN 收发器支持最高 8 Mbps 位速率。Shield 上的 GPIO 引脚矩阵shield 原理图中的 Jxxx 符号与主板布局中的 GPIO 引脚矩阵对应关系如下表行 A~AI列 1~10行\列12345678910AJ207J173J139J447BJ208J174J140J105CJ404J370J338J305J273J241J209J175J141J106DJ405J371J339J306J274J242J210J176J142J107EJ406J372J340J307J275J243J211J177J143J108FJ407J373J341J308J276J244J212J178J144J109GJ408J374J342J309J277J245J213J179J145J110HJ409J375J343J310J278J246J214J180J146J111IJ410J376J344J311J279J247J215J181J147J112JJ411J377J345J312J280J248J216J182J148J113KJ412J378J346J313J281J249J217J183J149J114LJ413J379J347J314J282J250J218J184J150J115MJ414J380J348J315J283J251J219J185J151J116NJ415J381J349J316J284J252J220J186J152J117OJ416J382J350J317J285J253J221J187J153J118PJ417J383J351J318J286J254J222J188J154J119QJ418J384J352J319J287J255J223J189J155J120RJ419J385J353J320J288J256J224J190J156J121SJ420J386J354J321J289J257J225J191J157J122TJ421J387J355J322J290J258J226J192J158J123UJ422J388J356J323J291J259J227J193J159J124VJ423J389J357J324J292J260J228J194J160J125WJ424J390J358J325J293J261J229J195J161J126XJ425J391J359J326J294J262J230J196J162J127YJ426J392J360J327J295J263J231J197J163J128ZJ427J393J361J328J296J264J232J198J164J129AAJ428J394J362J329J297J265J233J199J165J130ABJ429J395J363J330J298J266J234J200J166J131ACJ430J396J364J331J299J267J235J201J167J132ADJ431J397J365J332J300J268J236J202J168J133AEJ432J398J366J333J301J269J237J203J169J134AFJ433J399J367J334J302J270J238J204J170J135AGJ434J400J368J335J303J271J239J205J171J136AHJ435J401J369J336J304J272J240J206J172J137AIJ437J438J439J440J441J442J443J444J445J446通过 Shield 查看串口输出使用该 shield 查看串口输出前需要先确保主板已正确连接到 S32K5XXCVB 板卡。由于板卡本身没有板载 USB 转串口需要外接一个USB 转串口转换器例如 CH340按下表接线CH340 转换器引脚GPIO 引脚矩阵位置TXDO5RXDP5GNDAI10随后使用你喜欢的终端程序监听串口输出例如使用跨平台的 pySerial minitermpython -m serial.tools.miniterm port 115200将port替换为板卡实际对应的串口设备名例如在 Linux 下通常是/dev/ttyUSB0。使用 Shield 构建并烧录应用构建时通过west build的--shield参数启用该 shieldwest build -b s32k5xxcvb/s32k566/m7 samples/hello_world --shield nxp_s32k5xx_mb west flash烧录并复位后终端应输出如下信息Hello World! s32k5xxcvb/s32k566/m7编程与调试Programming and Debuggings32k5xxcvb板卡的应用构建方式与 Zephyr 标准流程一致。该板卡通过 West 支持以下调试工具的 runnerLauterbach TRACE32详见 Zephyr 文档的 Lauterbach TRACE32 调试主机工具 章节在使用前请先按照所选调试工具的安装步骤完成环境配置。Lauterbach runner 的具体接入方式定义在 board.cmake 中其关键逻辑如下board_runner_args(trace32 --startup-args elfFile${PROJECT_BINARY_DIR}/${KERNEL_ELF_NAME} ) if(${CONFIG_XIP}) board_runner_args(trace32 loadTomram) else() board_runner_args(trace32 loadTosram) endif() if(${CONFIG_CPU_CORTEX_M7}) board_runner_args(trace32 coreTypem7) else() board_runner_args(trace32 coreTyper52) endif()即runner 会自动将 ELF 路径指向构建产物根据CONFIG_XIP决定加载目标是mram还是sram并根据CONFIG_CPU_CORTEX_M7自动选择coreTypem7或coreTyper52。这也为下面核心选择一节的命令行覆盖机制提供了默认值基础。调试Debugging以hello_world示例为例针对 M7 目标执行构建与调试west build -b s32k5xxcvb/s32k566/m7 samples/hello_world west debug烧录Flashing如果只是希望把应用下载到板卡并运行执行west build -b s32k5xxcvb/s32k566/m7 samples/hello_world west flash核心选择Core Selection需要注意当前 Zephyr 移植仅支持单核运行。默认情况下Zephyr 运行在所选择板级目标的第一个核心上。若要在其他核心上运行 Zephyr 应用则必须从命令行覆盖全部 runner 参数west debug/flash --startup-args elfFileelf_path coreTypem7/r52 loadTomram/sram corecore_id参数含义elf_pathZephyr 应用 ELF 在输出目录中的路径例如build/zephyr/zephyr.elfcoreType选择核心类型取m7或r52loadTo加载目标取mram或sram默认与构建时CONFIG_XIP的取值一致即mramcore目标核心 ID用于在多核簇中指定具体核心。该移植对应的调试启动脚本位于 boards/nxp/s32k5xxcvb/support/ 目录debug.cmm、flash.cmm、startup.cmmLauterbach TRACE32 通过这套.cmm脚本完成对指定核心的初始化与加载。实战小结围绕s32k5xxcvb板卡可以归纳出四条最常用的操作路径M7 目标 Shield 串口验证west build -b s32k5xxcvb/s32k566/m7 samples/hello_world --shield nxp_s32k5xx_mb配合 CH340 在 O5/P5/AI10 引出串口用 miniterm 以 115200 波特率查看输出R52 目标将-b参数换成s32k5xxcvb/s32k566/r52利用 R52 簇的 800 MHz 计算能力承载实时负载调试先安装 Lauterbach TRACE32再west debugrunner 会根据CONFIG_CPU_CORTEX_M7与CONFIG_XIP自动填充coreType与loadTo多核指定通过west debug --startup-args elfFile... coreType... loadTo... core...覆盖默认参数把 Zephyr 运行镜像加载到指定核心。板级配置与源码是进一步深入的首选入口GPIO/LED/按键/外设定义见 s32k5xxcvb_s32k566.dtsiM7/R52 差异见 s32k5xxcvb_s32k566_m7.dts 与 s32k5xxcvb_s32k566_r52.dtsLauterbach 调试脚本见 support/ 目录。【免费下载链接】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),仅供参考
返回列表