本文主要记录使用树莓派4B,通过外接MCP2515模块来实现CAN通信,使用基于Can-utils实现CAN消息的收发。
准备工作:
接下来就是硬件部分,接线完成:
买的MCP2515模块附带的原理图:
树莓派与MCP2515模块的接线:
树莓派的引脚图,引自pinout.xyz:
线接好后按着参考一步一步走,先敲命令,在/boot/config.txt末行加入:
pi@raspberrypi:~ $ sudo nano /boot/config.txt
dtparam=spi=on
dtoverlay=mcp2515-can0,oscillator=16000000,interrupt=25
dtoverlay=spi1-1cs
然后保存配置重启:
sudo reboot
ls /sys/bus/spi/devices/spi0.0/net
dmesg | grep -i '\(can\|spi\)'
得到结果:
表示MCP2515已经加载成功。
接下来,设置环回模式,设置回环 波特率 250K ,用于测试can通路,在没有其它硬件连接测试的情况下,自发自收:
sudo ip link set can0 type can bitrate 500000 loopback on
# 开启can0
sudo ip link set can0 up
但是收发不了数据,启动还会把系统卡死。反复重试,反复卡死。。。
开始调试:
- 排除接线接错
- 换了一个全新的模块,发现结果还是一样
- 通过上面的操作,大概率是配置有问题
于是开始查配置的参数说明,发现这篇里面说的很详细,并指出原来配置中存在的问题,讲的很详细,我就不重复了:
- 打开spi总线,树莓派与MCP2515之前通过spi通信,然后再转成can协议在spi0.0上配置
- MCP2515 CAN控制器,CAN控制器的晶振频率是16MHz,INT脚接到了gpio25
- 原来配置是spi1-1cs,但我们用的是spi0,应该要改为dtoverlay=spi0-1cs,cs0_pin=8
于是我改好配置后,结果还是收发不了数据,启动还会把系统卡死。反复重试,反复卡死。。。
查看树莓派的引脚,如果不行,参考这篇:
后面又看到一篇,较之前相比配置做了一些改动,给出我的配置:
dtparam=spi=on
dtoverlay=mcp2515-can0,oscillator=8000000,interrupt=25,spimaxfrequency=10000000
dtoverlay=spi-bcm2835-overlay
再次sudo reboot,设置环回模式并开启can0,输入sudo ip -s -d link show can0查看can0通讯状态:
这次竟能启动成功,还没有把系统搞崩,于是测试收发can消息
安装 SocketCAN工具 Can-utils :
sudo apt-get install can-utils
使用cansend发送单条CAN消息:
cansend can0 123#AABBCCDDEEFF
开一个新终端,接收消息:
candump can0
结果:
使用cangen发送随机CAN消息:
cangen can0
发送:
接收:
终于打通啦!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)