网站建设对企业影响有多大,濮阳网站制作,德州建设小学网站,wordpress设置投稿飞凌嵌入式OKMX8MP-C核心板有两路原生CAN总线#xff0c;但用户在开发产品时可能需要用到更多的CAN#xff0c;这该如何解决呢#xff1f;今天小编将为大家介绍一种SPI转CAN的方法#xff0c;供各位工程师小伙伴参考。 说明 OKMX8MP-C核心板有两路原生的SPI总线#xff0c…飞凌嵌入式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芯片驱动
在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
添加
source drivers/net/can/spi/mcp25xxfd/Kconfig 04 修改驱动配置文件将MCP2518编译进内核
vi OK8MP-linux-kernel/arch/arm64/configs/OK8MP-C_defconfig
找到CONFIG_CAN_MCP251Xy
改为# CONFIG_CAN_MCP251X is not set
添加CONFIG_CAN_MCP25XXFDy 05 在设备树中配置时钟
vi OK8MP-linux-kernel/arch/arm64/boot/dts/freescale/OK8MP-C.dts
添加
clocks{ mcp2518fd_clock: mcp2518fd_clock{ compatible fixed-clock; #clock-cells 0; clock-frequency 40000000; };}; 06 找一个引脚用作芯片的中断引脚
此处是将GPIO4_IO21用作了中断引脚。
vi OK8MP-linux-kernel/arch/arm64/boot/dts/freescale/OK8MP-C.dts
添加
pinctrl_ecspi2_can: ecspi2can{ fsl,pins MX8MP_IOMUXC_SAI2_RXFS__GPIO4_IO21 0x40000 ;}; 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:spi0 { 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:mcp2518fd0{ 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测试】章节进行测试验证功能是否正常。 用户使用手册下载链接: https://pan.baidu.com/s/1TY4R5BrAnjAuTTJj9fNGWw 提取码: 7qc8