飞凌嵌入式OKMX8MP-C开发板有两路原生CAN总线,但用户在开发产品时可能需要用到更多的CAN,这该如何解决呢?今天小编将为大家介绍一种SPI转CAN的方法,供各位工程师小伙伴参考。 说明
01移植MC2518芯片驱动 在OK8MP-linux-kernel/drivers/net/can/spi/路径下创建一个文件夹——mcp25xxfd,将相关文件(包含.c文件、.h文件、Makefile、Kconfig等)放置到此文件夹中。 02补全对can_rx_offload_add_manual函数的定义 vi OK8MQ-linux-kernel/include/linux/can/rx-offload.h 添加: int can_rx_offload_add_manual(struct net_device *dev, struct can_rx_offload *offload, unsigned int weight) vi OK8MQ-linux-kernel/drivers/net/can/rx-offload.c 添加: int can_rx_offload_add_manual(struct net_device *dev, struct can_rx_offload *offload, unsigned int weight) { if (offload->mailbox_read) return -EINVAL; return can_rx_offload_init_queue(dev, offload, weight); } EXPORT_SYMBOL_GPL(can_rx_offload_add_manual); 03修改上一级目录spi/下的Makefile和Kconfig vi OK8MP-linux-kernel/drivers/net/can/spi/Makefile 添加: obj-y += mcp25xxfd/ vi OK8MP-linux-kernel/drivers/net/can/spi/Kconfig 添加: <font color="rgb(193, 132, 1)">sourcefont> <font color="rgb(80, 161, 79)">"drivers/net/can/spi/mcp25xxfd/Kconfig"font> 04修改驱动配置文件,将MCP2518编译进内核 vi OK8MP-linux-kernel/arch/arm64/configs/OK8MP-C_defconfig 找到:CONFIG_CAN_MCP251X=y 改为:# CONFIG_CAN_MCP251X is not set 添加:CONFIG_CAN_MCP25XXFD=y 05在设备树中配置时钟 vi OK8MP-linux-kernel/arch/arm64/boot/dts/freescale/OK8MP-C.dts 添加: clocks{ 06找一个引脚用作芯片的中断引脚 此处是将GPIO4_IO21用作了中断引脚。 vi OK8MP-linux-kernel/arch/arm64/boot/dts/freescale/OK8MP-C.dts 添加: 07 在设备树的ecspi2节点中进行修改 vi OK8MP-linux-kernel/arch/arm64/boot/dts/freescale/OK8MP-C.dts 从: &ecspi2{ #address-cells= <1>; #size-cells= <0>; fsl,spi-num-chipselects= <1>; pinctrl-names= "default"; pinctrl-0= <&pinctrl_ecspi2 &pinctrl_ecspi2_cs>; cs-gpios= <&gpio5 13 GPIO_ACTIVE_LOW>; status= "okay"; spidev1:spi@0 { reg= <0>; compatible= "rohm,dh2228fv"; spi-max-frequency= <500000>; }; }; 改为: &ecspi2{ #address-cells= <1>; #size-cells= <0>; fsl,spi-num-chipselects= <1>; pinctrl-names= "default"; pinctrl-0= <&pinctrl_ecspi2 &pinctrl_ecspi2_cs &pinctrl_ecspi2_can>; cs-gpios= <&gpio5 13 GPIO_ACTIVE_LOW>; status= "okay"; mcp1:mcp2518fd@0{ compatible= "microchip,mcp2518fd"; reg= <0>; spi-max-frequency= <20000000>; clocks= <&mcp2518fd_clock2>; interrupts-extended= <&gpio4 21 IRQ_TYPE_LEVEL_LOW>; }; }; 完成上述修改后即可进行编译,并用新生成的镜像烧写OKMX8MP-C开发板。 08 开发板验证 将MCP2518芯片接到SPI2的接口上,启动OKMX8MP-C开发板,启动后使用ifconfig -a命令查看,即可看到多出了1个CAN节点。节点生成后,即可按照用户使用手册【4.18 FlexCAN测试】章节进行测试,验证功能是否正常。 |
文章评论(0条评论)
登录后参与讨论