MCP2515模块CAN通信

举报
hepta_nian 发表于 2021/12/07 10:45:07 2021/12/07
【摘要】 本文作者是智能网联汽车安全研究员&物联网工程师,本文仅做CAN通信研究和学习,切勿模仿,由此带来的一切安全风险和法律隐患均与本文作者无关。自己掰扯CAN通信已经快四天了,这过程中不包括了解各类接口设备的过程和接线整理,了解板子的时间。下面就最近研究的一些过程做一总结。网络上针对CAN总线通信的文章少之又少,刚开始我使用的是EML327这款OBD诊断接口设备妄图想撬开汽车CAN的大门,后来发现...
本文作者是智能网联汽车安全研究员&物联网工程师,本文仅做CAN通信研究和学习,切勿模仿,由此带来的一切安全风险和法律隐患均与本文作者无关。

自己掰扯CAN通信已经快四天了,这过程中不包括了解各类接口设备的过程和接线整理,了解板子的时间。下面就最近研究的一些过程做一总结。

网络上针对CAN总线通信的文章少之又少,刚开始我使用的是EML327这款OBD诊断接口设备妄图想撬开汽车CAN的大门,后来发现,到底是太年轻了。最终找到一篇长安大学车辆工程专业大佬写的MCP2525模块CAN通信,自此才算是正儿八经叩开了汽车CAN通讯的大门。不过各类文章都或多或少存在一些。这里我将问题整理进行总结,以及最关键的获取汽车CAN波特率的问题,都会在本文中提到。

在开始之前,硬件方面我需要一块树莓派4(3,4都无所谓,甚至烧录Ubuntu系统都可以),MCP2515模块和一个CAN分析仪,或者一台整机操作系统,又或者一辆汽车。
MCP2515模块的晶振为8M的
树莓派4就按照官方指定系统烧录即可。这里针对于树莓派4系统的烧录不做过多解释。
首先就是MCP2525模块和树莓派的接线问题,这边我直接摘选大佬的接线方式。
PIN Pi  ----------------> MCP2515 
#02 5V -----------------> VCC
#06 GND ----------------> GND
#24 (SPI_CE0)GPIO08 ----> CS
#21 (SPI_MISO)GPIO09 ---> SO
#19 (SPI_MOSI)GPIO10 ---> SI
#23 (SPI_CLK)GPIO11 ----> SCK
#22 (GPIO_GEN6)GPIO25 --> INT
按照以上接线方式接线成功后,应该是如下图所示的结构现象:

图片

然后树莓派上电,开机。

当硬件接线工作操作就绪后,接下来开始在树莓派终端的工作:

1、开启树莓派SPI

首先,我们需要打开树莓派SPI功能,可以通过编辑/boot/config.txt文件来实现:

pi@raspberrypi:~ $ sudo nano /boot/config.txt

默认使用树莓派的nano编辑器,然后我们进行修改。将原本关闭的SPI功能注释取取消掉然后开启。

图片

dtoverlay=mcp2515-can0,oscillator=8000000,interrupt=25 dtoverlay=spi-bcm2835

完全修改之后应该是如下的样式:

图片

pi@raspberrypi:~ $ sudo reboot #重启树莓派

2、安装CAN tools:

pi@raspberrypi:~ $ sudo apt-get install can-utilscanutils介绍:工具包内含 5 个独立的程序:canconfig、candump、canecho、cansend、cansequence。这几个程序的功能简述如下:canconfig:用于配置 CAN 总线接口的参数,主要是波特率和模式。candump:从 CAN 总线接口接收数据并以十六进制形式打印到标准输出,也可以输出到指定文件。canecho:把从 CAN 总线接口接收到的所有数据重新发送到 CAN 总线接口。cansend:往指定的 CAN 总线接口发送指定的数据。cansequence:往指定的 CAN 总线接口自动重复递增数字,也可以指定接收模式并校验检查接收的递增数字。


图片

PS:当完成此处之后,默认在/sys/bus/spi/devices/spi0.0/net/目录下会有CAN0,如果没有的话应该是树莓派开启SPI功能时候执行错误,网络上其他人在此处开启SPI功能五花八门,推荐使用上面第一步提供的方法开启SPI

修改配置后重启树莓派查看MCP2515是否加载成功:

具体的查看方式为:


pi@piv2:~ $ ls /sys/bus/spi/devices/spi0.0/netcan0

3、启动CAN接口:

ip link命令启动can接口:

pi@raspberrypi:~ $ sudo ip link set can0 up type can bitrate 500000 loopback on

图片

bitrate 500000:比特率设置为500k,在这里比特率是波特率的两倍,所以波特率为250k

loopback on : 将MCP2515的工作模式设置为环回模式

4、发送&接收CAN接口数据:

这里使用的是上面安装的CAN Tools这个工具里面的candump和cansend这两个功能。

candump:CAN 总线接口接收数据并以十六进制形式打印到标准输出,也可以输出到指定文件。

cansend:往指定的 CAN 总线接口发送指定的数据。

640.gif

(发送&接收自定义CAN总线数据)

640.gif

(发送&接收随机CAN总线数据)

5、PPS①关于波特率的获取

在文章中我直接挂载的波特率是bitrate 500000,正确的操作应该是使用示波器连接CANH,CANL获取正确的波特率。参考文章【2中的内容进行了解和实际测,作者本人会在假期后进行测试,如果成功的话会继续分享

6、PPS②汽车CAN的获取

相关问题就不细说了,给大家一张图,大家自行判断吧。

图片

7、参考链接

【1】在树莓派上使用基于MCP2515的CAN总线模块(知乎)

【2】示波器CAN波特率(CSDN)

【3】树莓派4使用MCP2515模块CAN通信(SegmentFault)

图片

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。