如何在RK3568工控板的Linux中配置CAN總線
在工業控制和自動化領域,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核心板,穩定可靠的工控機。
EN