如何在RK3568工控板的Linux中配置CAN总线

原创 2025-08-09 09:54:36

  在工业控制和自动化领域,CAN (Controller Area Network) 总线因其高可靠性和实时性,被广泛应用于各类设备通信。本文将以维芯科的WTB-RK3568-S工控板为例,详细介绍如何在 Linux 环境中配置和使用 CAN 总线。RK3568 芯片是瑞芯微推出的一款低功耗、高性能的四核ARM SoC,集成了丰富的接口和多媒体功能,使其非常适合用于工业控制、物联网和嵌入式设备等场景。通过本文的指引,开发者可以快速上手配置 CAN 总线。

  1. 硬件基础与驱动加载

  在开始配置之前,请确保你手中的 维芯科WTB-RK3568-S工控板 上的 CAN 收发器已正确连接。大多数工控板会集成 CAN 控制器,其驱动程序通常已包含在 Linux 内核中。我们的任务是启用这些驱动并配置好硬件资源。

  2. 设备树 (Device Tree) 配置

  设备树(Device Tree) 是 Linux 内核用来描述硬件资源的文件,它告诉内核有哪些硬件设备以及如何与它们交互。对于 RK3568,CAN 控制器需要在设备树文件中进行启用和配置。

  通常,你可以在 arch/arm64/boot/dts/rockchip/ 目录下找到你的设备树文件,例如 rk3568-xxxx-board.dts。在该文件中,你需要找到或添加如下所示的 CAN 控制器节点。

DTS:

  // CAN1 控制器配置

  &can1 {

  compatible = "rockchip,rk3568-can-2.0"; // 兼容性,匹配驱动程序

  assigned-clocks = <&cru clk_can1="">; // 指定时钟源

  assigned-clock-rates =<200000000>; // 设置时钟频率为 200MHz

  pinctrl-names = "default"; // 引脚控制名称

  pinctrl-0 = <&can1m1_pins>; // 指定 CAN1 的引脚配置

  status = "okay"; // 启用此设备节点

  };

  // CAN2 控制器配置

  &can2 {

  compatible = "rockchip,rk3568-can-2.0"; // 兼容性,匹配驱动程序

  assigned-clocks = <&cru clk_can2="">; // 指定时钟源

  assigned-clock-rates =<200000000>; // 设置时钟频率为 200MHz

  pinctrl-names = "default"; // 引脚控制名称

  pinctrl-0 = <&can2m0_pins>; // 指定 CAN2 的引脚配置

  status = "okay"; // 启用此设备节点

  };


  这段配置定义了两个 CAN 控制器:CAN1 和 CAN2。status = "okay" 确保了这两个控制器在系统启动时会被启用。assigned-clock-rates 设置的时钟频率是 CAN 波特率计算的基础,这里我们设置为 200MHz。pinctrl-0 则指向了具体的 GPIO 引脚配置,确保 CAN_TX 和 CAN_RX 引脚能够正常工作。完成修改后,你需要重新编译设备树并更新到工控板上。

  3. 内核 defconfig 配置

  除了设备树,我们还需要在内核配置文件中启用相应的 CAN 驱动模块。找到你的内核 defconfig 文件(通常是 rockchip_defconfig),并确保以下配置项被设置为 y:

  CONFIG_CAN=y // 启用 Linux 内核的 CAN 核心支持

  CONFIG_CAN_DEV=y // 启用 CAN 设备驱动框架

  CONFIG_CAN_ROCKCHIP=y // 启用 Rockchip 的 CAN 控制器驱动

  CONFIG_CANFD_ROCKCHIP=y // 启用 Rockchip 的 CAN-FD 支持(可选)

  这些配置项将使能 Linux 内核中的 CAN 子系统,并加载针对 Rockchip 芯片的专用 CAN 驱动,从而让系统能够识别和操作 CAN 控制器。修改后,同样需要重新编译内核并更新到工控板。

  4. 配置与测试

  在完成设备树和内核的配置并重新启动系统后,CAN 设备应该被正确识别为 can0 和 can1。接下来,我们可以使用 ip 和 can-utils 工具来配置和测试 CAN 总线。

  4.1 安装can-utils工具包

  首先,你需要安装 can-utils 工具包:

  sudo apt-get install can-utils

  配置 CAN 接口,使用 ip 命令配置 CAN 接口的波特率并将其启用。我们将两个接口都设置为 1Mbps 的波特率。

  # 配置 can0 接口,波特率为 1Mbps 并启用

  sudo ip link set can0 up type can bitrate 1000000

  # 配置 can1 接口,波特率为 1Mbps 并启用

  sudo ip link set can1 up type can bitrate 1000000

  执行上述命令后,你可以使用 ip link show can0 或 ip -details link show can1 查看接口状态,确认它们已成功启动。

  发送与接收测试。接下来,我们进行简单的环回测试,以验证 CAN 总线是否正常工作。如果你有两个物理 CAN 接口并已将其连接,你可以通过一个接口发送,另一个接口接收来测试。

  4.2 测试步骤:

  在一个终端中,启动 candump 命令监听 can0 接口:

  candump can0

  此时终端将等待接收来自 can0 的数据。在另一个终端中,向 can1 接口发送一条 CAN 报文:

  cansend can1 123#1122334455667788

  这条命令发送的报文 ID 为 123,数据为 1122334455667788。

  你可以在第一个终端中看到 can0 接收到了这条报文,这证明了两个 CAN 接口间的通信是成功的。输出类似这样:

  can0 123 [8] 11 22 33 44 55 66 77 88

  为了进行反向测试,我们在 can1 上启动监听:

  candump can1

  在新的终端中,向 can0 发送一条报文:

  cansend can0 123#1122334455667799

  在 candump 的终端中,你将看到 can1 接收到了这条报文,至此,CAN 双向通信测试成功。

  5. 总结

  通过以上步骤,你可以在 维芯科的WTB-RK3568-S工控板 上成功配置和使用 CAN 总线。这些基础配置和测试方法对于后续的 CAN 应用开发至关重要。

  杭州维芯科电子有限公司作为专业的主板设计公司,在RK芯片上,欢迎随时联系维芯科,我司提供的自主设计RK3568核心板,稳定可靠的工控机。


相关产品>

  • T153工控板

    ●CPU:T153,4核处理器,最高主频1 6GHz●MCU:600-MHz RISC-V E907●RAM:256MB 512MB 1GB DDR3●NAND:256MB 512MB NAND Flash●eM


    了解详情
    T153工控板
  • 全志T153核心板

    ●CPU:T153,4核处理器,最高主频1 6GHz●MCU:600-MHz RISC-V E907●RAM:256MB 512MB 1GB DDR3...


    了解详情
    全志T153核心板
  • RK3588工控板

    ●CPU:Rockchip RK3588●架构:四核Cortex-A76 + 四核Cortex-A55●NPU:6TOPS●内存:4GB 8GB 16GB LPDDR4x●Flash:32GB


    了解详情
    RK3588工控板
  • 瑞芯微RK3588核心板

    ●CPU:RK3588 RK3588J●架构:四核Cortex-A76 +四核Cortex-A55●NPU:6TOPS●RAM:4GB(默认) 8GB 16GB LPDDR4x●ROM:32GB(默认


    了解详情
    瑞芯微RK3588核心板