RK3588开发笔记-spi扩展canfd芯片MCP2518FD调试笔记

40 篇文章 141 订阅 ¥29.90 ¥99.00

目录

前言

一、MCP2518FD

二、原理图连接

三、内核配置

四、设备树配置

五、设备调试

总结


前言

        在嵌入式系统开发中,CANFD(控制器局域网灵活数据速率)是一种广泛应用于汽车和工业自动化领域的通信协议。为了满足项目需求,我们在RK3588平台上通过SPI接口扩展了CANFD芯片MCP2518FD,之所以用spi进行canfd扩展,是为了解决原生RK3588原生can不够稳定的问题(发送扩展帧有几率编程标准帧,RK3568/3588均存在该问题)。

一、MCP2518FD

        MCP2518FD是Microchip公司生产的一款高性能CAN FD(灵活数据速率)控制器。它提供了两个CAN FD通道和SPI接口,支持经典格式(CAN2.0)和CAN灵活数据速率(CAN FD)格式的CAN成帧。仲裁比特率高达1Mbps,数据波特率也突破了传统CAN2.0的1Mbps限制,SPI时钟速度高达20MHz,符合ISO11898-1:2015标准。

        此外,该器件能发送和接收标准和扩展数据帧以及远程帧,并且自带的32个灵活的滤波器和屏蔽对象可以过滤掉不想要的报文,因此减少了主单片机(MCU)的开销。这使得它在汽车和工业自动化等领域有着广泛的应用。

        接口说明如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个使用MCP2518FD芯片SPI转CAN的驱动代码示例: ```c #include <linux/spi/spi.h> #include <linux/can.h> #include <linux/module.h> static struct spi_device *spi_dev; static struct can_priv can; static int spi_can_probe(struct spi_device *spi) { // 初始化SPI设备 spi_dev = spi; // 设置SPI设备的工作模式、位序等参数 spi_dev->mode = SPI_MODE_0; spi_dev->bits_per_word = 8; spi_setup(spi_dev); // 初始化CAN设备 can.dev = &spi_dev->dev; can.clock.freq = 1000000; // 设置CAN的波特率 can.clock.mclk = 16000000; // 设置MCP2518FD的主时钟频率 // 向内核注册CAN设备 if (can_rx_register(can.dev, &can, "spi_can", NULL) != 0) { dev_err(can.dev, "Failed to register CAN device\n"); return -ENODEV; } // 启动CAN设备 if (can_open(&can.dev) != 0) { dev_err(can.dev, "Failed to open CAN device\n"); return -ENODEV; } return 0; } static int spi_can_remove(struct spi_device *spi) { // 关闭CAN设备 can_close(&can); // 取消CAN设备的注册 can_rx_unregister(&can); return 0; } static const struct spi_device_id spi_can_id[] = { { "mcp2518fd", 0 }, { } }; MODULE_DEVICE_TABLE(spi, spi_can_id); static struct spi_driver spi_can_driver = { .driver = { .name = "spi_can", }, .probe = spi_can_probe, .remove = spi_can_remove, .id_table = spi_can_id, }; module_spi_driver(spi_can_driver); MODULE_DESCRIPTION("SPI CAN Driver"); MODULE_AUTHOR("Your Name"); MODULE_LICENSE("GPL"); ``` 请注意,这只是一个简单的示例代码,具体实现可能会因为底层硬件平台和操作系统的不同而有所变化。在实际使用时,你可能需要根据硬件平台和操作系统的要求进行适当的修改和调整。另外,该代码还依赖于Linux内核中的CAN子系统和SPI子系统,确保你的系统已经正确配置和编译了这些子系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flypig哗啦啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值