0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

i.MX8MPlus开发板实现SPI转CAN,该如何操作?

飞凌嵌入式 2023-09-04 16:04 次阅读

飞凌嵌入式OKMX8MP-C开发板有两路原生CAN总线,但用户在开发产品时可能需要用到更多的CAN,这该如何解决呢?今天小编将为大家介绍一种SPI转CAN的方法,供各位工程师小伙伴参考。


说明

OKMX8MP-C核心板有两路原生的SPI总线,目前是将SPI1的引脚用作了LEDUART3的功能,SPI2做成了正常的SPI2接口。此处以SPI2转CAN为例,移植SPI转CAN芯片

SPI转CAN芯片型号为:MCP2518,这款芯片可转出CAN-FD,若只需要CAN功能,可参照该方式移植MCP2515或其他芯片;

本次移植的MCP2518芯片驱动来源是i.MX8MQ的源码(处理器中默认移植MCP2518芯片)。

wKgZomT5QKWABPCtAAGqeU6B1M0490.jpg

1、移植MC2518芯片驱动

OK8MP-linux-kernel/drivers/net/can/spi/路径下创建一个文件夹——mcp25xxfd,将相关文件(包含.c文件、.h文件、Makefile、Kconfig等)放置到此文件夹中。

2、补全对can_rx_offload_add_manual函数的定义

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、修改上一级目录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、修改驱动配置文件,将MCP2518编译进内核

viOK8MP-linux-kernel/arch/arm64/configs/OK8MP-C_defconfig

找到:CONFIG_CAN_MCP251X=y

改为:#CONFIG_CAN_MCP251X is not set

添加:CONFIG_CAN_MCP25XXFD=y

5、在设备树中配置时钟

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、找一个引脚用作芯片的中断引脚

此处是将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、在设备树的ecspi2节点中进行修改

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>; }; };

完成上述修改后即可进行编译,并用新生成的镜像烧写OKMX8MP-C开发板。

8、开发板验证

将MCP2518芯片接到SPI2的接口上,启动OKMX8MP-C开发板,启动后使用ifconfig-a命令查看,即可看到多出了1个CAN节点。节点生成后,即可按照用户使用手册4.18FlexCAN测试】章节进行测试,验证功能是否正常。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • CAN
    CAN
    +关注

    关注

    57

    文章

    2744

    浏览量

    463658
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1706

    浏览量

    91546
  • 总线
    +关注

    关注

    10

    文章

    2879

    浏览量

    88064
  • 嵌入式开发
    +关注

    关注

    18

    文章

    1029

    浏览量

    47567
  • 开发板
    +关注

    关注

    25

    文章

    5040

    浏览量

    97407
