2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 在树莓派上使用基于MCP2515的CAN总线模块

在树莓派上使用基于MCP2515的CAN总线模块

时间:2019-09-30 17:09:35

相关推荐

在树莓派上使用基于MCP2515的CAN总线模块

本文介绍如何在树莓派上配置CAN总线模块MCP2515,并使用基于SocketCAN的工具Can-utils实现CAN消息的收发。

MCP2515概述:

Microchip 的MCP2515 是一款独立控制器局域网络(Controller Area Network, CAN)协议控制器,完全支持CAN V2.0B 技术规范。

该器件主要由三个部分组成:

1. CAN 模块,包括CAN 协议引擎、验收滤波寄存

器、验收屏蔽寄存器、发送和接收缓冲器。

2. 用于配置该器件及其运行的控制逻辑和寄存器。

3. SPI 协议模块。

MCP2515芯片结构框图

图片和芯片概述引自MCP2515参考手册

获取硬件

淘宝上有许多商家在售MCP2515 SPI转CAN的控制器通信模块,并且这些模块大都集成了CAN收发器。这些模块可能看起来样式不同,但是基本的针脚接法是一致的。

模块结构图

模块电路图

图片引自某淘宝卖家

接线

RPi Pin RPi LabelCAN Module02---------5V------------VCC06---------GND-----------GND19---------GPIO10--------MOSI (SI)21---------GPIO9---------MISO (SO)22---------GPIO25--------INT23---------GPIO11--------SCK24---------GPIO8---------CS

树莓派引脚图,引自pinout.xyz

使能树莓派SPI并加载MCP2515内核驱动

为了激活MCP2515的驱动,需要在文件/boot/config.txt加如下几行:

dtparam=spi=ondtoverlay=mcp2515-can0,oscillator=16000000,interrupt=25dtoverlay=spi1-1cs

如果内核是4.4.x之前的版本,需要修改最后一行:

dtparam=spi=ondtoverlay=mcp2515-can0,oscillator=16000000,interrupt=25dtoverlay=spi-bcm2835-overlay

可以通过uname -a查看树莓派内核:

MCP2515 device tree overlay的具体参数说明请参考/boot/overlays/README

Name: mcp2515-can0Info: Configures the MCP2515 CAN controller on spi0.0Load: dtoverlay=mcp2515-can0,<param>=<val>Params: oscillator Clock frequency for the CAN controller (Hz)spimaxfrequency Maximum SPI frequence (Hz)interruptGPIO for interrupt signa

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

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

看到can0说明已经加载成功

启动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的工作模式设置为环回模式

10.4 环回模式

环回模式允许器件内部的发送缓冲器和接收缓冲器之间进行报文的自发自收,而无需通过CAN 总线。此模式可用于系统开发和测试。环回模式下,确认位ACK 无效,器件接收自己发送的报文就象在接收来自其他节点的报文。环回模式是一种安静模式,即器件在此模式下不会发送任何报文(包括错误标志或确认信号)。该模式下TXCAN 引脚处于隐性状态。

引自MCP2515中文手册。

启动成功后可以通过ifconfig can查看can0信息:

pi@raspberrypi:~ $ ifconfig can0can0: flags=193<UP,RUNNING,NOARP> mtu 16unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 10 (UNSPEC)RX packets 23 bytes 52 (52.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 23 bytes 52 (52.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

如果需要修改参数配置,需要先关闭can接口:

pi@raspberrypi:~ $ sudo ip link set can0 down

可以通过help查看支持的配置参数:

pi@raspberrypi:~ $ ip link set can0 type can helpUsage: ip link set DEVICE type can[ bitrate BITRATE [ sample-point SAMPLE-POINT] ] |[ tq TQ prop-seg PROP_SEG phase-seg1 PHASE-SEG1phase-seg2 PHASE-SEG2 [ sjw SJW ] ][ dbitrate BITRATE [ dsample-point SAMPLE-POINT] ] |[ dtq TQ dprop-seg PROP_SEG dphase-seg1 PHASE-SEG1dphase-seg2 PHASE-SEG2 [ dsjw SJW ] ][ loopback { on | off } ][ listen-only { on | off } ][ triple-sampling { on | off } ][ one-shot { on | off } ][ berr-reporting { on | off } ][ fd { on | off } ][ fd-non-iso { on | off } ][ presume-ack { on | off } ][ restart-ms TIME-MS ][ restart ][ termination { 0..65535 } ]Where: BITRATE := { 1..1000000 }SAMPLE-POINT := { 0.000..0.999 }TQ := { NUMBER }PROP-SEG:= { 1..8 }PHASE-SEG1 := { 1..8 }PHASE-SEG2 := { 1..8 }SJW := { 1..4 }RESTART-MS := { 0 | NUMBER }

如果想要开机自动挂载CAN接口,在/etc/network/interfaces添加:

auto can0iface can0 can staticbitrate 500000

测试收发CAN消息

安装 SocketCAN工具 Can-utils :

pi@raspberrypi:~ $ sudo apt-get install can-utils

使用cansend发送单条CAN消息:

pi@raspberrypi:~ $ cansend can0 123#AABBCCDDEEFF

使用cangen发送随机CAN消息:

pi@raspberrypi:~ $ candump can0

使用Python库收发CAN消息

python-can :为不同的can控制器硬件设备提供通用的接口和一系列的消息收发工具。

cantools : CAN数据库解析,CAN消息、诊断DID编解码,candump输出解码。

使用cantools对candump输出解码:

0x123在数据库DBC中的定义:

CAN相关文章:

DBC文件格式解析

CANoe精选教程 | 自动化测试功能-Test Module/Test Unit

不同格式CAN 数据库(DBC、Excel、arxml等)相互转化

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。