CAN 消息数据介绍

发布时间: 更新时间: 总字数:1932 阅读时间:4m 作者: IP上海 分享 网址

CAN (Controller Area Network) 是一种广泛应用于汽车、工业自动化、医疗设备等领域的串行通信协议。它的核心是高效、可靠地在各个电子控制单元 (ECU) 之间传输数据。CAN 消息数据是 CAN 协议中传输信息的载体,它以的形式在总线上进行广播。

介绍

CAN 协议定义了多种帧类型,其中最常用的是 数据帧 (Data Frame),用于传输实际数据。一个标准的 CAN 数据帧包含以下主要字段:

  1. 帧起始 (Start of Frame, SOF)

    • 一个显性位(逻辑 0),表示帧的开始,用于同步总线上的所有节点。
  2. 仲裁场 (Arbitration Field)

    • 标识符 (Identifier, ID):这是 CAN 消息最重要的部分之一,用于唯一标识消息,并决定消息的优先级。ID 值越小,优先级越高。
      • 标准帧 (CAN 2.0A):使用 11 位标识符。
      • 扩展帧 (CAN 2.0B / CAN FD):使用 29 位标识符(由 11 位基本 ID 和 18 位扩展 ID 组成)。
    • 远程传输请求位 (Remote Transmission Request, RTR)
      • 显性位 (0):表示数据帧,包含数据。
      • 隐性位 (1):表示远程帧,用于请求具有相同 ID 的数据帧。
  3. 控制场 (Control Field)

    • 标识符扩展位 (Identifier Extension, IDE)
      • 显性位 (0):表示标准帧格式。
      • 隐性位 (1):表示扩展帧格式。
    • 保留位 (Reserved Bit, r0/r1):通常为显性位,预留用于未来协议扩展。
    • 数据长度码 (Data Length Code, DLC):一个 4 位的值,指示数据场中包含的字节数。
      • 对于传统 CAN (CAN 2.0A/B),DLC 范围是 0 到 8 字节。
      • 对于 CAN FD (Flexible Data-Rate),DLC 范围是 0 到 64 字节,这大大增加了单帧可传输的数据量。
  4. 数据场 (Data Field)

    • 包含实际要传输的用户数据。其长度由 DLC 决定。
      • 传统 CAN:0 到 8 字节。
      • CAN FD:0 到 64 字节。
  5. 循环冗余校验场 (Cyclic Redundancy Check, CRC Field)

    • 一个 15 位的校验码,用于检测数据传输过程中是否发生错误,确保数据完整性。
    • CRC 界定符 (CRC Delimiter):一个隐性位,将 CRC 场与 ACK 场分开。
  6. 应答场 (ACK Field)

    • 应答槽 (ACK Slot):接收到有效消息的节点会在该位发送一个显性位,表示已正确接收。
    • ACK 界定符 (ACK Delimiter):一个隐性位,将 ACK 场与 EOF 场分开。
  7. 帧结束 (End of Frame, EOF)

    • 7 个隐性位,表示帧的结束。
  8. 帧间空间 (Interframe Space, IFS)

    • 7 个隐性位,用于将不同的消息帧分开,提供节点恢复时间。

CAN FD (Flexible Data-Rate) 是 CAN 协议的演进版本,主要改进包括:

  • 更高的传输速率:数据段可达 8 Mbit/s (传统 CAN 最高 1 Mbit/s)。
  • 更大的数据有效载荷:数据段可达 64 字节 (传统 CAN 最高 8 字节)。
  • 引入了 BRS (Bit Rate Switch)ESI (Error State Indicator) 位,以支持更高的速率和错误指示。

CAN 消息数据示例

假设我们有一个传感器,需要发送温度数据 (以摄氏度为单位),其值为 25.5°C。我们可以将这个浮点数转换为整数或定点数进行传输。

场景描述:

  • 设备 A (发送者):一个温度传感器,每秒发送一次温度数据。
  • 设备 B (接收者):一个显示器,接收并显示温度。
  • CAN ID:假设我们分配一个 ID 为 0x100 (十六进制),优先级较高。
  • 数据:温度值 25.5°C。为了简化,我们假设将温度值放大 10 倍后取整,即 255。

传统 CAN 数据帧示例 (假设发送 2 字节数据):

我们假设温度值 255 (十进制) 转换为十六进制是 0x00FF (2 字节)。

  • CAN ID: 0x100 (11 位标准 ID)
  • RTR: 0 (数据帧)
  • IDE: 0 (标准帧)
  • DLC: 2 (数据场包含 2 字节)
  • Data Field: 0x00 0xFF (表示温度值 25.5,需要接收端按照约定进行解析,例如:Data_Value / 10.0 = Temperature)

CAN 消息的逻辑表示 (在编程或日志中常见形式):

ID: 0x100, DLC: 2, Data: 00 FF

解析:

  • ID (0x100):表示这是温度传感器发送的温度数据消息。
  • DLC (2):表示数据场有 2 字节。
  • Data (00 FF)
    • 如果约定数据是大端模式,那么 0x00FF = 255 (十进制)。
    • 如果约定温度值是实际温度的 10 倍,那么 255 / 10.0 = 25.5 °C。

更复杂的例子 (CAN FD,发送更多数据):

假设现在需要发送多个传感器数据,例如:

  • 温度:25.5°C (放大 10 倍后为 255)
  • 湿度:60% (直接为 60)
  • 气压:1012.3 hPa (放大 10 倍后为 10123)

如果使用 CAN FD,我们可以将这些数据打包在一个帧中。 假设我们分配一个 ID 为 0x200

  • CAN ID: 0x200 (11 位标准 ID)
  • RTR: 0 (数据帧)
  • IDE: 0 (标准帧)
  • DLC: 5 (数据场包含 5 字节)
  • Data Field: 0x00 0xFF 0x3C 0x27 0x8B (假设数据字节顺序约定为:温度(2B) 湿度(1B) 气压(2B))

CAN 消息的逻辑表示:

ID: 0x200, DLC: 5, Data: 00 FF 3C 27 8B

解析:

  • ID (0x200):表示这是一个环境传感器数据消息。
  • DLC (5):表示数据场有 5 字节。
  • Data (00 FF 3C 27 8B)
    • 字节 0-1 (0x00FF):表示温度值 255 (十进制)。解析为 25.5 °C。
    • 字节 2 (0x3C):表示湿度值 60 (十进制)。解析为 60 %。
    • 字节 3-4 (0x278B):表示气压值 10123 (十进制)。解析为 1012.3 hPa。

扩展

总结

CAN 消息数据是 CAN 通信的基础,其结构清晰,通过标识符区分消息,数据长度码控制数据大小,数据场承载实际信息。理解 CAN 消息的各个字段及其作用,对于设计、调试和分析 CAN 网络至关重要。CAN FD 的引入则进一步提升了 CAN 协议的性能,使其能够满足更多高带宽、大数据量的应用需求。

Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数