如何在RK3568工控板的Linux中配置CAN總線
在工業(yè)控制和自動化領(lǐng)域,CAN (Controller Area Network) 總線因其高可靠性和實(shí)時性,被廣泛應(yīng)用于各類設(shè)備通信。本文將以維芯科的WTB-RK3568-S工控板為例,詳細(xì)介紹如何在 Linux 環(huán)境中配置和使用 CAN 總線。RK3568 芯片是瑞芯微推出的一款低功耗、高性能的四核ARM SoC,集成了豐富的接口和多媒體功能,使其非常適合用于工業(yè)控制、物聯(lián)網(wǎng)和嵌入式設(shè)備等場景。通過本文的指引,開發(fā)者可以快速上手配置 CAN 總線。
1. 硬件基礎(chǔ)與驅(qū)動加載
在開始配置之前,請確保你手中的 維芯科WTB-RK3568-S工控板 上的 CAN 收發(fā)器已正確連接。大多數(shù)工控板會集成 CAN 控制器,其驅(qū)動程序通常已包含在 Linux 內(nèi)核中。我們的任務(wù)是啟用這些驅(qū)動并配置好硬件資源。
2. 設(shè)備樹 (Device Tree) 配置
設(shè)備樹(Device Tree) 是 Linux 內(nèi)核用來描述硬件資源的文件,它告訴內(nèi)核有哪些硬件設(shè)備以及如何與它們交互。對于 RK3568,CAN 控制器需要在設(shè)備樹文件中進(jìn)行啟用和配置。
通常,你可以在 arch/arm64/boot/dts/rockchip/ 目錄下找到你的設(shè)備樹文件,例如 rk3568-xxxx-board.dts。在該文件中,你需要找到或添加如下所示的 CAN 控制器節(jié)點(diǎn)。
DTS:
// CAN1 控制器配置
&can1 {
compatible = "rockchip,rk3568-can-2.0"; // 兼容性,匹配驅(qū)動程序
assigned-clocks = <&cru clk_can1="">; // 指定時鐘源
assigned-clock-rates =<200000000>; // 設(shè)置時鐘頻率為 200MHz
pinctrl-names = "default"; // 引腳控制名稱
pinctrl-0 = <&can1m1_pins>; // 指定 CAN1 的引腳配置
status = "okay"; // 啟用此設(shè)備節(jié)點(diǎn)
};
// CAN2 控制器配置
&can2 {
compatible = "rockchip,rk3568-can-2.0"; // 兼容性,匹配驅(qū)動程序
assigned-clocks = <&cru clk_can2="">; // 指定時鐘源
assigned-clock-rates =<200000000>; // 設(shè)置時鐘頻率為 200MHz
pinctrl-names = "default"; // 引腳控制名稱
pinctrl-0 = <&can2m0_pins>; // 指定 CAN2 的引腳配置
status = "okay"; // 啟用此設(shè)備節(jié)點(diǎn)
};
這段配置定義了兩個 CAN 控制器:CAN1 和 CAN2。status = "okay" 確保了這兩個控制器在系統(tǒng)啟動時會被啟用。assigned-clock-rates 設(shè)置的時鐘頻率是 CAN 波特率計算的基礎(chǔ),這里我們設(shè)置為 200MHz。pinctrl-0 則指向了具體的 GPIO 引腳配置,確保 CAN_TX 和 CAN_RX 引腳能夠正常工作。完成修改后,你需要重新編譯設(shè)備樹并更新到工控板上。
3. 內(nèi)核 defconfig 配置
除了設(shè)備樹,我們還需要在內(nèi)核配置文件中啟用相應(yīng)的 CAN 驅(qū)動模塊。找到你的內(nèi)核 defconfig 文件(通常是 rockchip_defconfig),并確保以下配置項(xiàng)被設(shè)置為 y:
CONFIG_CAN=y // 啟用 Linux 內(nèi)核的 CAN 核心支持
CONFIG_CAN_DEV=y // 啟用 CAN 設(shè)備驅(qū)動框架
CONFIG_CAN_ROCKCHIP=y // 啟用 Rockchip 的 CAN 控制器驅(qū)動
CONFIG_CANFD_ROCKCHIP=y // 啟用 Rockchip 的 CAN-FD 支持(可選)
這些配置項(xiàng)將使能 Linux 內(nèi)核中的 CAN 子系統(tǒng),并加載針對 Rockchip 芯片的專用 CAN 驅(qū)動,從而讓系統(tǒng)能夠識別和操作 CAN 控制器。修改后,同樣需要重新編譯內(nèi)核并更新到工控板。
4. 配置與測試
在完成設(shè)備樹和內(nèi)核的配置并重新啟動系統(tǒng)后,CAN 設(shè)備應(yīng)該被正確識別為 can0 和 can1。接下來,我們可以使用 ip 和 can-utils 工具來配置和測試 CAN 總線。
4.1 安裝can-utils工具包
首先,你需要安裝 can-utils 工具包:
sudo apt-get install can-utils
配置 CAN 接口,使用 ip 命令配置 CAN 接口的波特率并將其啟用。我們將兩個接口都設(shè)置為 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
執(zhí)行上述命令后,你可以使用 ip link show can0 或 ip -details link show can1 查看接口狀態(tài),確認(rèn)它們已成功啟動。
發(fā)送與接收測試。接下來,我們進(jìn)行簡單的環(huán)回測試,以驗(yàn)證 CAN 總線是否正常工作。如果你有兩個物理 CAN 接口并已將其連接,你可以通過一個接口發(fā)送,另一個接口接收來測試。
4.2 測試步驟:
在一個終端中,啟動 candump 命令監(jiān)聽 can0 接口:
candump can0
此時終端將等待接收來自 can0 的數(shù)據(jù)。在另一個終端中,向 can1 接口發(fā)送一條 CAN 報文:
cansend can1 123#1122334455667788
這條命令發(fā)送的報文 ID 為 123,數(shù)據(jù)為 1122334455667788。
你可以在第一個終端中看到 can0 接收到了這條報文,這證明了兩個 CAN 接口間的通信是成功的。輸出類似這樣:
can0 123 [8] 11 22 33 44 55 66 77 88
為了進(jìn)行反向測試,我們在 can1 上啟動監(jiān)聽:
candump can1
在新的終端中,向 can0 發(fā)送一條報文:
cansend can0 123#1122334455667799
在 candump 的終端中,你將看到 can1 接收到了這條報文,至此,CAN 雙向通信測試成功。
5. 總結(jié)
通過以上步驟,你可以在 維芯科的WTB-RK3568-S工控板 上成功配置和使用 CAN 總線。這些基礎(chǔ)配置和測試方法對于后續(xù)的 CAN 應(yīng)用開發(fā)至關(guān)重要。
杭州維芯科電子有限公司作為專業(yè)的主板設(shè)計公司,在RK芯片上,歡迎隨時聯(lián)系維芯科,我司提供的自主設(shè)計RK3568核心板,穩(wěn)定可靠的工控機(jī)。
相關(guān)產(chǎn)品>
-
RK3588工控板
●CPU:Rockchip RK3588●架構(gòu):四核Cortex-A76 + 四核Cortex-A55●NPU:6TOPS●內(nèi)存:4GB 8GB 16GB LPDDR4x●Flash:32GB
了解詳情
-
瑞芯微RK3588核心板
●CPU:RK3588 RK3588J●架構(gòu):四核Cortex-A76 +四核Cortex-A55●NPU:6TOPS●RAM:4GB(默認(rèn)) 8GB 16GB LPDDR4x●ROM:32GB(默認(rèn)
了解詳情
-
G2L工業(yè)網(wǎng)關(guān)
CPU:瑞薩G2L 架構(gòu):Cortex A55 主頻:1 2GHz 內(nèi)存:2Gyte DDR4工業(yè)級 Flash:16Mbyte SPI f...
了解詳情
-

EN