CAN-TP传输协议详解

本文涉及的产品
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 1个月
简介: CAN-TP传输协议详解

01.概述


01.CAN-TP协议概述

ISO 传输协议位于 OSI 层模型的第四层(传输层)。传输协议的主要任务是传输由于长度而不能作为单个协议数据单元 (PDU) 传输的消息。包含大包数据【通过分段在单个 PDU 中传输】的消息通过传输协议被分段并分成多个单独的 PDU。因此,为了像 CAN 一样发送数据,设计了 CAN-TP 协议。ISO 15765-2 CAN-TP 协议是一种国际标准传输层协议,用于在 CAN 连续帧上发送超过 8 字节的数据,ISO TP 定义了一种传输方法,允许通过 CAN 总线发送多达 4095 个字节。为此,要发送的消息是分段成一帧帧的 CAN 帧。

ISO-TP 最常见的应用是基于UDS 传输诊断消息,但也广泛用于其他特定应用的 基于CAN帧的大包信息的传输。

02.CAN-TP的寻址格式

CAN-TP 是在 CAN 堆栈上实现的,因此为了识别它,有两种类型的寻址:

  • 基本寻址。
  • 扩展寻址。

基本寻址【BASIC ADDRESSING】:CAN-TP 协议的基本寻址模式称为普通寻址模式,我们通过CAN Identifier识别是普通的CAN 报文还是CAN-TP报文。也就是说将有一些特定的标识符用于 CAN-TP,如果接收到这些标识符的任何消息,则服务器将理解为此消息为 TP 消息。这种寻址方式的优点是可以将完整的 8 个字节的数据包作为数据发送。

扩展寻址【EXTENDED ADDRESSING】:这种寻址模式是将CAN 数据字段的第一个字节将用于地址的附加元素的一种 CAN-TP 寻址模式,这种寻址方式导致报文数据的有效负载减少一个字节。

03.CAN-TP的帧类型

CAN-TP基于Can帧,可以进一步分为以下四种帧类型:

  1. 单帧【Single Frame】
  2. 首帧【First Frame】
  3. 连续帧【Consecutive Frame】
  4. 流控制帧【Flow Control Frame】

3.1 单帧(SF)

如果数据有效载荷为 7 字节或小于 7 字节,则单帧将用于 CAN-TP 协议中的数据传输。其中数据字段的第一个字节用于寻址。该字节再次分为两部分,其中 MSB 4 位用于寻址称为 PCI(协议信息)的 TP 帧类型。LSB 4 位用于 DLC(数据长度代码)。

148f453d964fc8b9b1d0101a0dcecc97_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

图1 CAN-TP:单帧格式

3.2 首帧FIRST FRAME (FF)

首帧是CAN-TP协议中多帧消息包的初始消息。当必须传送超过 6 或 7 个字节的分段数据时使用它。第一帧包含完整数据包的长度以及初始数据。在 FF 中,前 2 字节用于 PCI,其中第 1 字节的 MSB 4 位用于帧类型,LSB 4 位和下一个 1 字节(总共 8+4 = 12 位) ) CAN 数据字段用于 DLC(2^12 = 4095 个数据字节)。所以在FF中,第一次只能传输6个字节的数据。这个帧负责向接收者发送关于他将要发送多少总数据字节的信息。

65e607d80dbd20bd6b2b5fde0355c7e0_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

在这里插入图片描述

图2 CAN-TP:首帧格式

3.3 连续帧 (CF)

传输协议或 CAN-TP 协议的主要任务是传输这样的消息【由于长度而不能作为单个协议数据单元 (PDU) 传输的】,这样的消息被分段在多帧单独的 PDU消息中。

8c7df43e65a42721090b021f0176bc38_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

图 3 CAN-TP:连续帧格式

在 CF 中,第一个字节用于 PCI 字节,而 MSB 4 位定义为帧类型,LSB 4 位定义为序列号。序列号始终从 1 开始,并随着发送的每一帧而递增(如 1、2、…、15、0、1、…),这样的方式可以检测丢失或丢弃的帧。每个连续的帧都从 0 开始,注意:最开始的首帧中的第一组数据将被视为第 0 个数据。所以第一组CF(连续帧)从“1”开始。之后,当它到达“15”时,它将通过重置从“0”开始。

3.4 流控制帧 (FC)

CAN-TP 协议的流控制机制用于配置发送方以匹配接收方的属性(定时、可用接收缓冲区、接收准备情况)。流控制帧 (FC) 始终由接收端发送,以便根据接收端的属性来决定发送端发送数据的方式。

064b3f79f53145f0d6e0e6ccad49c660_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

图 4 CAN-TP:流控制帧格式

在 FC 中,第一个字节的 MSB 4 位定义为帧类型,LSB 4 位定义流控制标志。

