
1.1 帧结构
PCI :
1.2 帧类型
在 CAN 总线 诊断通信中,CANTP(CAN Transport Protocol)是用于在 CAN 总线 上进行较大数据传输的协议。由于 CAN 总线的 数据帧长度限制(每帧最多 8 字节),CANTP 用于 分段传输 超过 8 字节的诊断数据。CANTP 协议通过 帧类型 和 标识符 来管理数据的分段和重组。
1. 单帧(Single Frame)
-
功能:用于发送 小于等于 8 字节 的数据,即数据量在一帧中完全可以传输的情况下。
-
标识:数据帧的标识符和数据部分由一个单一的数据帧组成。
-
数据长度:最多 8 字节的数据。
-
格式:
- SID (Service Identifier):表示帧类型。
- Data:包含诊断数据。
- Padding:用于填充,使得帧的总长度满足要求(在某些情况下)。
-
帧格式示例:
[ID] [Length] [Data] [Padding]
在单帧模式下,数据会直接在一个数据帧内进行传输,无需分段。
2. 首帧(First Frame)
-
功能:用于传输的数据超出 8 字节,需要分段。在分段传输时,第一帧携带数据的长度信息,并启动数据的分段传输过程。
-
标识:第一帧通过标识符表明它是数据的开始部分,并且包含数据长度信息(即总数据长度)。
-
数据长度:数据字段最多可携带 6 字节的数据,且包含数据总长度。
-
格式:
- SID (Service Identifier):标识帧类型。
- Length:指示数据的总长度,超过一帧可以处理的数据量。
- Data:数据的第一部分。
- Padding:用于填充,使得帧大小符合协议要求。
-
帧格式示例:
[ID] [Length (Total)] [Data] [Padding]
第一帧在分段传输中承担标记数据长度和分段的数据传输角色。
3. 连续帧(Consecutive Frame)
-
功能:用于传输数据的后续部分。当第一帧被发送后,剩余数据将通过连续帧进行分段传输。每个连续帧携带数据的连续片段。
-
标识:每个连续帧都标记了它是连续数据的一部分,序号会增加(例如,第一片段的序号为 1,第二片段的序号为 2,以此类推)。
-
数据长度:每个连续帧最多包含 7 字节数据。
-
格式:
- SID (Service Identifier):标识帧类型。
- Sequence Number:表示当前帧是第几个数据片段。
- Data:数据片段。
- Padding:用于填充。
-
帧格式示例:
[ID] [Sequence Number] [Data] [Padding]
连续帧在第一帧之后传输数据片段,直到所有数据片段完成传输。
4. 流控帧(Flow Control Frame)
-
功能:用于控制数据流,确保接收端能够处理传输的数据。流控制帧用于通知发送端可以继续发送数据,或者暂停发送数据。
-
标识:通过流控制帧,接收端告诉发送端其缓存的状态,决定是否继续或暂停数据传输。
-
格式:
- SID (Service Identifier):标识流控制帧。
- Flow Status:表示接收端的流控制状态,如继续接收数据、暂停接收数据等。
- Block Size:表示每次传输的最大数据块大小。
- Time:表示时间窗口,接收端可处理数据的最大时间。
-
帧格式示例:
[ID] [Flow Status] [Block Size] [Time] [Padding]
流控制帧的主要作用是协调发送端与接收端之间的通信速度,避免缓冲区溢出。
5. 扩展帧(Extended Frame)
-
功能:在 CANTP 协议中,一些数据传输可能需要更大的数据字段来处理更大的数据量或更复杂的通信要求。扩展帧允许在数据帧中使用更多的字节来传输信息。
-
格式:
- ID:扩展帧使用的标识符可能会更大,允许更多的标识符空间。
- Data:更多的数据字段和更大的传输数据。
-
注意:扩展帧不是 CANTP 协议中常见的标准帧类型,通常在需要更多灵活性的情况下使用。
总结:
帧类型 | 描述 | 数据量 |
---|---|---|
单帧 (Single Frame) | 传输数据量不超过 8 字节的数据。 | 最多 8 字节 |
首帧 (First Frame) | 传输较大数据的开始部分,携带数据总长度信息。 | 最多 6 字节 |
连续帧 (Consecutive Frame) | 传输大数据的后续部分,分段数据。 | 最多 7 字节 |
流控帧 (Flow Control Frame) | 用于流量控制,告知发送端继续或暂停数据传输。 | 控制信息 (少量) |
扩展帧 (Extended Frame) | 用于更大数据或特殊通信需求。 | 根据需求定义 |
CANTP 协议的核心任务是将 CAN 总线 的 8 字节数据限制扩展到可以传输大数据量的通信,确保数据的分段、重组以及传输的可靠性和效率。
可参考 https://www.zhihu.com/tardis/bd/art/671313928?source_id=1001
2.1 客户端和服务端
客户端:通常称为外部测试设备,使用应用层服务请求在一个或多个服务端中执行诊断功能。客户端也可以是车辆中的ECU(车载测试仪),它能够向其他ECU执行诊断请求(即网关接收固件更新(FOTA)并请求刷新到车辆上的其他ECU)。
服务端:通常是ECU或车辆功能(在多个ECU中分配),使用应用层服务将请求的诊断服务提供的响应数据发送回客户端
2.2 UDS报文结构
2.3 UDS寻址方式
只关注常用的物理寻址和功能寻址:
寻址类型 | 请求ID | 响应ID |
---|---|---|
物理寻址 | 0x734 | 0x73C |
功能寻址 | 0x7DF | 0x73C |
2.4 UDS服务
常用服务:10,27,28,85,31,3E,22,2E,34,36,37