|
飛凌嵌入式OKMX8MP-C開(kāi)發(fā)板有兩路原生CAN總線(xiàn),但用戶(hù)在開(kāi)發(fā)產(chǎn)品時(shí)可能需要用到更多的CAN,這該如何解決呢?今天小編將為大家介紹一種SPI轉(zhuǎn)CAN的方法,供各位工程師小伙伴參考。 說(shuō)明
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 添加: [url=]復(fù)制[/url]
- int can_rx_offload_add_manual(struct net_device *dev,
- struct can_rx_offload *offload,
- unsigned int weight)
[color=rgb(51, 102, 153) !important]復(fù)制代碼
vi OK8MQ-linux-kernel/drivers/net/can/rx-offload.c 添加: [url=]復(fù)制[/url]
- 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);
[color=rgb(51, 102, 153) !important]復(fù)制代碼
03修改上一級(jí)目錄spi/下的Makefile和Kconfig vi OK8MP-linux-kernel/drivers/net/can/spi/Makefile 添加: [url=]復(fù)制[/url]
[color=rgb(51, 102, 153) !important]復(fù)制代碼
vi OK8MP-linux-kernel/drivers/net/can/spi/Kconfig 添加: [url=]復(fù)制[/url]
- source "drivers/net/can/spi/mcp25xxfd/Kconfig"
[color=rgb(51, 102, 153) !important]復(fù)制代碼
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 添加: [url=]復(fù)制[/url] - clocks{
- mcp2518fd_clock:
- mcp2518fd_clock{
- compatible = "fixed-clock";
- #clock-cells = <0>;
- clock-frequency = <40000000>;
- };
- };
[color=rgb(51, 102, 153) !important]復(fù)制代碼
06找一個(gè)引腳用作芯片的中斷引腳 此處是將GPIO4_IO21用作了中斷引腳。 vi OK8MP-linux-kernel/arch/arm64/boot/dts/freescale/OK8MP-C.dts 添加: [url=]復(fù)制[/url]
pinctrl_ecspi2_can: ecspi2can{
fsl,pins = <
MX8MP_IOMUXC_SAI2_RXFS__GPIO4_IO21 0x40000
>;
};
07 在設(shè)備樹(shù)的ecspi2節(jié)點(diǎn)中進(jìn)行修改 vi OK8MP-linux-kernel/arch/arm64/boot/dts/freescale/OK8MP-C.dts 從: [url=]復(fù)制[/url]
- &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>;
- };
- };
[color=rgb(51, 102, 153) !important]復(fù)制代碼
改為: - [url=]復(fù)制[/url]
&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>;
- };
- };
[color=rgb(51, 102, 153) !important]復(fù)制代碼
完成上述修改后即可進(jìn)行編譯,并用新生成的鏡像燒寫(xiě)OKMX8MP-C開(kāi)發(fā)板。
08 開(kāi)發(fā)板驗(yàn)證 將MCP2518芯片接到SPI2的接口上,啟動(dòng)OKMX8MP-C開(kāi)發(fā)板,啟動(dòng)后使用ifconfig -a命令查看,即可看到多出了1個(gè)CAN節(jié)點(diǎn)。節(jié)點(diǎn)生成后,即可按照用戶(hù)使用手冊(cè)【4.18 FlexCAN測(cè)試】章節(jié)進(jìn)行測(cè)試,驗(yàn)證功能是否正常。
|
|