Skip to content

MCX/A366 CANFD BSP driver support and examples#11609

Open
yuplus wants to merge 1 commit into
RT-Thread:masterfrom
yuplus:feature/dual_canfd
Open

MCX/A366 CANFD BSP driver support and examples#11609
yuplus wants to merge 1 commit into
RT-Thread:masterfrom
yuplus:feature/dual_canfd

Conversation

@yuplus

@yuplus yuplus commented Jul 11, 2026

Copy link
Copy Markdown

拉取/合并请求描述:(PR description)

[

为什么提交这份PR (why to submit this PR)

FRDM-MCXA366(MCXA366)板载 FlexCAN0/1 与 TJA1057 收发器,但当前 MCXA BSP 的 CAN 驱动仅覆盖经典 CAN 基础能力,存在以下缺口:

  1. 不支持 CAN-FD:无法使用 RT_CAN_USING_CANFD、FD 帧收发及 Loopback 验证。
  2. 双路 CAN 不可用drv_can.c 缺少 CAN1 完整初始化、错误恢复与 Normal 模式收发逻辑;pin_mux.c 未配置 CAN1 引脚(P1_17 TX / P1_12 RX),can1 无法在硬件上工作。
  3. 外总线可靠性不足:Normal 模式下 TX 易因无 ACK 长时间阻塞;缺少 busoff 恢复、ESR1 诊断及 TX 后重启 RX,双节点互测不稳定。
  4. Keil 链接配置不足MCXA366_flash.scf 默认堆仅 1KB,双路 CAN 开启 RT_CAN_USING_HDRrt_can_open() 易因堆不足触发断言;GCC 侧 rtconfig.py 已为 32KB,Keil 需对齐。

本 PR 补齐 MCXA 共用 CAN 驱动与 FRDM-MCXA366 板级支持,使社区用户可在该板上进行 CAN-FD 片内回环及 CAN0↔CAN1 外总线互测。

你的解决方案是什么 (what is your solution)

1. 驱动层(bsp/nxp/mcx/mcxa/Libraries/drivers/drv_can.c
  • 增加 CAN-FD 支持:FLEXCAN_FDInit、FD 帧编解码、Loopback / Normal / Listen 模式。
  • 支持 CAN0 + CAN1 双控制器注册与独立 IRQ 处理。
  • Normal 模式改进:
    • TX 前 _can_recover_bus(),TX 后 _can_start_rx() 保证双向通信;
    • enableIndividMask = false + 全局 RX 掩码 0,接受标准帧;
    • TX 2s 超时 + _can_dump_err() 输出 ESR1/ACKERR,避免无应答时死等。
  • Loopback 模式:关闭 Individual Mask,配置全局滤波,支持 8/16 字节 FD 回环自测。
  • 显式使能 FlexCAN 时钟门控,修复 MDIS 断言问题。
2. 板级引脚(frdm-mcxa366/board/MCUX_Config/board/pin_mux.c

#ifdef BSP_USING_CAN1 下增加 CAN1 引脚复用,与 NXP SDK BOARD_InitCANPins 一致:

信号 引脚
CAN1_TXD PORT1_17
CAN1_RXD PORT1_12
3. Keil 链接脚本(board/linker_scripts/MCXA366_flash.scf

将默认堆由 0x0400(1KB)调整为 0x8000(32KB),与 GCC rtconfig.py__heap_size__=0x8000 一致,满足双路 CAN 设备打开时的动态内存需求。

4. 使用方式(需在 menuconfig 中启用)
RT_USING_CAN
RT_CAN_USING_CANFD
RT_CAN_USING_HDR
BSP_USING_CAN
BSP_USING_CAN0
BSP_USING_CAN1

修改 .config 后执行:

scons --pyconfig-silent
5. 建议验证步骤
步骤 命令 条件
片内回环 canfd_loopback_test 无需外接线
双路诊断 canfd_dual_diag 确认 can0/can1 注册
双路互测 canfd_dual_test JP7 短接;J16↔J17 短接 CAN_H/CAN_L/GND

请提供验证的bsp和config (provide the config and bsp)

  • BSP: bsp/nxp/mcx/mcxa/frdm-mcxa366
  • .config:
CONFIG_RT_USING_CAN=y
CONFIG_RT_CAN_USING_HDR=y
CONFIG_RT_CAN_USING_CANFD=y
CONFIG_RT_CANMSG_BOX_SZ=16
CONFIG_RT_CANSND_BOX_NUM=1
CONFIG_RT_CANSND_MSG_TIMEOUT=100
CONFIG_RT_CAN_NB_TX_FIFO_SIZE=1024
# CONFIG_RT_CAN_MALLOC_NB_TX_BUFFER is not set

CONFIG_BSP_USING_CAN=y
CONFIG_BSP_USING_CAN0=y
CONFIG_BSP_USING_CAN1=y
验证截图

CAN0与CAN1直接短接

CAN0 CAN1
PIN-1 PIN-1
PIN-2 PIN-2
PIN-4 PIN-4

PIN-3是电源,不用接。

1c3f9c2aa1dec8ada07e6430d75c3e4c

FDCAN0 环回测试
image

经典CAN 8字节通信
image

FDCAN0 <---> FDCAN1
image

image

]

当前拉取/合并请求的状态 Intent for your PR

必须选择一项 Choose one (Mandatory):

  • 本拉取/合并请求是一个草稿版本 This PR is for a code-review and is intended to get feedback
  • 本拉取/合并请求是一个成熟版本 This PR is mature, and ready to be integrated into the repo

代码质量 Code Quality:

我在这个拉取/合并请求中已经考虑了 As part of this pull request, I've considered the following:

  • 已经仔细查看过代码改动的对比 Already check the difference between PR and old code
  • 代码风格正确,包括缩进空格,命名及其他风格 Style guide is adhered to, including spacing, naming and other styles
  • 没有垃圾代码,代码尽量精简,不包含#if 0代码,不包含已经被注释了的代码 All redundant code is removed and cleaned up
  • 所有变更均有原因及合理的,并且不会影响到其他软件组件代码或BSP All modifications are justified and not affect other components or BSP
  • 对难懂代码均提供对应的注释 I've commented appropriately where code is tricky
  • 代码是高质量的 Code in this PR is of high quality
  • 已经使用clang-format 源码格式化工具确保格式符合RT-Thread代码规范 This PR has been formatted with clang-format and complies with RT-Thread code specification
  • 如果是新增bsp, 已经添加ci检查到.github/ALL_BSP_COMPILE.json 详细请参考链接BSP自查

@yuplus yuplus requested a review from Rbb666 as a code owner July 11, 2026 06:46
@github-actions github-actions Bot added BSP: NXP Code related with NXP BSP labels Jul 11, 2026
@github-actions

Copy link
Copy Markdown

👋 感谢您对 RT-Thread 的贡献!Thank you for your contribution to RT-Thread!

为确保代码符合 RT-Thread 的编码规范,请在你的仓库中执行以下步骤运行代码格式化工作流(如果格式化CI运行失败)。
To ensure your code complies with RT-Thread's coding style, please run the code formatting workflow by following the steps below (If the formatting of CI fails to run).


🛠 操作步骤 | Steps

  1. 前往 Actions 页面 | Go to the Actions page
    点击进入工作流 → | Click to open workflow →

  2. 点击 Run workflow | Click Run workflow

  • 设置需排除的文件/目录(目录请以"/"结尾)
    Set files/directories to exclude (directories should end with "/")
  • 将目标分支设置为 \ Set the target branch to:feature/dual_canfd
  • 设置PR number为 \ Set the PR number to:11609
  1. 等待工作流完成 | Wait for the workflow to complete
    格式化后的代码将自动推送至你的分支。
    The formatted code will be automatically pushed to your branch.

完成后,提交将自动更新至 feature/dual_canfd 分支,关联的 Pull Request 也会同步更新。
Once completed, commits will be pushed to the feature/dual_canfd branch automatically, and the related Pull Request will be updated.

如有问题欢迎联系我们,再次感谢您的贡献!💐
If you have any questions, feel free to reach out. Thanks again for your contribution!

@github-actions

github-actions Bot commented Jul 11, 2026

Copy link
Copy Markdown

📌 Code Review Assignment

🏷️ Tag: bsp_mcxa

Reviewers: @hywing

Changed Files (Click to expand)
  • bsp/nxp/mcx/mcxa/Libraries/drivers/drv_can.c
  • bsp/nxp/mcx/mcxa/frdm-mcxa366/applications/can_fd_dual_test.c
  • bsp/nxp/mcx/mcxa/frdm-mcxa366/applications/can_fd_loopback_sample.c
  • bsp/nxp/mcx/mcxa/frdm-mcxa366/board/MCUX_Config/board/pin_mux.c
  • bsp/nxp/mcx/mcxa/frdm-mcxa366/board/linker_scripts/MCXA366_flash.scf
  • bsp/nxp/mcx/mcxa/frdm-mcxa366/project.uvprojx

📊 Current Review Status (Last Updated: 2026-07-11 14:53 CST)


📝 Review Instructions

  1. 维护者可以通过单击此处来刷新审查状态: 🔄 刷新状态
    Maintainers can refresh the review status by clicking here: 🔄 Refresh Status

  2. 确认审核通过后评论 LGTM/lgtm
    Comment LGTM/lgtm after confirming approval

  3. PR合并前需至少一位维护者确认
    PR must be confirmed by at least one maintainer before merging

ℹ️ 刷新CI状态操作需要具备仓库写入权限。
ℹ️ Refresh CI status operation requires repository Write permission.

@CLAassistant

CLAassistant commented Jul 11, 2026

Copy link
Copy Markdown

CLA assistant check
All committers have signed the CLA.

@yuplus yuplus force-pushed the feature/dual_canfd branch from b484fbd to cebea70 Compare July 11, 2026 06:52
@yuplus yuplus changed the title CANFD BSP driver support and examples MCX/A366 CANFD BSP driver support and examples Jul 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

BSP: NXP Code related with NXP BSP

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants