如何在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核心板,穩定可靠的工控機。


相關產品>

  • 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核心板
  • G2L工業網關

     CPU:瑞薩G2L 架構:Cortex A55 主頻:1 2GHz 內存:2Gyte DDR4工業級 Flash:16Mbyte SPI f...


    了解詳情
    G2L工業網關
  • AM6254工控板

    ●CPU:TI AM62XCortex A53 單核 雙核 四核●架構:Cortex A53●主頻:1 4GHZ●內存:2GByte ...


    了解詳情
    AM6254工控板