MCP2518FD外部CAN-FD控制器的调试方法

发布时间:2025-4-25 11:56    发布者:秦彻呀呀呀
关键词: CAN-FD
“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驱动:
微信图片_2025-04-25_113622_240.png
上图中的CAN_MCP251XFD就是适配MCP2518FD模块的驱动。
(2) 选择 2 将其打 * 编译进内核:
微信图片_2025-04-25_113636_152.png
(3)选择 save 保存配置到defconfig文件,文件路径:
/home/forlinx/3562/OK3562-linuxsource/kernel/arch/arm64/configs/OK3562_Linux_defconfig
2.适配设备树
(1) 飞凌嵌入式RK3562J开发板已引出一组SPI引脚:
微信图片_2025-04-25_113639_856.png
(2) 驱动配置完成后要配置的是设备树文件:
OK3562-C-common.dtsi
(3) 具体的配置信息如下:
  1. diff --git a/arch/arm64/boot/dts/rockchip/OK3562-C-common.dtsi b/arch/arm64/boot/dts/rockchip/OK3562-C-common.dtsiindex 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 / 5pl022,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 信息不能出错,这是匹配驱动的重要属性。
3.编译烧写
将以上的驱动和设备树配置好后,编译内核烧写进开发板就可以测试了:
(1) 在源码目录下单独编译kernel:
  1. forlinx@ubuntu:~/3562/OK3562-linux-source$ ./build.sh kernel
复制代码
在源码目录下的kernel目录下会生成镜像文件 boot.img
(2) 将镜像文件烧录到开发板,需要用到工具 RKDevTool ,此工具在OK3562的资料包里可以找到:
① 打开烧写工具;
② 用Type-C数据线连接PC和开发板底部的Type-C0接口;
③ 按住开发板的Recovery键不要松开,重启开发板;
④ 注意工具会识别到开发板是否进入烧录状态。
微信图片_2025-04-25_113643_184.png
⑤ 择之前编译好的 boot.img 镜像文件,在boot选项前面打勾,点击执行进行烧写,烧写完成会自动重启开发板
4.功能测试
在开发板内搜索can节点,使用 ifconfig -a 命令
微信图片_2025-04-25_113646_696.png
可以看到生成的can0节点。接下来的功能测试,我们采用OK3562J-C和OK3568-C两块开发板的can0进行数据互发测试。
(1) OK3562J-C开发板接收数据:
① 设置can0的波特率
  1. ip link set can0 type can bitrate 500000
复制代码
② 打开can0设备,并把can0设置成服务端接收数据
  1. ifconfig can0 up //打开can0设备
复制代码
微信图片_2025-04-25_113650_048.png
③ 配置OK3568-C开发板的can0作为客户端,发送信息给OK3562J-C开发板的can0
  1. ifconfig can0 down
复制代码
微信图片_2025-04-25_113654_560.png
④ OK3562J-C开发板会收到OK3568发来的消息
(注:上图中出现的报错是MCP2518FD驱动的问题,测试不会影响通信。)
(2) OK3562J-C开发板发送数据:
① 设置波特率等操作同上,在配置功能时要使用 cansend 命令发送数据。
微信图片_2025-04-25_113702_904.png
② OK3568-C依照OK3562-C的方法配置成接收数据的服务端。
  1. ifconfig can0 down
复制代码
微信图片_2025-04-25_113706_575.png
可以看到,两块开发板可以进行正常的数据互发。以上是飞凌嵌入式RK3562J开发板适配和测试MCP2518FD模块的全部过程,希望能够对大家的项目开发有所帮助。

微信图片_2025-04-25_113658_904.png
本文地址:https://www.eechina.com/thread-886435-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

  • Microchip视频专区
  • 基于CEC1712实现的处理器SPI FLASH固件安全弹性方案培训教程
  • 想要避免发生灾难,就用MPLAB® SiC电源仿真器!
  • 无线充电基础知识及应用培训教程3
  • 安静高效的电机控制——这才是正确的方向!
  • 贸泽电子(Mouser)专区
关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表