J1939-24 协议TP.CM_BAM和TP.DT报文传输多包数据

目录

SAE J1939-21 标准

TP.CM_BAM (Broadcast Announce Message)

TP.DT (Data Transfer)

工作流程

示例

关键点

TP.CM_BAM (Broadcast Announce Message)

功能:

典型格式:

示例:

TP.DT (Data Transfer)

功能:

典型格式:

示例:

具体工作流程

发送 TP.CM_BAM 消息:

发送 TP.DT 消息:

处理和错误检测:

控制字节

重要注意事项



Tom今天聊的是J1939-24协议的TP.CM_BAM和TP.DT报文传输多包数据,先看协议标准

SAE J1939-21 标准

SAE J1939-21 是一部分定义了商用车辆和工业设备网络通信协议的 SAE J1939 标准系列。它主要关注数据链路层的协议,包括如何处理多包传输。该协议的一个重要部分是处理大数据传输的多包传输协议(Transport Protocol, TP)。

在通信过程中根据数据量和传输需求选择合适的消息ID和传输协议,以确保数据正确有效地传输。

TP.CM_BAM TP.DT 是在 SAE J1939 协议中的多包传输 (Transport Protocol, TP) 的特定消息类型,用于管理和传输大量数据。

TP.CM_BAM (Broadcast Announce Message)

  • TP.CM_BAM 全称为 Transport Protocol, Connection Management - Broadcast Announce Message
  • 它用于广播方式宣布即将进行的多包传输。
  • 作用:
    • 当一个节点(如车辆的电子控制单元)需要发送大于单包能容纳的数据量时,它会先发送一个 TP.CM_BAM 消息,告知网络上的其他节点即将开始一个多包传输。
    • 包含的信息包括总的数据长度、数据包数量以及数据的标识符等。
  • ID: 典型的消息ID是 0x18ECFFxx,其中 xx 通常是发送节点的地址。

TP.DT (Data Transfer)

  • TP.DT 全称为 Transport Protocol, Data Transfer
  • 它用于实际的数据包传输。
  • 作用:
    • 在 TP.CM_BAM 消息之后,数据将被分成多个 TP.DT 消息发送,每个 TP.DT 消息包含数据的一个片段。
    • 这些消息按顺序发送,接收端将这些消息重新组合成完整的数据。
  • ID: 典型的消息ID是 0x18EBFFxx,其中 xx 也是发送节点的地址。

工作流程

  1. 发送 TP.CM_BAM:
    • 发送端首先发送一个 TP.CM_BAM 消息,通知网络上的所有节点即将发送的多包传输,包括总数据长度和包数量等信息。
  2. 发送 TP.DT:
    • 紧接着,发送端开始发送 TP.DT 消息,每个消息携带一个数据片段,直到所有数据都被发送完毕。

示例

假设一个控制单元需要发送一个包含 4000 字节的数据包:

  1. TP.CM_BAM 消息:

    • 包含信息如:总长度为 4000 字节,需要发送 20 个 TP.DT 消息(假设每个 TP.DT 消息能携带 255 字节的数据)。
  2. TP.DT 消息:

    • 发送 20 个 TP.DT 消息,每个消息按顺序携带数据的片段。

关键点

  • TP.CM_BAM 是为了通知接收端即将进行的多包传输,并提供相关的元数据。
  • TP.DT 是实际的数据传输消息,按照顺序发送并被接收端重新组装。

这些消息类型在 J1939 协议中确保了大数据量的可靠传输和管理。

TP.CM_BAM (Broadcast Announce Message)

TP.CM_BAM 是多包传输中用于宣布即将进行的大数据传输的消息,具有以下特征:

  • 功能

    • 广播发送多包传输的元数据。
    • 通知网络中的所有节点即将传输的数据长度和包数量。
  • 典型格式

    • 数据长度(总字节数)
    • 总包数
    • 参数组号(PGN,Parameter Group Number)
    • 消息ID为 0x18ECFFxx,其中 xx 是发送节点的地址。
  • 示例

    // TP.CM_BAM message structure
    byte sendbuffer[8];
    sendbuffer[0] = CONTROL_BYTE_BAM; // Control byte for BAM
    sendbuffer[1] = TOTAL_MESSAGE_SIZE & 0xFF; // Least significant byte of total size
    sendbuffer[2] = (TOTAL_MESSAGE_SIZE >> 8) & 0xFF; // Most significant byte of total size
    sendbuffer[3] = NUMBER_OF_PACKETS; // Number of packets
    sendbuffer[4] = PGN & 0xFF; // Least significant byte of PGN
    sendbuffer[5] = (PGN >> 8) & 0xFF; // Middle byte of PGN
    sendbuffer[6] = (PGN >> 16) & 0xFF; // Most significant byte of PGN
    sendbuffer[7] = 0xFF; // Reserved byte
    

TP.DT (Data Transfer)

TP.DT 是用于实际数据传输的消息,具有以下特征:

  • 功能

    • 传输数据片段。
    • 通过多次发送 TP.DT 消息完成整个数据的传输。
  • 典型格式

    • 数据片段的索引
    • 数据片段内容
    • 消息ID为 0x18EBFFxx,其中 xx 是发送节点的地址。
  • 示例

// TP.DT message structure
byte sendbuffer[8];
sendbuffer[0] = PACKET_INDEX; // Packet index
for (int i = 1; i < 8; ++i) {
    sendbuffer[i] = DATA[PACKET_INDEX * 7 + (i - 1)]; // Copy data fragment
}

具体工作流程

  1. 发送 TP.CM_BAM 消息

    • 发送端准备好要传输的大数据后,先发送 TP.CM_BAM 消息,通知所有节点将进行多包传输。
    • 该消息包括总数据长度、包数量和数据标识符(PGN)。
  2. 发送 TP.DT 消息

    • 在 TP.CM_BAM 消息之后,发送端开始按顺序发送 TP.DT 消息,每个消息携带数据的一个片段。
    • 每个 TP.DT 消息有一个包索引,用于标识该消息在整个传输中的位置。
    • 接收端接收到所有 TP.DT 消息后,根据包索引重新组装数据。
  3. 处理和错误检测

    • 接收端需要检查每个包的完整性,并可能需要处理丢包或错误情况。
    • 发送端和接收端可能需要进行一些错误检测和重传机制,以确保数据完整性。

控制字节

在 TP.CM_BAM 和 TP.DT 消息中,控制字节(Control Byte)定义了消息的类型和作用:

  • 0x20: 表示 TP.CM_BAM 消息。
  • 0x00: 表示 TP.DT 消息的开始(包索引从1开始)。

重要注意事项

  • 节点地址:J1939 网络中的每个节点都有一个唯一的地址,用于区分不同的设备。
  • 参数组号(PGN):用于标识数据类型和内容,是 J1939 消息的重要部分。
  • 超时处理:在多包传输过程中,接收端和发送端都需要处理超时情况,以防止通信中断。

Tom的博客内有相关J1939全套协议。想了解更多的J1939相关知识可自行下载

  • 27
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值