本帖最后由 stm1024 于 2024-3-17 20:02 编辑
树莓派的40 PIN标准,一直是经典的针脚定义,不光自己产品线延续这种针脚定义,甚至还影响了其他的各种派开发板。
而CAN(controller area network,控制器局域网络)作为一种十分常见的通讯协议,在汽车和工业控制中得到了很多应用,树莓派自然也支持。
不过想要通过树莓派进行CAN通讯,存在一个小问题是树莓派开发板并没有数据链路层,也就是我们通常所说的PHY,翻出了以前树莓派4B时候的一个HAT,介绍如何通过树莓派进行数据通讯。
用到的帽子(HAT)是微雪的RS485 CAN HAT,具备CAN功能,使用微芯半导体的SPI接口CAN控制器MCP2515,搭配的CAN收发器是德州仪器的SN65HVD230,支持CAN 2.0A和CAN2.0B,好处是树莓派通过SPI接口连接芯片,对于树莓派使用该芯片不需要编写驱动,只需要打开设备树中的内核驱动即可使用,缺点是由于使用的是MCP2515,因此不支持CAN-FD,虽然有点小遗憾,但是在大部分情况下还是可以满足要求的。
HAT长这样:
针脚定义的话,靠近凤凰端子那一侧是1,靠近晶振那一侧是40,因此安装方式如下:
软件环境准备工作如下:
1. 安装lgpio
脚本命令如下:
- wget https://github.com/joan2937/lg/archive/master.zip
- unzip master.zip
- cd lg-master
- sudo make install
复制代码
2. 配置config.txt
注意:config.txt现在位于/boot/firmware/目录下,而不是之前的/boot目录下。
通过nano打开该文件:
- sudo nano /boot/firmware/config.txt
复制代码 然后再最后添加两行:
- dtparam=spi=on
- dtoverlay=mcp2515-can0,oscillator=12000000,interrupt=25,spimaxfrequency=2000000
复制代码 保存退出。
3. 确认打开SPI外设 在树莓派配置中通过Preference下面的Respberry Pi Configuration打开对话框,确认SPI外设是打开的,如下图所示:
4. 安装CAN-utils同样使用socketCAN,因此需要安装CAN-Utils,脚本命令如下:
- sudo apt-get install can-utils
复制代码 都搞完以后,reboot重启树莓派。
5. 启动CAN并检查
使用如下命令配置并启动CAN:
- sudo ip link set can0 up type can bitrate 100000
复制代码 然后通过ifconfig确认:
表明CAN0设置成功。
6. 测试
接下来可以测试CAN通讯了,需要一个CAN采集卡及其运行在Windows系统的上位机程序,连接好线路以后,测试如下。
在一个终端中使用cangen,生成随机CAN报文:
然后打开一个新的终端,在其中打开candump:
最后打开Windows环境下的上位机程序,由于前面配置的波特率为100kbps,因此上位机程序也要做相应的配置,运行结果如下:
可见CAN报文的发送是很成功的,也可以将cangen终端关掉,然后在WindowsCAN上位机程序中发送报文,这是candump就可以显示接收到的报文了。
|