ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Zephyr 支持 USBCANFD DUAL:基于 STM32G4 的双通道 USB 转 CAN FD 适配器板开发指南

Zephyr 支持 USBCANFD DUAL:基于 STM32G4 的双通道 USB 转 CAN FD 适配器板开发指南 Zephyr 支持 USBCANFD DUAL基于 STM32G4 的双通道 USB 转 CAN FD 适配器板开发指南【免费下载链接】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 中 USBCANFD DUAL 板级支持展开完整讲解这款 2 通道 USB 转 CAN FD 适配器板的硬件资源、Zephyr 外设引脚映射、系统时钟架构以及 DFU/ST-LINK 双通道烧录方案。读完本文你将掌握如何在 Zephyr 环境下为 USBCANFD DUAL 构建并烧录应用、理解其 FDCAN 与 USB 的时钟来源并能够基于板级源码自行排查与扩展外设配置。硬件概览面向工业现场的双通道 CAN FD 适配器USBCANFD DUAL 是 canmodule 推出的一款高性能 2 通道 USB 转 CAN FD 适配器板文档明确其数据传输率最高可达8 MbpsCAN FD 数据段速率。板卡以STM32G4 微控制器为核心其关键硬件特性包括双路独立 CAN FD 通道FDCAN1 / FDCAN2通过板载 5.08 mm 间距接线端子引出便于工业现场布线电气隔离galvanic isolation将 USB 侧与 CAN 总线侧电气隔离提升抗干扰能力与安全性双通道独立状态 LED分别指示 RX/TX 收发状态便于在线调试与流量观测软件可配置的启动设置software-configurable boot settings可进入内置 bootloader 模式进行 DFU 升级。从仓库中的 board.yml 可以看到该板基于STM32G473SoCsocs: name: stm32g473xx板载128 KB RAM 与 128 KB Flash符合 MCU 类板卡的资源定位。对应的 Kconfig.usbcanfd_dual 中BOARD_USBCANFD_DUAL直接select SOC_STM32G473XX将板卡与 SoC 配置绑定。默认 Zephyr 外设引脚映射原文档给出了完整的默认外设引脚映射表。结合 usbcanfd_dual.dts 中的 pinctrl 定义可以一一印证GPIO 端口/引脚号与设备树gpioa等节点完全对应功能引脚设备树依据CAN_RX1 / BOOT0PB8fdcan1_rx_pb8CAN_TX1PB9fdcan1_tx_pb9CAN_RX2PB5fdcan2_rx_pb5CAN_TX2PB6fdcan2_tx_pb6ledRX1PA6gpios gpioa 6 GPIO_ACTIVE_HIGHledTX1PA5gpios gpioa 5 GPIO_ACTIVE_HIGHledRX2PA4gpios gpioa 4 GPIO_ACTIVE_HIGHledTX2PA3gpios gpioa 3 GPIO_ACTIVE_HIGHUSB_DNPA11usb_dm_pa11USB_DPPA12usb_dp_pa12SWDIOPA13—SWCLKPA14—NRSTPG10—几点值得注意的细节CAN_RX1 与 BOOT0 复用同一引脚 PB8。这意味着在 boot 阶段该引脚承担 BOOT0 功能系统启动后切换为 FDCAN1 接收引脚是无物理 BOOT0 按钮设计见下文烧录章节的根源。四个 LED 在设备树中注册为gpio-leds并通过aliases映射为led0~led3分别对应 RX、TX、RX2、TX2因此 Zephyr 应用中可直接使用led0等别名操作对应 GPIO。LED 均为GPIO_ACTIVE_HIGH极性。SWD 调试口SWDIO/SWCLK与复位引脚 NRST 均按 STM32G4 常规方式引出可通过板卡右上角以 USB 公头朝上的方向的排针访问。支持的 Zephyr 特性根据文档的 Supported Features 列表与 board.yml 中supported字段Zephyr 为该板声明支持以下设备驱动类型can双路 FDCAN 控制器FDCAN1/FDCAN2counter定时器/计数器设备树中以lptim1作为zephyr,system-timergpioGPIO 及板载 LEDusb_device / usbdUSB 设备控制器设备树节点zephyr_udc0用于实现 USB-CAN FD 协议转换。此外usbcanfd_dual_defconfig 默认启用了CONFIG_ARM_MPUy即该板默认开启 ARM 内存保护单元构建时无需手动追加。系统时钟架构FDCAN 与 USB 的时钟来源原文档明确指出FDCAN1 与 FDCAN2 由 PLLQ 驱动频率为 80 MHz。这一点在设备树中可得到完整验证。时钟树配置位于 usbcanfd_dual.dts 的clk_hse、pll与rcc节点clk_hse { clock-frequency DT_FREQ_M(8); /* 外部 8 MHz 晶振 */ status okay; }; pll { div-m 2; mul-n 80; div-p 2; div-q 4; div-r 2; clocks clk_hse; status okay; }; rcc { clocks pll; clock-frequency DT_FREQ_M(160); /* 系统主频 160 MHz */ ahb-prescaler 1; apb1-prescaler 1; apb2-prescaler 1; };按 STM32G4 的 PLL 公式可以精确推导各时钟域VCO 输入 HSE / div-m 8 MHz / 2 4 MHzVCO 输出 4 MHz × mul-n(80) 320 MHzPLLQ 320 MHz / div-q(4) 80 MHz—— 正是文档所述的 FDCAN 时钟源PLLP 320 MHz / 2 160 MHzPLLR 320 MHz / 2 160 MHz配合 AHB/APB1/APB2 预分频均为 1得到160 MHz 系统主频。FDCAN 外设节点中明确指定了时钟源为 PLLQfdcan1 { pinctrl-0 fdcan1_rx_pb8 fdcan1_tx_pb9; clocks rcc STM32_CLOCK(APB1, 25), rcc STM32_SRC_PLL_Q FDCAN_SEL(1); status okay; }; fdcan2 { pinctrl-0 fdcan2_rx_pb5 fdcan2_tx_pb6; clocks rcc STM32_CLOCK(APB1, 25), rcc STM32_SRC_PLL_Q FDCAN_SEL(1); status okay; };USB 的时钟来源与 FDCAN 不同设备树启用clk_hsi48芯片内部 48 MHz RC 振荡器作为 USB 时钟USB 节点zephyr_udc0通过STM32_SRC_HSI48 CLK48_SEL(0)选择该时钟从而保证 USB 全速传输所需的精确 48 MHz 参考时钟不依赖 PLL。系统定时器方面chosen节点声明zephyr,system-timer lptim1即板卡使用LPTIM1 低功耗定时器作为系统心跳时钟其时钟源来自STM32_SRC_LSELPTIM1_SEL(3)即 LSE适合低功耗场景。构建与烧录应用标准构建流程与所有 Zephyr 板卡一致USBCANFD DUAL 支持通过 west 标准工作流构建与烧录。例如构建官方 blinky 示例west build -b usbcanfd_dual samples/basic/blinky west flash其中west build依据 board.cmake 中的 runner 声明自动选用OpenOCD作为烧录后端include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake)并使用板卡自带的 support/openocd.cfg 作为额外配置board_runner_args(openocd --config${BOARD_DIR}/support/openocd.cfg)。该配置文件加载 ST-Link 接口脚本与 STM32G4 目标脚本source [find interface/stlink.cfg] source [find target/stm32g4x.cfg]也就是说OpenOCD 路径默认面向ST-LINK 调试器 STM32G4 目标组合。方式一USB DFU 烧录无 BOOT0 引脚的特殊流程USBCANFD DUAL没有物理 BOOT0 引脚BOOT0 与 CAN_RX1 复用为 PB8如上文引脚表所示因此无法像普通板卡那样通过拉高 BOOT0 进入 DFU 模式。进入 DFU 模式必须借助option bytes选项字节完成使用外部调试器如 ST-LINK连接板卡修改选项字节中的nswBoot0 位为 1使芯片复位后从系统 bootloader内置 ROM 引导程序启动从而进入 USB DFU 模式通过 USB 连接上位机使用 DFU 工具烧录固件烧录完成后务必将 nswBoot0 位改回 0确保芯片恢复正常从 Flash 启动否则每次上电都会进入 bootloader 而无法运行应用。原文档特别强调这一必须改回的步骤这是该板 DFU 流程最容易踩坑的地方nswBoot0是软件控制的启动选择位置 1 时系统忽略外部 BOOT0 引脚电平而强制进入系统存储器 bootloader只有清零后才能保证正常 boot。方式二ST-LINK 直接烧录如果手头有 ST-LINK 调试器也可以绕过 DFU 流程直接通过 SWD 接口烧录与调试。该方式与 OpenOCD 配置interface/stlink.cfg完全匹配是更直接、更适合开发调试的选择west flash --runner openocd烧录完成后按复位NRST或重新上电即可运行固件。参考与进一步阅读USBCANFD DUAL 的完整板级支持源码位于 boards/canmodule/usbcanfd_dual/包括设备树、Kconfig、board.yml、OpenOCD 配置等同系列的 USB-CAN 适配器板usbcanfd_solo、usbcan_iso、canbridge_g473也位于 boards/canmodule/ 目录可对照参考其板级实现关于构建与烧录的通用流程可查阅 Zephyr 文档中的构建应用程序与运行/烧录应用程序章节STM32G4 系列寄存级细节option bytes、时钟树、FDCAN 外设可参考 ST 官方 RM0440 参考手册。【免费下载链接】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),仅供参考
返回列表