1. 从零开始:为什么要在RK3562J上折腾MCP2518FD?
如果你正在用飞凌嵌入式的OK3562J-C开发板做项目,尤其是涉及汽车电子、工业控制或者机器人这些领域,那你大概率绕不开一个东西:CAN总线。传统的CAN总线大家可能都熟悉,但它的升级版——CAN-FD(CAN with Flexible Data-Rate),能跑得更快,数据包也能塞得更多,现在已经是很多新项目的标配了。不过,RK3562J这颗芯片本身并没有集成CAN-FD控制器,这时候,外挂一个专用的控制器芯片就成了最靠谱的选择。
MCP2518FD就是这类芯片里的“明星选手”,来自Microchip,性能稳定,资料也全。而“SPI转CAN-FD”这个玩法,可以说是嵌入式工程师的经典操作了。它相当于给你的主控芯片(比如RK3562J)接上了一个高性能的“翻译官”,主控通过最常用的SPI口发指令和数据,MCP2518FD这个“翻译官”就负责把它们转换成标准的CAN-FD帧在总线上收发。这么一来,你既不用换主控,又能轻松获得CAN-FD能力,系统设计也简单多了。
飞凌的OK3562J-C开发板非常贴心,它专门把一组SPI引脚(板子上的P8排针)引了出来,就是给这种外接CAN-FD控制器准备的。更棒的是,它用的Linux内核里,已经自带了MCP2518FD的驱动。所以,我们的工作并不是从零写驱动,而是“适配”和“调试”:把内核里现成的驱动配置好,然后告诉内核我们的硬件是怎么接的(也就是改设备树),最后编译测试。听起来是不是比想象中简单?接下来,我就带你一步步走完这个实战过程,把我自己调试时踩过的坑和总结的经验都分享给你。
2. 内核驱动配置:让系统认识新硬件
驱动是硬件和操作系统之间的桥梁。第一步,我们得确保这座“桥”被建好,并且包含在我们最终的系统镜像里。飞凌提供的Linux内核源码已经包含了MCP2518FD的驱动,我们需要做的是通过内核的配置系统,把它“勾选”上,编译进内核。
2.1 进入内核配置菜单
首先,你需要进入你的RK3562J Linux源码目录。通常,飞凌会提供完整的SDK包。假设你的源码放在 /home/forlinx/3562/OK3562-linux-source 目录下。我们配置和编译内核主要都在这个目录下的 kernel 子目录里操作。
打开终端,依次执行以下命令:
cd /home/forlinx/3562/OK3562-linux-source/kernel
make menuconfig ARCH=arm64
执行 make menuconfig 后,你会看到一个基于字符界面的图形化配置菜单。这就是Linux内核庞大而强大的配置中心,所有驱动、功能、协议都在这里开关。对于新手来说,这个界面可能有点眼花缭乱,别担心,我们有一个非常高效的工具——搜索。
2.2 搜索并启用MCP2518FD驱动
在配置菜单的任意界面,直接按下键盘的 / 键(即搜索键),屏幕下方会弹出一个搜索框。输入 mcp251 然后回车。因为驱动名称通常是 mcp251xfd,输入部分关键字就能快速定位。
搜索结果显示后,你会看到类似 CAN_MCP251XFD 的选项,这就是我们要找的MCP2518FD控制器驱动。搜索结果会告诉你这个配置项的位置,比如 -> Device Drivers -> Network device support -> CAN bus subsystem support -> CAN Device Drivers -> Microchip MCP251xFD SPI CAN controllers。
根据提示,按对应的数字键(比如按 2),可以直接跳转到该配置项所在的详细菜单。你也可以记下路径,自己一层层导航进去。找到 CAN_MCP251XFD 这一行后,按空格键可以切换它的状态。我们需要把它编译进内核(而不是编译成可加载模块),所以按空格直到它前面显示为 <*>(星号表示编译进内核)。如果显示 <M> 是编译成模块,<> 则是未选中。
这里有个小经验:对于这种基础的外设驱动,尤其是像CAN控制器这种在系统启动早期就可能要用到的,我强烈建议直接编译进内核(<*>),而不是编成模块(<M>)。编成模块的话,你还需要手动加载,在有些启动场景下可能会增加不必要的复杂度。直接编进内核最省心。
2.3 保存配置
配置完成后,一路按 Esc 键退出到主菜单,或者直接按左右方向键将光标移动到 &l

4096

被折叠的 条评论
为什么被折叠?



