概述
CAN(Controller Area Network,控制器局域网络)是一种广泛应用于汽车、工业控制等领域的串行通信协议。本文介绍如何在树莓派上使用 CAN-HAT 扩展板进行 CAN 通信开发,以及 CAN 矩阵和信号字节序的基础知识。
关于汽车 CAN 总线网络架构,请参阅 汽车 CAN 网络。
树莓派 CAN-HAT 配置
1. 安装 CAN-HAT 驱动
1 | # 克隆驱动仓库 |
安装完成后,通过 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 | # 启用 CAN FD 模式 |
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 矩阵
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 通信调试中最常见的问题之一。