树莓派之spi转can通信记录篇(一)

找到了大佬做的教程,开干(参考教程设备树资料
硬件:基于MCP2515的CAN总线模块(控制器:MCP2515、收发器:TJA1050)

在这里插入图片描述
(上面的图片从网上盗来的,具体已经忘记哪里弄来的了)
下面是原理图(买的模块附带):
在这里插入图片描述
引脚关系如下:
在这里插入图片描述
查看pi的gpio引脚
在这里插入图片描述
1.设置树莓派(个人是Raspbian系统),启用SPI和加载内核模块
(1)设置接口功能
运行如下命令进入树莓派配置(支持3b)

sudo raspi-config

选择第三项Interfacing Options–>SPI开启,finish退出。重启生效sudo reboot。

(2)修改开机脚本config.txt
sudo nano /boot/config.txt
末行加入:
#add spi for MCP2515
dtparam=spi=on
dtoverlay=mcp2515-can0,oscillator=8000000,interrupt=25,spimaxfrequency=10000000
dtoverlay=spi-bcm2835-overlay

  • 修改设备树相关参数,以设置自启动pi默认的外部接口及相关外围设备。(设备树资料

  • 由MCP2515 datasheet可知(其实我是硬件上看到晶振写着8.000),设置震荡器参数为8000000.(MCP2515时钟频率HZ,大佬用16MHZ的不知道是为什么考虑?)

  • spimaxfrequency可设为10MHz(SPI接口最大频率)

  • 这个芯片设置不清楚?(BCM2835资料

  • MCP2515 设备树的 overlay 参数相关可以在 /boot/overlays/README 看到:
    在这里插入图片描述

(3)查验
reboot后终端输:lsmod可以查看到spi_bcm2835 已经被加载到了内核
在这里插入图片描述
且之后在/dev/目录下可以看到
spidev0.0 和 spidev0.1两个驱动设备
其实我没看到,为什么?想起来之前装过树莓派的3.5寸屏幕,它占用了我pi的14个gpio接口其中就有spi口,虽然把屏幕拔了不用,它的驱动会不会还默认占用?问了树莓派的卖家,他说并不会出现这种情况,我想多了还是。
找到一个有点契合的回答说:(SPI调试大佬总结
CAN总线在新版本的内核中,并不是以字符设备的形式出现的,主要是因为内核把CAN设备看成了网络设备(当然由于CAN设备的特殊性,CAN是没有IP地址可言的),需要用到socketcan协议…

断电,接线并保证完好:
在这里插入图片描述

开机:
在这里插入图片描述
怎么回事,会找不到设备。查看一下所有网络设备,发现还是有这个can0设备的:
在这里插入图片描述
在这里插入图片描述
spi0.0正常,而spi0.1在config.txt本就未定义,随后才发现,原来是:
在这里插入图片描述
2. 通过ip命令设置CAN网络设备,设置波特率,并启动can0:

sudo ip link set can0 type can bitrate 500000
sudo ifconfig can0 up

  • 如要修改波特率(500kbps(50~500k)),要先关闭:
    sudo ip link set can0 down

help命令查看可设置参数:
在这里插入图片描述
可以使用ip命令查看CAN网络信息和状态:
sudo ip -s -d link show can0
在这里插入图片描述
3.安装相关工具:
(1)安装Can-utils工具
sudo apt-get install git autoconf libtool
git clone https://github.com/linux-can/can-utils.git
cd can-utils
./autogen.sh
./configure
make
sudo make install

4.通信实现(测试)
通过 can-utils 工具套件, 可以实现简易的 CAN 总线通信。(参考)
环回设置可以在MCP2515上启用环回模式(参考路由器上的环路接口),可用于验证Pi与can模块通信,而环回模式下传输的消息时可以把接口信息回显。(环回模式:允许器件内部的发送缓冲器和接收缓冲器之间进行报文的自发自收,而无需通过 CAN 总线。此模式可用于系统开发和测试。)
环回模式下,器件接收自己发送的报文就象在接收来自其他节点的报文。环回模式是一种安静模式,即器件在此模式下不会发送任何报文(包括错误标志或确认信号)。该模式下 TXCAN 引脚处于隐性状态。
(1)使用cansend/candump分别发送和接收CAN消息
(找到一个日本小哥的类似教程参考
首先要打开环回模式和设置波特率:
ip link set can0 type can bitrate 500000 loopback on
ip link set can0 up

在这里插入图片描述
打开两个终端并进入can-utils的目录下执行:
./candump any,0:0,#FFFFFFFF
./cansend can0 123#1234ABCD
会出现这样的消息:
./candump any,0:0,#FFFFFFFF
can0 123 [4] 12 34 AB CD
can0 123 [4] 12 34 AB CD

这个方法也行,两个终端,分别进入can-utils的目录,分别执行:
candump can0
cansend can0 001#1122334455667788
在这里插入图片描述
这样就可以进行下一步的can数据采集开发了。

  • 8
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值