国产精品免费无遮挡无码永久视频-国产高潮视频在线观看-精品久久国产字幕高潮-国产精品99精品无码视亚

查看: 1865|回復(fù): 0
打印 上一主題 下一主題

在i.MX8MP開(kāi)發(fā)板上實(shí)現(xiàn)SPI轉(zhuǎn)CAN

[復(fù)制鏈接]
      跳轉(zhuǎn)到指定樓層
      樓主
      發(fā)表于 2023-9-11 15:27:30 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

      飛凌嵌入式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

      添加:

      [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]


      • obj-y     +=  mcp25xxfd/

      [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)證功能是否正常。


      本版積分規(guī)則

      關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
      電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
    1. <ul id="5y2ki"><td id="5y2ki"></td></ul>