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

查看: 1606|回復: 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在线视频播放 | 国精产品一区二区三区有限公司| 亚洲国产精品第一影院在线观看 | 日韩欧美国产另类| 我和黑色丝袜班主任| 在线免费一区二区| 久久机热视频 这里只有精品首页| 一区二区不卡在线视频| 欧美日韩国产va另类| 特一级毛片| 四虎影视入口| HEYZO精品无码一区二区三区| 欧洲videosdesrxotv| 亚洲天堂网2018| 日本黄色一级大片| 亚洲五月婷| 中文在线免费视频| 精品国产午夜福利在线观看蜜月| 野花社区WWW韩国日本| 四虎成人影院| 伊人日韩| 一个人免费在线观看| 久久国产精品免费网站| 亚洲视频一二| 日本中文在线| 中文字幕在线三浦惠理子| 佐佐木明希180部合集在线| 久久久97丨国产人妻熟女| 亚洲免费视频网站| 欧美一区二区三区网站| 伊人22综合| 97国内精品久久久久久久影视| 久久视频在线视频| 色xxxxx| 青青草原综合网| 糖心免费资源| 国产99RE在线观看69热| 亚洲视频中文字幕在线| 奇米影视亚洲春色77777|