2024-12-7 14:30
179 次阅读|
0 个评论
“SPI转CAN-FD”是嵌入式开发领域的常用方法,它极大地促进了不同通信接口之间的无缝连接,并显著降低了系统设计的复杂性。飞凌嵌入式依托瑞芯微RK3562J处理器打造的OK3562J-C开发板因为内置了SPI转CAN-FD驱动,从而原生支持这一功能。该开发板特别设计了一组SPI引脚【P8】,专为SPI转CAN-FD应用而引出,为用户提供了极大的便利。 MCP2518FD是一款在各行业中都有着广泛应用的CAN-FD控制器芯片,本文就将为大家介绍如何在飞凌嵌入式RK3562J开发板上适配MCP2518FD芯片。 1、适配驱动 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 2、适配设备树 (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 = ; + clock-frequency = ; + }; + forlinx-control { status = "disabled"; disp_type = "mipi"; //mipi or lvds @@ -662,6 +668,13 @@ }; &pinctrl { + + mcp2518 { + mcp2518_irq_pins:mcp2518_irq_pins { + rockchip,pins = ; + }; + }; + touch { gt928_lvds_gpio:gt928-lvds-gpio { rockchip,pins = , @@ -980,13 +993,24 @@ &spi2 { + pinctrl-names = "default"; + pinctrl-0 = ; status = "okay"; - spi_dev0: spi@0 { +/* spi_dev0: spi@0 { compatible = "rohm,dh2228fv"; 2 / 5 pl022,com-mode = ; spi-max-frequency = ; reg = ; status = "okay"; + };*/ + spi@0{ + compatible = "microchip,mcp2518fd"; + reg = ; + clocks = ; + pinctrl-names = "default"; + pinctrl-0 = ; + spi-max-frequency = ; + interrupts-extended= ; }; }; ① mcp2518_clk 是时钟频率节点,要匹配模块实际的晶振频率; ② 模块上有的 INT 脚是模块的中断脚,在适配时需要连接一个可控的GPIO引脚作为终端脚; ③ 在 spi2 节点下添加匹配MCP2518驱动的设备树信息, compatible 信息不能出错,这是匹配驱动的重要属性。 3、编译烧写 将以上的驱动和设备树配置好后,编译内核烧写进开发板就可以测试了: (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选项前面打勾,点击执行进行烧写,烧写完成会自动重启开发板 4、功能测试 在开发板内搜索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模块的全部过程,希望能够对大家的项目开发有所帮助。