RK3562J開發筆記 | MCP2518FD外部CAN-FD控制器的調試方法

原創 2024-12-06 16:47:00 RK3562 rk3562開發板

 “SPI轉CAN-FD”是嵌入式開發領域的常用方法,它極大地促進了不同通信接口之間的無縫連接,并顯著降低了系統設計的復雜性。飛凌嵌入式依托瑞芯微RK3562J處理器打造的OK3562J-C開發板因為內置了SPI轉CAN-FD驅動,從而原生支持這一功能。該開發板特別設計了一組SPI引腳【P8】,專為SPI轉CAN-FD應用而引出,為用戶提供了極大的便利。MCP2518FD是一款在各行業中都有著廣泛應用的CAN-FD控制器芯片,本文就將為大家介紹如何在飛凌嵌入式RK3562J開發板上適配MCP2518FD芯片。 

一、適配驅動

RK3562J的內核中已經具備MCP2518FD的驅動文件,要在配置文件中將驅動配置進內核,在kernel下打開圖形化配置界面make menuconfig ARCH=arm64。

(1) 按下 ‘/’ 鍵進入搜索界面,輸入 mcp251 可搜索MCP2518驅動:

上圖中的CAN_MCP251XFD就是適配MCP2518FD模塊的驅動。

(2) 選擇 2 將其打 * 編譯進內核:

(3)選擇 save 保存配置到defconfig文件,文件路徑: 

/home/forlinx/3562/OK3562-linuxsource/kernel/arch/arm64/configs/OK3562_Linux_defconfig

二、適配設備樹

(1) 飛凌嵌入式RK3562J開發板已引出一組SPI引腳:


(2) 驅動配置完成后要配置的是設備樹文件:

OK3562-C-common.dtsi

(3) 具體的配置信息如下:

diff --git a/arch/arm64/boot/dts/rockchip/OK3562-C-common.dtsi b/arch/arm64/boot/dts/rockchip/OK3562-C-common.dtsi
index 158f03d70..671a491bf 100644
--- a/arch/arm64/boot/dts/rockchip/OK3562-C-common.dtsi
+++ b/arch/arm64/boot/dts/rockchip/OK3562-C-common.dtsi
@@ -19,6 +19,12 @@
model = "Forlinx OK3562 Board";
compatible = "forlinx,ok3562","rockchip,rk3562";
+     mcp2518_clk: mcp2518-clk {
+     compatible = "fixed-clock";
+     #clock-cells = <0>;
+     clock-frequency = <40000000>;
+     };
+
forlinx-control {
status = "disabled";
disp_type = "mipi"; //mipi or lvds
@@ -662,6 +668,13 @@
};
&pinctrl {
+
+ mcp2518 {
+ mcp2518_irq_pins:mcp2518_irq_pins {
+ rockchip,pins = <4 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+
touch {
gt928_lvds_gpio:gt928-lvds-gpio {
rockchip,pins = <3 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>,
@@ -980,13 +993,24 @@
&spi2 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&spi2m0_csn0 &spi2m0_csn1 &spi2m0_pins>;
status = "okay";
- spi_dev0: spi@0 {
+/* spi_dev0: spi@0 {
compatible = "rohm,dh2228fv";
2 / 5
pl022,com-mode = <1>;
spi-max-frequency = <10000000>;
reg = <0>;
status = "okay";
+ };*/
+     spi@0{
+     compatible = "microchip,mcp2518fd";
+     reg = <0>;
+     clocks = <&mcp2518_clk>;
+     pinctrl-names = "default";
+     pinctrl-0 = <&mcp2518_irq_pins>;
+     spi-max-frequency = <20000000>;
+     interrupts-extended= <&gpio4 RK_PB0 IRQ_TYPE_LEVEL_LOW>;
    };
};

① mcp2518_clk 是時鐘頻率節點,要匹配模塊實際的晶振頻率;

② 模塊上有的 INT 腳是模塊的中斷腳,在適配時需要連接一個可控的GPIO引腳作為終端腳;

③ 在 spi2 節點下添加匹配MCP2518驅動的設備樹信息,compatible 信息不能出錯,這是匹配驅動的重要屬性。

三、編譯燒寫

將以上的驅動和設備樹配置好后,編譯內核燒寫進開發板就可以測試了:

(1) 在源碼目錄下單獨編譯kernel:

forlinx@ubuntu:~/3562/OK3562-linux-source$ ./build.sh kernel

在源碼目錄下的kernel目錄下會生成鏡像文件 boot.img

(2) 將鏡像文件燒錄到開發板,需要用到工具 RKDevTool ,此工具在OK3562的資料包里可以找到:

① 打開燒寫工具;

② 用Type-C數據線連接PC和開發板底部的Type-C0接口;

③ 按住開發板的Recovery鍵不要松開,重啟開發板;

④ 注意工具會識別到開發板是否進入燒錄狀態。

⑤ 擇之前編譯好的 boot.img 鏡像文件,在boot選項前面打勾,點擊執行進行燒寫,燒寫完成會自動重啟開發板

四、功能測試

在開發板內搜索can節點,使用 ifconfig -a 命令

可以看到生成的can0節點。接下來的功能測試,我們采用OK3562J-C和OK3568-C兩塊開發板的can0進行數據互發測試。

(1) OK3562J-C開發板接收數據:

① 設置can0的波特率

ip link set can0 type can bitrate 500000

② 打開can0設備,并把can0設置成服務端接收數據 

ifconfig can0 up //打開can0設備 
candump can0& //can0設備設置成服務端

③ 配置OK3568-C開發板的can0作為客戶端,發送信息給OK3562J-C開發板的can0

ifconfig can0 down 
ip link set can0 up type can bitrate 500000 
ifconfig can0 up 
cansend can0 123#1122334aabbccd //發送信息

④ OK3562J-C開發板會收到OK3568發來的消息

(注:上圖中出現的報錯是MCP2518FD驅動的問題,測試不會影響通信。)

(2) OK3562J-C開發板發送數據:

① 設置波特率等操作同上,在配置功能時要使用 cansend 命令發送數據。

② OK3568-C依照OK3562-C的方法配置成接收數據的服務端。

ifconfig can0 down 
ip link set can0 up type can bitrate 500000 
ifconfig can0 up 
candump can0&

可以看到,兩塊開發板可以進行正常的數據互發。以上是飛凌嵌入式RK3562J開發板適配和測試MCP2518FD模塊的全部過程,希望能夠對大家的項目開發有所幫助。


相關產品 >

  • OK3562J-C開發板

    RK3562開發板,采用核心板+底板分體式設計,CPU采用瑞芯微工業級芯片RK3562J設計,RK3562J是瑞芯微專為工業自動化及消費類電子設備打造的一款高性能、低功耗國產化應用處理器,集成了4個ARM Cortex-A53高性能核,主頻高達1.8GHz。RK3562核心板采用3組80Pin板對板連接器,可插拔式設計便于產品的安裝與維護。 了解詳情
    OK3562J-C開發板
  • FET3562J-C核心板

    RK3562核心板,采用高性能低功耗工業級芯片RK3562J設計,RK3562J是瑞芯微專為工業自動化及消費類電子設備打造的一款高性能、低功耗國產化應用處理器,集成了4個ARM Cortex-A53高性能核,主頻高達1.8GHz。RK3562核心板采用3組80Pin板對板連接器,可插拔式設計便于產品的安裝與維護。 了解詳情
    FET3562J-C核心板

推薦閱讀 換一批 換一批