收藏 人收藏

    评论

    相关推荐

    【迅为电子】i.MX6UL和i.MX6ULL芯片区别与开发板对比

    【迅为电子】i.MX6UL和i.MX6ULL芯片区别与开发板对比
    的头像 发表于 11-28 14:31 344次阅读
    【迅为电子】<b class='flag-5'>i.MX</b>6UL和<b class='flag-5'>i.MX</b>6ULL芯片区别与<b class='flag-5'>开发板</b>对比

    i.MX Linux开发实战指南—基于野火i.MX系列开发板

    电子发烧友网站提供《i.MX Linux开发实战指南—基于野火i.MX系列开发板.pdf》资料免费下载
    发表于 10-10 17:23 11次下载

    198元,米尔NXP i.MX 93开发板,限购300套

    。即日,米尔联合NXP推出活动:米尔NXPi.MX93开发板限量300套,仅售198元!此次活动针对企业客户参与,需要您提供公司信息和联系方式,请按如下流程操作
    的头像 发表于 09-27 08:00 360次阅读
    198元,米尔NXP <b class='flag-5'>i.MX</b> 93<b class='flag-5'>开发板</b>,限购300套

    CANI2C桥接器

    电子发烧友网站提供《CANI2C桥接器.pdf》资料免费下载
    发表于 08-28 11:10 0次下载
    <b class='flag-5'>CAN</b><b class='flag-5'>转</b><b class='flag-5'>I</b>2C桥接器

    【正点原子i.MX93开发板试用连载体验】第一篇:开箱

    感谢电子发烧友论坛和正点原子提供的这次宝贵的试用机会,我计划利用开发板完成一个小型机器人的控制demo,同时测评各个功能模块。首先,正点原子i.MX93开发板是一款基于NXP
    发表于 06-20 14:06

    【GD32F303红枫派开发板使用手册】第二十讲 SPI-SPI NAND FLASH读写实验

    通过本实验主要学习以下内容: •SPI通信协议,参考19.2.1东方红开发板使用手册 •GD32F303 SPI操作方式,参考19.2.2东方红
    的头像 发表于 06-20 09:50 895次阅读
    【GD32F303红枫派<b class='flag-5'>开发板</b>使用手册】第二十讲 <b class='flag-5'>SPI-SPI</b> NAND FLASH读写实验

    米尔NXP i.MX 93开发板的Qt开发指南

    1.概述Qt是一个跨平台的图形应用开发框架,被应用在不同尺寸设备和平台上,同时提供不同版权版本供用户选择。米尔NXPi.MX93开发板(MYD-LMX9X开发板)使用Qt6.5版本进行
    的头像 发表于 06-07 08:01 1732次阅读
    米尔NXP <b class='flag-5'>i.MX</b> 93<b class='flag-5'>开发板</b>的Qt<b class='flag-5'>开发</b>指南

    正点原子i.MX93开发板

    我计划申请正点原子i.MX93开发板,因为我希望利用其强大的NXP i.MX9352处理器进行中高端嵌入式Linux开发。这款处理器具备双核
    发表于 05-16 14:57

    STM8AF开发板无法实现CAN通信怎么解决?

    各位大神 我是STM8的新手,最近买了两套STM8A-DISCOVERY开发板,基于STM8AF52芯片开发,原本想着将两块
    发表于 05-14 07:00

    鸿蒙OpenHarmony【轻量系统 运行】 (基于Hi3861开发板

    由于Hi3861为WLAN模组,您可以在版本编译及烧录后,通过如下操作,使开发板实现联网功能。
    的头像 发表于 05-10 16:38 700次阅读
    鸿蒙OpenHarmony【轻量系统 运行】 (基于Hi3861<b class='flag-5'>开发板</b>)

    NXP i.MX 93核心板工业方案

    MYC-LMX9X核心板及开发板NXPi.MX93重新定义入门级嵌入式CPU模组2*Cortex-A55@1.7GHz+Cortex-M33@250MHz,满足高性能和实时性需求;集成
    的头像 发表于 04-23 11:07 1103次阅读
    NXP <b class='flag-5'>i.MX</b> 93核心板工业方案

    鸿蒙OpenHarmony【轻量系统运行】 (基于Hi3861开发板

    由于Hi3861为WLAN模组,您可以在版本编译及烧录后,通过如下操作,使开发板实现联网功能。
    的头像 发表于 04-23 09:50 763次阅读
    鸿蒙OpenHarmony【轻量系统运行】 (基于Hi3861<b class='flag-5'>开发板</b>)

    米尔-全志T113-i开发板与modbus设备的连接和操作

    本文主要介绍通过米尔-全志T113-i开发板实现与modbus设备的连接和操作
    的头像 发表于 03-21 19:42 935次阅读
    米尔-全志T113-<b class='flag-5'>i</b><b class='flag-5'>开发板</b>与modbus设备的连接和<b class='flag-5'>操作</b>

    使用i.MX RT500实现SPI/DMA AN14170应用指南

    电子发烧友网站提供《使用i.MX RT500实现SPI/DMA AN14170应用指南.pdf》资料免费下载
    发表于 02-01 10:05 0次下载
    使用<b class='flag-5'>i.MX</b> RT500<b class='flag-5'>实现</b><b class='flag-5'>SPI</b>/DMA AN14170应用指南

    用tc275开发板实现can通信,一直不工作怎么解决?

    最近我想用 tc275的官方开发板实现can通信,一直不工作,在我反复检查了好几遍代码之后,感觉实在找不出错误来,就疑惑这块shield buddy板子上是否有CAN transceiver 芯片?
    发表于 02-01 07:08