D~DIDI~DIDIDI!!!!

0%

can

概述

CAN(Controller Area Network,控制器局域网络)是一种广泛应用于汽车、工业控制等领域的串行通信协议。本文介绍如何在树莓派上使用 CAN-HAT 扩展板进行 CAN 通信开发,以及 CAN 矩阵和信号字节序的基础知识。

关于汽车 CAN 总线网络架构,请参阅 汽车 CAN 网络

树莓派 CAN-HAT 配置

1. 安装 CAN-HAT 驱动

1
2
3
4
5
6
7
8
9
# 克隆驱动仓库
git clone https://github.com/seeed-Studio/pi-hats

# 安装驱动
cd pi-hats/CAN-HAT
sudo ./install.sh

# 重启使驱动生效
sudo reboot

安装完成后,通过 ifconfig -a 检查是否成功加载 can0 网络接口。

2. 配置标准 CAN

启用 CAN 接口并设置波特率:

1
sudo ip link set can0 up type can bitrate 500000

3. 配置 CAN FD

CAN FD(Flexible Data-Rate)支持更高的数据传输速率。以下命令同时设置常规波特率和数据波特率,并启用 FD 模式:

1
2
3
4
5
# 启用 CAN FD 模式
sudo ip link set can0 up type can bitrate 500000 dbitrate 2000000 restart-ms 1000 berr-reporting on fd on

# 关闭 CAN 通道
sudo ip link set can0 down

4. 双路 CAN FD 扩展板

如果需要双路 CAN FD 支持,可参考 Seeed Studio 的 2 通道 CAN FD 扩展板:

参考文档:2 Channel CAN BUS FD Shield for Raspberry Pi - Seeed Wiki

CAN 信号基础

地偏移测试

CAN 总线的信号质量受地电位偏移的影响。在 CAN 一致性测试中,地偏移测试是重要的测试项目之一。

参考:CAN 一致性测试系统之地偏移测试 - OFweek

CAN 矩阵

CAN 矩阵(CAN Matrix/DBC)定义了 CAN 报文中信号的物理含义、起始位、长度和字节序等信息。

字节序(Byte Order)

CAN 报文的数据域最多 8 个字节(Byte 0 ~ Byte 7),每个字节 8 位(Bit 7 ~ Bit 0),总计 64 位(Bit 0 ~ Bit 63)。

在 CAN 矩阵中,信号的字节序有两种格式:

Intel 格式(小端模式)

Intel 格式也称为小端格式(Little-Endian)。MSB(最高有效位)存放在高字节单元。

在矩阵图中的表现:以起始位为原点,信号位自上而下填充。

特点:

  • LSB(最低有效位)在低地址
  • MSB(最高有效位)在高地址
  • 数据填充方向:从低位到高位

Motorola 格式(大端模式)

Motorola 格式也称为大端格式(Big-Endian)。MSB(最高有效位)存放在低字节单元。

在矩阵图中的表现:以起始位为原点,信号位自下而上填充。

特点:

  • MSB(最高有效位)在低地址
  • LSB(最低有效位)在高地址
  • 数据填充方向:从高位到低位

示例对比

特性 Intel(小端) Motorola(大端)
MSB 位置 高字节 低字节
LSB 位置 低字节 高字节
矩阵填充方向 自上而下 自下而上
常见应用 Intel/x86 处理器 Freescale/NXP 处理器

提示: 在实际的 CAN DBC 文件中,明确标注信号的字节序非常重要。字节序错误是 CAN 通信调试中最常见的问题之一。

相关文章