国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

查看: 1693|回復: 0
打印 上一主題 下一主題

在i.MX8MP開發板上實現SPI轉CAN

[復制鏈接]

          跳轉到指定樓層
          樓主
          發表于 2023-9-11 15:27:30 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

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

          添加:

          [url=]復制[/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]復制代碼


          vi OK8MQ-linux-kernel/drivers/net/can/rx-offload.c

          添加:

          [url=]復制[/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]復制代碼



          03修改上一級目錄spi/下的Makefile和Kconfig

          vi OK8MP-linux-kernel/drivers/net/can/spi/Makefile

          添加:

          [url=]復制[/url]


          • obj-y     +=  mcp25xxfd/

          [color=rgb(51, 102, 153) !important]復制代碼



          vi OK8MP-linux-kernel/drivers/net/can/spi/Kconfig

          添加:

          [url=]復制[/url]

          • source "drivers/net/can/spi/mcp25xxfd/Kconfig"

          [color=rgb(51, 102, 153) !important]復制代碼



          04修改驅動配置文件,將MCP2518編譯進內核

          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在設備樹中配置時鐘

          vi OK8MP-linux-kernel/arch/arm64/boot/dts/freescale/OK8MP-C.dts

          添加:​​​​​​​

          [url=]復制[/url]
          • clocks{
          •   mcp2518fd_clock:
          •   mcp2518fd_clock{
          •     compatible = "fixed-clock";
          •     #clock-cells = <0>;
          •     clock-frequency = <40000000>;
          •     };
          • };

          [color=rgb(51, 102, 153) !important]復制代碼



          06找一個引腳用作芯片的中斷引腳

          此處是將GPIO4_IO21用作了中斷引腳。

          vi OK8MP-linux-kernel/arch/arm64/boot/dts/freescale/OK8MP-C.dts

          添加:​​​​​​​

          [url=]復制[/url]


          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

          從:​​​​​​​

          [url=]復制[/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]復制代碼

          • 改為:​​​​​​​

          • [url=]復制[/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]復制代碼


            完成上述修改后即可進行編譯,并用新生成的鏡像燒寫OKMX8MP-C開發板。


            08

            開發板驗證

            將MCP2518芯片接到SPI2的接口上,啟動OKMX8MP-C開發板,啟動后使用ifconfig -a命令查看,即可看到多出了1個CAN節點。節點生成后,即可按照用戶使用手冊【4.18 FlexCAN測試】章節進行測試,驗證功能是否正常。


          您需要登錄后才可以回帖 登錄 | 立即注冊

          本版積分規則

          關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
          電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
          主站蜘蛛池模板: 日韩不卡一级毛片免费 | 好好的曰www视频在线观看 | 色一欲一性一乱一区二区三区 | 欧美成人精品高清在线观看 | 厚颜无耻有字幕在线观看 | 日韩精品一区在线观看 | 91四虎国自产在线播放线 | 国产对白精品刺激一区二区 | 精品视频在线免费观看 | 韩国大尺度女教师未删减在线 | 亚洲欧美日韩中文综合v日本 | 伊人黄网 | 色最快国产 | 四虎精品成人免费视频 | 成人四虎 | 一区二区在线不卡 | 99视频国产精品 | 久久久久久久久久毛片精品美女 | 成人97在线观看免费高清 | 521avav | 国产精品久久国产三级国电话系列 | 日本一本免费一二区 | 1国产精品卡1卡2卡3 | 亚洲男女在线 | 韩剧伦理年轻的嫂子6在线观看 | 色天天综合 | 日本久久久久亚洲中字幕 | 国产在线高清不卡免费播放 | 狠狠色婷婷综合天天久久丁香 | 最新欧美精品一区二区三区不卡 | 在线www 天堂网在线 | 97免费视频在线观看 | 亚洲成年人网址 | 久久久久久久久久久久久久久 | 亚洲一区二区视频在线观看 | 亚洲尹人香蕉网在线视颅 | 欧美日本中文字幕 | 亚洲视频1区 | 亚洲欧美日韩精品高清 | 欧美日本在线一区二区三区 | 四色婷婷婷婷色婷婷开心网 |