飛凌嵌入式OKMX8MP-C開(kāi)發(fā)板有兩路原生CAN總線(xiàn),但用戶(hù)在開(kāi)發(fā)產(chǎn)品時(shí)可能需要用到更多的CAN,這該如何解決呢?今天小編將為大家介紹一種SPI轉(zhuǎn)CAN的方法,供各位工程師小伙伴參考。
說(shuō)明
OKMX8MP-C核心板有兩路原生的SPI總線(xiàn),目前是將SPI1的引腳用作了LED和UART3的功能,SPI2做成了正常的SPI2接口。此處以SPI2轉(zhuǎn)CAN為例,移植SPI轉(zhuǎn)CAN芯片;
SPI轉(zhuǎn)CAN芯片型號(hào)為:MCP2518,這款芯片可轉(zhuǎn)出CAN-FD,若只需要CAN功能,可參照該方式移植MCP2515或其他芯片;
本次移植的MCP2518芯片驅(qū)動(dòng)來(lái)源是i.MX8MQ的源碼(處理器中默認(rèn)移植MCP2518芯片)。
01移植MC2518芯片驅(qū)動(dòng)
在OK8MP-linux-kernel/drivers/net/can/spi/路徑下創(chuàng)建一個(gè)文件夾——mcp25xxfd,將相關(guān)文件(包含.c文件、.h文件、Makefile、Kconfig等)放置到此文件夾中。
02補(bǔ)全對(duì)can_rx_offload_add_manual函數(shù)的定義
vi OK8MQ-linux-kernel/include/linux/can/rx-offload.h
添加:
vi OK8MQ-linux-kernel/drivers/net/can/rx-offload.c
添加:
03修改上一級(jí)目錄spi/下的Makefile和Kconfig
vi OK8MP-linux-kernel/drivers/net/can/spi/Makefile
添加:
vi OK8MP-linux-kernel/drivers/net/can/spi/Kconfig
添加:
04修改驅(qū)動(dòng)配置文件,將MCP2518編譯進(jìn)內(nèi)核
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在設(shè)備樹(shù)中配置時(shí)鐘
vi OK8MP-linux-kernel/arch/arm64/boot/dts/freescale/OK8MP-C.dts
添加:
06找一個(gè)引腳用作芯片的中斷引腳
此處是將GPIO4_IO21用作了中斷引腳。
vi OK8MP-linux-kernel/arch/arm64/boot/dts/freescale/OK8MP-C.dts
添加:
07
在設(shè)備樹(shù)的ecspi2節(jié)點(diǎn)中進(jìn)行修改
vi OK8MP-linux-kernel/arch/arm64/boot/dts/freescale/OK8MP-C.dts
從:
改為: &ecspi2{ |