流量控制标志流控制(FC)帧由接收节点发送到发送节点,用于传输流控。流控制帧包含 3 个字节,它们共同构成 CAN-TP 协议中的 PCI。第一个字节从高四位开始,值为 3,表示为流控制帧。在第一个字节的四个最低有效位中显示了一个流状态(FS),来通知分段传输是清除发送 (CTS)、等待还是溢出(Wait or Overflow.)。第二个字节 BS 代表 Block Size,表示一个消息块中需要发送多少个连续帧。最后一个字节STmin显示要注意的连续帧之间的最小时间间隔。

ISO-TP 帧总是 8 字节长,不需要的字节用 0xAA 或 0x55 填充字节填充。

04.TP消息数据传输方式

CAN-TP协议的数据传输方式有两种:单帧数据传输和多帧数据传输。单帧数据传输(Unacknowledged Unsegmented Data Transfer)和多帧数据传输(Unacknowledged Segmented Data Transfer)。在一个 CAN 帧中,最多有 8 个数据字节的用户数据。ISO TP 消息的数据长度最大可以达到 4095 字节。如果 ISO TP 消息长度超过 8 个数据字节的数据长度,UDS消息必须分段。

b5f4ecfd09ec0ed05d0f0c9592e1e439_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

图5 单帧数据传输

3c8384d56ca6451db6dd34c9fbd2afd0_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

图6 多帧数据传输

05.CAN-TP 错误处理

5.1 时序错误

在 CAN-TP 协议中,发送端和接收端都使用定时器监控数据传输。接收端监视发送端发送连续帧所需的时间。如果这需要很长时间,则中止传输并丢弃已传输的数据。同样地,发送端监视接收端发送流控制帧的时间。如果检测到超时,则再次中止传输并且丢弃已传输的数据。帧的最大等待时间为一秒。

5.2 帧格式错误

除了时序错误之外,还必须识别帧格式中的错误。如果检测到错误的 PDU,则忽略该帧,或者如果正在传输,则取消它。帧格式中可能出现的错误是连续帧中的序列号不正确、消息长度无效、流控制帧中的流状态无效或 PDU 类型无效。除了单帧和物理寻址的首帧的非预期到达的帧总是被忽略,功能寻址的首帧、连续帧和流量控制总是被忽略。

06.例子解析

下面是一个多帧传输的实例,具体解析可参考我的文章《CanTp 模块分段传输报文消息》

STEP1:首帧:客户端 - 服务器

10 64 xx xx xx xx xx xx

STEP2:流控制帧:服务器到客户端
30 0A 14 xx xx xx xx xx
STEP3:连续帧:客户端 - 服务器
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
STEP4:流控制帧:服务器到客户端
30 00 14 xx xx xx xx xx
STEP5:连续帧:客户端到服务器
20 xx xx xx xx xx xx21 xx xx xx xx xx xx xx22 xx xx xx xx xx xx23 xx xx 00 00 00 00


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
网络性能优化 网络架构 网络协议
|
7月前
|
缓存 网络协议 物联网
UDP的可靠性传输
UDP的可靠性传输
206 1
|
5月前
|
网络协议 网络性能优化
用udp协议传输文件
【7月更文挑战第18天】使用 UDP 协议传输文件 UDP(User Datagram Protocol,用户数据报协议)是一种无连接的、不可靠的传输协议。尽管它不像 TCP 那样提供可靠的传输和拥塞控制,但在某些特定场景下,例如对实时性要求较高、能容忍一定数据丢失的情况,也可以用于文件传输。
|
6月前
|
网络协议 API 开发者
无线通信模块通过TCP/IP协议实现与PC端的数据传输
本文介绍了无线通信模块借助TCP/IP协议向PC端传输数据的过程,包括数据封装、发送和接收,并以WIFI模块为例,讨论了在QT平台下实现无线数据传输的方法。通过QTcpSocket类,开发者能轻松建立WIFI模块与PC间的连接。随着无线通信技术的进步,未来将有更多创新应用出现。
|
6月前
|
缓存 网络架构
计算机网络——数据链路层-可靠传输的实现机制:停止-等待协议SW(确认与否认、超时重传等,信道利用率及相关练习题)
计算机网络——数据链路层-可靠传输的实现机制:停止-等待协议SW(确认与否认、超时重传等,信道利用率及相关练习题)
137 0
|
7月前
|
网络协议 iOS开发 MacOS
LabVIEW在快速传输速率下丢失UDP数据包
LabVIEW在快速传输速率下丢失UDP数据包
92 0
|
7月前
|
算法 数据安全/隐私保护 流计算
信道划分&介质访问控制&ALOHA协议&CSMA协议&CSMA/CD协议&轮询访问MAC协议
信道划分&介质访问控制&ALOHA协议&CSMA协议&CSMA/CD协议&轮询访问MAC协议
266 1
|
7月前
|
缓存 网络协议 网络性能优化
UDP的可靠传输/KCP是怎样练成的
UDP的可靠传输/KCP是怎样练成的
189 0
|
7月前
|
缓存 网络协议 算法
UDP的可靠性传输2
UDP的可靠性传输2
91 0
|
网络协议 算法 Go
【协议分析】rpcx网络协议分析之kcp数据传输
【协议分析】rpcx网络协议分析之kcp数据传输
139 0