[color=rgba(0, 0, 0, 0.9)]飞凌嵌入式OKMX8MP-C开发板有两路原生CAN总线,但用户在开发产品时可能需要用到更多的CAN,这该如何解决呢?今天小编将为大家介绍一种SPI转CAN的方法,供各位工程师小伙伴参考。
说明
- OKMX8MP-C核心板有两路原生的SPI总线,目前是将SPI1的引脚用作了LED和UART3的功能,SPI2做成了正常的SPI2接口。此处以SPI2转CAN为例,移植SPI转CAN芯片;
- SPI转CAN芯片型号为:MCP2518,这款芯片可转出CAN-FD,若只需要CAN功能,可参照该方式移植MCP2515或其他芯片;
- 本次移植的MCP2518芯片驱动来源是i.MX8MQ的源码(处理器中默认移植MCP2518芯片)。
01移植MC2518芯片驱动
[color=rgba(0, 0, 0, 0.9)]在OK8MP-linux-kernel/drivers/net/can/spi/路径下创建一个文件夹——mcp25xxfd,将相关文件(包含.c文件、.h文件、Makefile、Kconfig等)放置到此文件夹中。
02补全对can_rx_offload_add_manual函数的定义
[color=rgba(0, 0, 0, 0.9)]vi OK8MQ-linux-kernel/include/linux/can/rx-offload.h
[color=rgba(0, 0, 0, 0.9)]添加:
[color=rgba(0, 0, 0, 0.9)]vi OK8MQ-linux-kernel/drivers/net/can/rx-offload.c
[color=rgba(0, 0, 0, 0.9)]添加:
[color=rgba(0, 0, 0, 0.9)]
03修改上一级目录spi/下的Makefile和Kconfig[color=rgba(0, 0, 0, 0.9)]vi OK8MP-linux-kernel/drivers/net/can/spi/Makefile
[color=rgba(0, 0, 0, 0.9)]添加:
[color=rgba(0, 0, 0, 0.9)]vi OK8MP-linux-kernel/drivers/net/can/spi/Kconfig
[color=rgba(0, 0, 0, 0.9)]添加:
04修改驱动配置文件,将MCP2518编译进内核
[color=rgba(0, 0, 0, 0.9)]vi OK8MP-linux-kernel/arch/arm64/configs/OK8MP-C_defconfig
[color=rgba(0, 0, 0, 0.9)]找到:CONFIG_CAN_MCP251X=y
[color=rgba(0, 0, 0, 0.9)]改为:# CONFIG_CAN_MCP251X is not set
[color=rgba(0, 0, 0, 0.9)]添加:CONFIG_CAN_MCP25XXFD=y
05在设备树中配置时钟
[color=rgba(0, 0, 0, 0.9)]vi OK8MP-linux-kernel/arch/arm64/boot/dts/freescale/OK8MP-C.dts
[color=rgba(0, 0, 0, 0.9)]添加:
[color=rgba(0, 0, 0, 0.9)]
06找一个引脚用作芯片的中断引脚[color=rgba(0, 0, 0, 0.9)]此处是将GPIO4_IO21用作了中断引脚。
[color=rgba(0, 0, 0, 0.9)]vi OK8MP-linux-kernel/arch/arm64/boot/dts/freescale/OK8MP-C.dts
[color=rgba(0, 0, 0, 0.9)]添加:
[color=rgba(0, 0, 0, 0.9)]
07在设备树的ecspi2节点中进行修改[color=rgba(0, 0, 0, 0.9)]vi OK8MP-linux-kernel/arch/arm64/boot/dts/freescale/OK8MP-C.dts
[color=rgba(0, 0, 0, 0.9)]从:
spidev1:spi@0 { reg= <0>; compatible= "rohm,dh2228fv"; spi-max-frequency= <500000>; };};
[color=rgba(0, 0, 0, 0.9)]改为:
mcp1:mcp2518fd@0{ compatible= "microchip,mcp2518fd"; reg= <0>; spi-max-frequency= <20000000>; clocks= <&mcp2518fd_clock2>; interrupts-extended= <&gpio4 21 IRQ_TYPE_LEVEL_LOW>; };};
[color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]完成上述修改后即可进行编译,并用新生成的镜像烧写OKMX8MP-C开发板。
08开发板验证
[color=rgba(0, 0, 0, 0.9)]将MCP2518芯片接到SPI2的接口上,启动OKMX8MP-C开发板,启动后使用ifconfig -a命令查看,即可看到多出了1个CAN节点。节点生成后,即可按照用户使用手册【4.18 FlexCAN测试】章节进行测试,验证功能是否正常。
用户使用手册下载链接:
提取码: 7qc8