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

资讯详情

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

Zephyr 下 NXP MR-CANHUBK3(S32K344)移动机器人评估板开发指南:CAN FD、以太网、调试与 MCUboot

Zephyr 下 NXP MR-CANHUBK3(S32K344)移动机器人评估板开发指南:CAN FD、以太网、调试与 MCUboot Zephyr 下 NXP MR-CANHUBK3S32K344移动机器人评估板开发指南CAN FD、以太网、调试与 MCUboot【免费下载链接】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/zephyrMR-CANHUBK3 是 NXP 面向自主移动机器人AMR与自动导引车AGV等移动机器人应用推出的评估板核心是一颗基于 Arm Cortex-M7Lock-Step的 S32K344 汽车级 MCU板上集成 6 路 CAN FD、100Base-T1 车载以太网、QSPI NOR Flash 与 FS26 安全系统基础芯片。本文以 boards/nxp/mr_canhubk3/doc/index.rst 为骨架结合 Zephyr 仓库中该板卡的 Devicetree、defconfig 与 runner 配置系统讲解板级资源映射、外设驱动配置、CAN 消息缓冲区限制、FS26 看门狗初始化以及基于 J-Link / TRACE32 / pyOCD 的烧录、调试与 MCUboot 链式加载流程。读完本文你将能够在 Zephyr 上为 MR-CANHUBK3 完成工程构建、外设使能与固件刷写。NXP MR-CANHUBK3 开发板顶部视图板卡概览MR-CANHUBK3mr_canhubk3是 NXP 推出的移动机器人应用评估板典型场景包括自主移动机器人AMR与自动导引车AGV。它基于 NXP S32K344 通用汽车级微控制器采用 Arm Cortex-M7 内核Lock-Step 双核锁步模式核心特征包括Arm Cortex-M7Lock-Step最高 160 MHz4 MB 程序 Flash带 ECC320 KB RAM带 ECC以太网 100 Mbps、CAN FD、FlexIO、QSPI12 位 1 Msps ADC、16 位 eMIOS 定时器集成 NXP FS26 Safety System Basis ChipSBC 安全系统基础芯片从 Zephyr 的板级元数据boards/nxp/mr_canhubk3/board.yml可以看到该板对应 SoC 为s32k344并声明了mcuboot变体用于支持 MCUboot 链式加载场景。在 boards/nxp/mr_canhubk3/Kconfig.mr_canhubk3 中板级 Kconfig 通过select SOC_S32K344与select SOC_PART_NUMBER_PS32K344EHVPBS锁定 SoC 与具体型号。板载接口包括控制台 UARTConsole UART6 路 CAN FD100Base-T1 车载以太网JST-GH 连接器以及用于 I2C、SPI、GPIO、PWM 等的 I/O 排针更多硬件与设计资源可参考 NXP MR-CANHUBK3 官网。Zephyr 支持的功能特性根据 boards/nxp/mr_canhubk3/mr_canhubk3.yamlZephyr 为mr_canhubk3声明的受支持子系统包括adc、can、counter、display、dma、flash、gpio、i2c、netif:eth、pwm、spi、uart、watchdog。这也与板级默认配置 boards/nxp/mr_canhubk3/mr_canhubk3_defconfig 相呼应其中默认开启了CONFIG_BUILD_OUTPUT_HEX生成 HEX 输出文件便于直接烧录CONFIG_XIP程序从内部 Flash 就地执行eXecute In PlaceCONFIG_ARM_MPU使能 ARM MPU 内存保护CONFIG_NOCACHE_MEMORY为 HAL 使用非缓存内存CONFIG_SERIAL/CONFIG_WATCHDOG/CONFIG_CONSOLE串口、看门狗与控制台连接与 IOGPIO 分组低 Bank 与高 BankS32K344 的每个 GPIO 端口被划分为两个 bank低 bankpin 0 到 15与高 bankpin 16 到 31。例如PTA2是gpioa_l低 bank的第 2 脚而PTA20则是gpioa_h高 bank的第 4 脚。这一点在板级 Devicetreeboards/nxp/mr_canhubk3/mr_canhubk3_common.dtsi中体现得很直接例如 RGB 灯的红色通道定义为gpios gpioe_l 14 GPIO_ACTIVE_LOW即PTE14落在gpioe_l低 bank。GPIO 中断路由SIUL2 EIRQ 与 WKPUGPIO 控制器支持将外部输入 pad 中断路由到 SoC 支持的SIUL2 EIRQ或WKPU中断控制器。默认情况下GPIO 中断被路由到SIUL2 EIRQ中断控制器除非显式配置为指向 WKPU 中断控制器相关配置约定见 dts/bindings/gpio/nxp,siul2-gpio.yaml。每个中断控制器兼容哪些 GPIO需要查阅器件参考手册device reference manual。注意当前板级配置不支持唤醒事件与电源管理功能WKPU 仅作为中断控制器使用不承担唤醒职责。LEDMR-CANHUBK3 板载一颗用户 RGB LED以及 6 颗分别位于各 CAN 连接器旁的红灯。用户 RGB LEDDevicetree 节点与引脚Devicetree 节点颜色引脚Pin Functionsled0 / user_led1_redRedPTE14FXIO D7 / EMIOS0 CH19led1 / user_led1_greenGreenPTA27FXIO D5 / EMIOS1 CH10 / EMIOS2 CH10led2 / user_led1_blueBluePTE12FXIO D8 / EMIOS1 CH56 颗 CAN 状态 LEDDevicetree 节点颜色引脚Pin Functionscan_led0RedPTC18FXIO D6 / FXIO D12 / EMIOS2 CH12can_led1RedPTE5FXIO D7 / EMIOS1 CH5 / EMIOS0 CH 19can_led2RedPTD20EMIOS1 CH17 / EMIOS2 CH0can_led3RedPTB24FXIO D5 / EMIOS1 CH20 / EMIOS2 CH20can_led4RedPTB26FXIO D7 / EMIOS1 CH22 / EMIOS2 CH22can_led5RedPTD31FXIO D6 / EMIOS2 CH22在板级 Devicetree 中上述 LED 均以gpio-leds兼容节点声明并统一使用GPIO_ACTIVE_LOW见 mr_canhubk3_common.dtsi因此GPIO 输出0时 LED 点亮。用户可按需控制这些 LED。此外同一颗 RGB LED 还以pwm-leds方式提供 PWM 控制通道user_led1_red_pwm、user_led1_green_pwm、user_led1_blue_pwm分别挂在emios0_pwm/emios1_pwm上周期 20 ms、极性反转。注意gpio-leds与pwm-leds对应的是同一颗物理 LED二者不能同时使用这也是板级 DTS 中明确注释的限制。按键MR-CANHUBK3 板载两个用户按键Devicetree 节点标签引脚Pin Functionssw0 / user_button_1SW1PTD15EIRQ31sw0 / user_button_2SW2PTA25EIRQ5 / WKPU34在 Devicetree 中它们以gpio-keys节点定义采用GPIO_ACTIVE_HIGH并分别绑定输入事件码INPUT_KEY_0/INPUT_KEY_1zephyr,code属性。系统时钟Arm Cortex-M7Lock-Step内核默认配置为160 MHz运行。板级 Devicetree 中chosen节点将zephyr,sram指向sram0_1同时声明了zephyr,itcm与zephyr,dtcm供 XIP/紧耦合内存场景使用。串行控制台默认情况下串行控制台由lpuart2提供位于 7-pin DCD-LZ 调试连接器P6连接器引脚Pin FunctionP6.2PTA9LPUART2_TXP6.3PTA8LPUART2_RX在 mr_canhubk3_common.dtsi 中zephyr,console与zephyr,shell-uart均指向lpuart2波特率配置为current-speed 115200并挂接了edma0的 TX/RX DMA 通道。同一 DTS 中还定义了lpuart0/1/9/10/13/14等多路串口并提示LPUART1 与 LPUART9、LPUART2 与 LPUART10 分别共享同一组 DMA 源当多个实例同时使用 UART 异步 API 时需注意资源冲突。CANCAN 功能由FLEXCAN 接口提供共6 个实例flexcan0~flexcan5Devicetree 节点引脚Pin Function总线连接器flexcan0PTA6 / PTA7PTA6_CAN0_RX / PTA7_CAN0_TXP12/P13flexcan1PTC9 / PTC8PTC9_CAN0_RX / PTC8_CAN0_TXP14/P15flexcan2PTE25 / PTE24PTE25_CAN0_RX / PTE24_CAN0_TXP16/P17flexcan3PTC29 / PTC28PTC29_CAN0_RX / PTC28_CAN0_TXP18/019flexcan4PTC31 / PTC30PTC31_CAN0_RX / PTC30_CAN0_TXP20/P21flexcan5PTC11 / PTC10PTC11_CAN0_RX / PTC10_CAN0_TXP22/P23板级 Devicetree 中每个 FLEXCAN 实例都通过phys属性关联了对应的 CAN 收发器节点can_phy0~can_phy5收发器型号覆盖 NXP TJA1443max-bitrate 5 Mbps、TJA14638 Mbps与 TJA11532 Mbps并通过enable-gpios/standby-gpios控制使能与待机见 mr_canhubk3_common.dtsi。注意zephyr,canbus指向flexcan0即 Zephyr CAN 子系统默认使用 CAN0。消息缓冲区MB限制受 HAL SDK 限制CAN 仅支持最多 64 个消息缓冲区MBs并且对于并发活跃实例在8 字节 payload场景下最多支持32 个消息缓冲区。因此必须关注如下配置选项1.CONFIG_CAN_MCUX_FLEXCAN_MAX_FILTERS必须小于下表给出的最大消息缓冲区数。各实例在不同 payload 下的硬件/软件支持能力如下Devicetree 节点Payload硬件支持软件支持flexcan08 字节96 MBs64 MBs16 字节63 MBs42 MBs32 字节36 MBs24 MBs64 字节21 MBs14 MBsflexcan18 字节64 MBs64 MBs16 字节42 MBs42 MBs32 字节24 MBs24 MBs64 字节14 MBs14 MBsflexcan28 字节64 MBs64 MBs16 字节42 MBs42 MBs32 字节24 MBs24 MBs64 字节14 MBs14 MBsflexcan38 字节32 MBs32 MBs16 字节21 MBs21 MBs32 字节12 MBs12 MBs64 字节7 MBs7 MBsflexcan48 字节32 MBs32 MBs16 字节21 MBs21 MBs32 字节12 MBs12 MBs64 字节7 MBs7 MBsflexcan58 字节32 MBs32 MBs16 字节21 MBs21 MBs32 字节12 MBs12 MBs64 字节7 MBs7 MBs从驱动实现看drivers/can/can_mcux_flexcan.c实例可用的最大过滤器数量取节点属性max_filters与全局 KconfigCONFIG_CAN_MCUX_FLEXCAN_MAX_FILTERS的较小者DT_INST_PROP_OR(id, max_filters, CONFIG_CAN_MCUX_FLEXCAN_MAX_FILTERS)因此在多路 CAN 并发且使用较长 payload 时务必按上表核对过滤器的配置上限避免编译期或运行期越界。提示CAN 总线通常需要在总线两端各接入一个120 欧姆终端电阻。可以使用随板附带的 CAN termination board终端板实现。更多细节请参考 NXP MR-CANHUBK3 硬件用户手册的 6.3 CAN Connectors 章节。I2CI2C 由LPI2C 接口提供共2 个实例lpi2c0与lpi2c1分别对应连接器P4、P3连接器引脚Pin FunctionP3.2PTD9LPI2C1_SCLP3.3PTD8LPI2C1_SDAP4.3PTD14LPI2C0_SCLP4.4PTD13LPI2C0_SDA配套的显示扩展板display board通过连接器P4接到lpi2c0。在板级 Devicetree 中lpi2c0默认启用并以标准速率I2C_BITRATE_STANDARD运行其总线上挂载了一颗solomon,ssd1306128x32 OLED地址0x3c且chosen的zephyr,display指向它因此display子系统可直接使用该 OLED。ADCADC 由ADC SAR 控制器提供共3 个实例。ADC 通道被划分为3 组精度组precision、标准组standard与外部组external。注意同一实例的所有通道在同一时刻只能运行在一个组上即分组切换是实例级而非通道级的。FS26 SBC 看门狗板卡正常上电后存在一个256 ms的窗口期在此期间必须用有效的 token 刷新good token refresh来喂狗否则FS26 看门狗会向 MCU 发出复位信号。该板级配置默认使能 FS26 看门狗驱动来处理这一初始化流程。在 Devicetree 中FS26 看门狗位于lpspi3总线上mr_canhubk3_common.dtsilpspi3 { pinctrl-0 lpspi3_default; pinctrl-names default; >west flash改用 Lauterbach TRACE32 或 pyOCDwest flash -r trace32 west flash -r pyocdTRACE32 runner 支持的附加命令行参数west flash -r trace32 --startup-args elfFileelf_path loadToflash/sram \ eraseFlashyes/no verifyFlashyes/no参数含义elf_path输出目录中 Zephyr 应用 ELF 的路径loadToflash将应用加载到 SoC 内部程序 Flash需设置CONFIG_XIPloadTosram加载到 SRAM。默认flasheraseFlashyes在下载前擦除 SoC 内部 Flash 的全部内容该过程耗时较长。默认noverifyFlashyes编程后校验 SoC 内部 Flash 内容需配合loadToflash使用。默认no例如擦除并校验 Flash 内容west flash -r trace32 --startup-args elfFilebuild/zephyr/zephyr.elf loadToflash eraseFlashyes verifyFlashyesMCUboot 链式加载该板支持使用MCUboot进行应用链式加载app chain-loading。构建与烧录将 MCUboot 与flash_shell示例应用一起构建并生成可直接烧录的 HEX 文件west build -p -b mr_canhubk3/s32k344/mcuboot samples/drivers/flash_shell --sysbuild west flash生成的产物MCUbootbuild/mcuboot/zephyr/zephyr.hex应用未签名build/flash_shell/zephyr/zephyr.hex排错Troubleshooting如果 MCUboot 打印 Image in the primary slot is not valid或在打印 Jumping to the first image slot 后卡住说明应用很可能使用了512 字节的头部header签名。请改用--header-size 0x400重新签名并重新烧录。不要给 MCUboot 链式加载的应用添加IVTImage Vector TableIVT 仅用于独立/XIP 映像或 MCUboot 自身。调试Debugging使用 SEGGER J-Link 启动 GDB 会话west debug改用 Lauterbach TRACE32 或 pyOCDwest debug -r trace32 west debug -r pyocd其中 TRACE32 与 pyOCD 分别启动各自的软件调试界面。此外support/ 目录下提供了startup.cmm、flash.cmm、debug.cmm等 TRACE32 脚本可供参考或直接用于 Lauterbach 环境下的启动、烧录与调试流程。小结MR-CANHUBK3 是 Zephyr 中典型的汽车级移动机器人评估平台S32K344 的 6 路 FLEXCAN含收发器 GPIO 控制与 MB 资源预算、100Base-T1 以太网、QSPI 外部 Flash、FS26 安全看门狗以及 OLED 显示均在板级 Devicetree 中完整落地。开发时重点关注三点其一CAN 多实例并发时按 payload 与 MB 表核算CONFIG_CAN_MCUX_FLEXCAN_MAX_FILTERS其二FS26 看门狗要求上电后 256 ms 内完成 token 刷新调试阶段可通过 JP1 跳线进入 debug 模式其三默认 J-Link 即可完成烧录调试TRACE32 场景下务必使用 ≥ 2024.09 版本并正确区分 MCUboot 链式加载与独立 XIP 映像的签名/IVT 差异。【免费下载链接】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),仅供参考
返回列表