4CAN 是一款 Raspberry Pi HAT,提供 4 个 CAN 接口。4CAN 与 socketcan 和 can-utils 完全兼容,并且非常容易启动和运行。其中包含一个 microUSB-UART 串行适配器,方便对 Pi 进行故障排查,并且板上有 4 个 LED,其中 2 个是双向绿/红 LED。最好的消息是,4CAN 是开源的,所以你可以自己制作!
很少有 廉价 设备能提供 4 个 CAN 接口,同时兼容 socketcan,并且小巧紧凑,完美适配 Raspberry Pi。拥有 4 个 CAN 总线可以同时测试 4 路 CAN 总线,也可以同时用 2 路总线进行 CAN 中间人攻击。
已在以下 raspbian 镜像上测试,使用 pi3b+:
4can 也适用于 Raspberry Pi 4:
4can 应该也能在 pi0w 上工作,但建议至少使用 pi3b。同时也建议在 Pi 上使用散热片,因为运行 4 个 CAN 接口时 Pi 可能会有点发热。
运行 install.sh 脚本(需要 sudo)来自动安装所有内容,然后重启。
安装脚本将执行以下操作:
sudo mkdir /boot/overlays/bak
sudo cp /boot/overlays/mcp2515* /boot/overlays/bak
sudo cp ./dtbo/*.dtbo /boot/overlays
sudo cp /boot/config.txt /boot/config.txt.bak
cat << EOF >> /boot/config.txt
# 4CAN 设置
# 接口的顺序很重要
# 即必须保留 can3,can2,can1,can0 的顺序
# 否则 can0 将不再是真正的 can0
dtparam=spi=on
dtoverlay=spi1-2cs
dtoverlay=mcp2515-can3,oscillator=16000000,interrupt=24
dtoverlay=mcp2515-can2,oscillator=16000000,interrupt=23
dtoverlay=mcp2515-can1,oscillator=16000000,interrupt=25
dtoverlay=mcp2515-can0,oscillator=16000000,interrupt=22
# 启用 uart
enable_uart=1
EOF
使用 4can 之前,请确保已加载 socketcan 内核模块,运行 sudo modprobe can_dev。这通常不是必需的,因为 Pi 会根据设备树加载正确的内核模块,但检查一下也无妨。
安装完成后,运行 4can.sh 来启用 CAN 接口:
./4can.sh
连接 CAN 接口并运行 candump -acc any 来检查它们是否工作。
注意:需要 can-utils
安装方式:sudo apt install can-utils
注意:有时接口顺序会乱,重启 Pi 即可修复。 如果不行,你可能需要修改 /boot/config.txt。
4can 使用了 Raspberry Pi 上的若干 GPIO。可用的 GPIO 引脚如下:
3, 5, 8, 10, 27, 28, 32, 36(物理引脚编号)
所有地线引脚都连接在一起,可用作接地连接。3.3V 和 5V 引脚也可用于供电。
更多细节请参见原理图。
请记住将外部 CAN 地线连接到 4can 的地线(接线端子上的“C”连接)。这样可以确保良好的地线完整性,并最大限度地减少收发错误。
![]() | ![]() |
将 4can 与 HyenaPlate 配合使用时,CAN 线可以穿过 Pi 下方连接到面包板上。这主要是为了美观,但其他好处包括无需频繁拧紧/松开接线端子来建立新连接、更易于故障排查以及连接更稳定。
为了更美观,可以使用电阻色码为信号分配颜色。例如,在上图中:
| 接口 | CAN-L | CAN-H |
|---|
黑色可用于接地。
4can 的灵感来自并大致基于 IndustrialBerry QUAD CAN BUS adapter for Raspberry CanBerry。虽然我们根据自身需求修改了设计,但必须感谢 IndustrialBerry 所做的出色工作。4CAN 和 IndustrialBerry 均采用知识共享署名-相同方式共享许可协议。
同样感谢 George Tarnovsky 在原理图、布局、组装和验证方面所做的工作!
| CAN0 | 棕色 | 红色 |
| CAN1 | 橙色 | 黄色 |
| CAN2 | 蓝色 | 紫色 |
| CAN3 | 绿色 | 白色 |