飛凌嵌入式OKMX8MP-C開發(fā)板有兩路原生CAN總線,但用戶在開發(fā)產(chǎn)品時(shí)可能需要用到更多的CAN,這該如何解決呢?今天小編將為大家介紹一種SPI轉(zhuǎn)CAN的方法,供各位工程師小伙伴參考。
說明
OKMX8MP-C核心板有兩路原生的SPI總線,目前是將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)來源是i.MX8MQ的源碼(處理器中默認(rèn)移植MCP2518芯片)。
![wKgZomT5QKWABPCtAAGqeU6B1M0490.jpg](https://file1.elecfans.com/web2/M00/A1/F9/wKgZomT5QKWABPCtAAGqeU6B1M0490.jpg)
1、移植MC2518芯片驅(qū)動(dòng)
在OK8MP-linux-kernel/drivers/net/can/spi/路徑下創(chuàng)建一個(gè)文件夾——mcp25xxfd,將相關(guān)文件(包含.c文件、.h文件、Makefile、Kconfig等)放置到此文件夾中。
2、補(bǔ)全對can_rx_offload_add_manual函數(shù)的定義
viOK8MQ-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)
viOK8MQ-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);
3、修改上一級(jí)目錄spi/下的Makefile和Kconfig
viOK8MP-linux-kernel/drivers/net/can/spi/Makefile
添加:
obj-y += mcp25xxfd/
viOK8MP-linux-kernel/drivers/net/can/spi/Kconfig
添加:
source "drivers/net/can/spi/mcp25xxfd/Kconfig"
4、修改驅(qū)動(dòng)配置文件,將MCP2518編譯進(jìn)內(nèi)核
viOK8MP-linux-kernel/arch/arm64/configs/OK8MP-C_defconfig
找到:CONFIG_CAN_MCP251X=y
改為:#CONFIG_CAN_MCP251X is not set
添加:CONFIG_CAN_MCP25XXFD=y
5、在設(shè)備樹中配置時(shí)鐘
viOK8MP-linux-kernel/arch/arm64/boot/dts/freescale/OK8MP-C.dts
添加:
clocks{ mcp2518fd_clock: mcp2518fd_clock{ compatible = "fixed-clock"; #clock-cells = <0>; clock-frequency = <40000000>; }; };
6、找一個(gè)引腳用作芯片的中斷引腳
此處是將GPIO4_IO21用作了中斷引腳。
viOK8MP-linux-kernel/arch/arm64/boot/dts/freescale/OK8MP-C.dts
添加:
pinctrl_ecspi2_can: ecspi2can{ fsl,pins = < MX8MP_IOMUXC_SAI2_RXFS__GPIO4_IO21 0x40000 >; };
7、在設(shè)備樹的ecspi2節(jié)點(diǎn)中進(jìn)行修改
viOK8MP-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>; }; };
完成上述修改后即可進(jìn)行編譯,并用新生成的鏡像燒寫OKMX8MP-C開發(fā)板。
8、開發(fā)板驗(yàn)證
將MCP2518芯片接到SPI2的接口上,啟動(dòng)OKMX8MP-C開發(fā)板,啟動(dòng)后使用ifconfig-a命令查看,即可看到多出了1個(gè)CAN節(jié)點(diǎn)。節(jié)點(diǎn)生成后,即可按照用戶使用手冊【4.18FlexCAN測試】章節(jié)進(jìn)行測試,驗(yàn)證功能是否正常。
-
CAN
+關(guān)注
關(guān)注
57文章
2770瀏覽量
464392 -
SPI
+關(guān)注
關(guān)注
17文章
1722瀏覽量
92136 -
總線
+關(guān)注
關(guān)注
10文章
2903瀏覽量
88400 -
嵌入式開發(fā)
+關(guān)注
關(guān)注
18文章
1035瀏覽量
47719 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5121瀏覽量
98213
發(fā)布評論請先 登錄
相關(guān)推薦
i.MX Linux開發(fā)實(shí)戰(zhàn)指南—基于野火i.MX系列開發(fā)板
198元,米爾NXP i.MX 93開發(fā)板,限購300套
![198元,米爾NXP <b class='flag-5'>i.MX</b> 93<b class='flag-5'>開發(fā)板</b>,限購300套](https://file.elecfans.com/web2/M00/08/64/pYYBAGDwFEGADIPWAAFlJOlmLxg664.jpg)
【正點(diǎn)原子i.MX93開發(fā)板試用連載體驗(yàn)】第一篇:開箱
【GD32F303紅楓派開發(fā)板使用手冊】第二十講 SPI-SPI NAND FLASH讀寫實(shí)驗(yàn)
![【GD32F303紅楓派<b class='flag-5'>開發(fā)板</b>使用手冊】第二十講 <b class='flag-5'>SPI-SPI</b> NAND FLASH讀寫實(shí)驗(yàn)](https://file1.elecfans.com/web2/M00/F1/AD/wKgaomZzisiAamI-AABGtAQwDgo073.png)
米爾NXP i.MX 93開發(fā)板的Qt開發(fā)指南
![米爾NXP <b class='flag-5'>i.MX</b> 93<b class='flag-5'>開發(fā)板</b>的Qt<b class='flag-5'>開發(fā)</b>指南](https://file.elecfans.com/web2/M00/08/64/pYYBAGDwFEGADIPWAAFlJOlmLxg664.jpg)
正點(diǎn)原子i.MX93開發(fā)板
STM8AF開發(fā)板無法實(shí)現(xiàn)CAN通信怎么解決?
鴻蒙OpenHarmony【輕量系統(tǒng) 運(yùn)行】 (基于Hi3861開發(fā)板)
![鴻蒙OpenHarmony【輕量系統(tǒng) 運(yùn)行】 (基于Hi3861<b class='flag-5'>開發(fā)板</b>)](https://file1.elecfans.com/web2/M00/DD/F8/wKgaomYsw9GAc-_nAACZ3W2Vym8965.jpg)
米爾NXP i.MX 93開發(fā)板限量6折!賦能入門級(jí)邊緣處理市場
![米爾NXP <b class='flag-5'>i.MX</b> 93<b class='flag-5'>開發(fā)板</b>限量6折!賦能入門級(jí)邊緣處理市場](https://file.elecfans.com/web2/M00/08/64/pYYBAGDwFEGADIPWAAFlJOlmLxg664.jpg)
NXP i.MX 93核心板工業(yè)方案
![NXP <b class='flag-5'>i.MX</b> 93核心板工業(yè)方案](https://file1.elecfans.com/web2/M00/D6/F9/wKgaomYnI-yAc2pRAADaUrzYw9Q745.png)
NXP系列-NXP i.MX 93核心板開發(fā)板-入門級(jí)嵌入式核心板-產(chǎn)品資料
鴻蒙OpenHarmony【輕量系統(tǒng)運(yùn)行】 (基于Hi3861開發(fā)板)
![鴻蒙OpenHarmony【輕量系統(tǒng)運(yùn)行】 (基于Hi3861<b class='flag-5'>開發(fā)板</b>)](https://file1.elecfans.com/web2/M00/D6/1B/wKgaomYmY5SACwetAABPlIer1CU079.jpg)
評論