CanTp 模块分段传输报文消息

传送门 ==>> AutoSAR入门和实战系列总目录*
ISO15765-2 标准为基于 CAN 总线的系统定义了一种CAN传输协议,该传输协议允许在 UDS 协议中对周期性消息进行分段传输。数据字节多于8个,单个can帧不能发送。为了通过CAN帧去发送它,这些大于8字节的数据字节将被分割成多个帧。ISO15765-2传输协议位于OSI层模型的第四层,用于PC到PC的无缝数据通信。CAN 总线每帧最多可以发送 8 个字节的用户数据。ISO TP 定义了一种传输方法,允许我们通过 CAN 总线定期发送多达 4095 个字节。为此,将要发送的消息进行分段后通过单独的 CAN 帧进行发送,这有助于通过 CAN 网络传输超过 8 字节的数据。
在这里插入图片描述
UDS 协议是一种诊断协议,其工作方式类似于客户端-服务器通信,用于诊断车辆故障。为了在客户端和服务器之间进行通信或数据传输,它使用周期性消息。这些周期性消息有两种类型:

  • 未确认的分段数据传输 (USDT)
  • 未确认的未分段数据传输 (UUDT)

大多数UDS协议有两种SID(Service Identifier)。

  • SID 与这回复。
  • SID 没有反应。

1 CAN中的消息分段

传输层协议的主要目标是传输由于 CAN 网络中的长度而无法作为单个协议数据单元传输的消息。很大的数据消息通过传输协议进行分段,并分为多个单独的 PDU(不同的帧或数据包),这些单独的 PDU可以在单个 PDU 中传输。关于分段的帧的格式可以参考CAN TP 的不同帧格式,具体可参考我的文章《CanTp01-CanTp 模块功能概述与总结》

2 传输层分段传输实例解析

假设您有 100 字节的数据,并且您要传输到车辆中可用的 ECU。因此,您将使用 OBD-II 硬件将您的计算机连接到 OBD-II 端口,然后在计算机上打开您的诊断工具。然后选择您的文件并将该特定文件传输到该ECU。

首先,客户端将发送第一帧(first frame )到 ECU,服务器将发送流量控制帧( flow control frame ),其中包含有关客户端如何定期向服务器发送周期性消息。

首帧:客户端 - 服务器

10 64 xx xx xx xx xx xx

在上面,客户端正在发送一个 CAN 数据帧,其中第一个字节定义为 0x10。MSB 4 位为 1,定义它是第一帧,LSB 4 位加上下一个 1 字节共有 12 位,定义CAN TP要发送的数据长度。此值为 0x64,十进制为 100 字节。所以从那里,服务器知道客户端将发送总共 100 字节的数据。接下来的 6 字节是 xx,表示客户端发送的实际的数据。所以从这里我们了解到,前2个字节的数据是协议控制信息,并不是真正的数据。接下来的 6 字节是服务器需要的实际数据。然后,在服务器接收到该数据后,它将计算其要分配的接收缓冲区内存,并据此决定数据客户端的剩余的 94 字节(100 - 6)如何发送。然后服务器将发送如下流控制帧:

流控制帧:服务器到客户端

30 0A 14 xx xx xx xx xx

在上述帧中,第一个字节的 4-MSB 是 3 表示流控制帧,接下来的 4-LSB 是流状态,0 表示清除发送。清除发送意味着服务器通知客户端服务器现在空闲,以便客户端可以开始发送 UDS 协议帧格式的周期性消息。第二个字节是 0A 是块大小,只是客户端可以定期发送的连续帧数。第三个字节 0x14 是最小间隔时间,即两个连续帧之间的时间延迟,以便给服务器一些时间准备好定期无缝接收下一个连续帧。

客户端收到流量控制帧后,将开始定期发送连续帧,如下所示:

连续帧:客户端 - 服务器

20 xx xx xx xx xx xx

21 xx xx xx xx xx xx xx

22 xx xx xx xx xx xx xx

23 xx xx xx xx xx xx xx

24 xx xx xx xx xx xx xx

25 xx xx xx xx xx xx xx

26 xx xx xx xx xx xx xx

27 xx xx xx xx xx xx xx

28 xx xx xx xx xx xx xx

29 xx xx xx xx xx xx xx

在上面发送到服务器的 10 个连续帧中,第一个 4-MSB 定义了连续帧类型(Consecutive Frame),第二个 4-LSB 定义了索引或发送到服务器的连续帧数。由于服务器发送给客户端的 10 个周期性消息应该由客户端定期发送,客户端发送它,然后它将等待来自服务器的下一个流控制帧,因为总共需要向服务器发送 100 个字节. 在第一帧中,客户端的 6 字节数据和接下来的 10 个连续帧中每帧有 7 个字节是 70(10×7),加起来总共 76 个字节。剩余的 24 (100-76) 个字节将在下一阶段继续。以分段格式传输的数据帧消息在 UDS 协议中称为周期性消息。

服务器总共接收到 10 条周期性消息后,会发送下一个流控制帧,如下所示:

流控制帧:服务器到客户端

30 00 14 xx xx xx xx xx

然后客户端会收到这个帧,收到后它会明白所有其他字节都已经定义了,第二个字节是 00 意味着现在客户端可以向服务器发送无限的连续帧。因此,在收到此帧后,客户端将再次开始发送连续的帧,如下所示:

连续帧:客户端到服务器

20 xx xx xx xx xx xx
21 xx xx xx xx xx xx xx
22 xx xx xx xx xx xx
23 xx xx 00 00 00 00

在上面发送完 24 个字节后,客户端停止周期性消息发送。之后,客户端-服务器通信将结束。与此类似,UDS 协议使用周期性消息发送到服务器进行多字节消息通信。

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

糖果Autosar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值