【一文理解诊断单帧与多帧传输--基于ISO15765-2】

发布于:2025-06-30 ⋅ 阅读:(34) ⋅ 点赞:(0)

一、术语定义和缩略词

1.UDS (Unified Diagnostic Services)

定义:统一诊断服务,基于ISO 14229-1标准,是汽车诊断的核心应用层协议。

作用:支持诊断会话控制、数据读写、ECU刷写、故障码管理等功能,采用Client/Server模式。

示例:SID 0x22表示读数据请求,SID 0x2E表示写数据请求。

2.ISO 15765

定义:汽车诊断网络层核心协议,定义CAN总线上长报文分帧传输机制。

关键功能:
长报文分帧:将应用层数据(如UDS请求)拆分为多个CAN帧传输。
流控机制:通过BS(块大小)和STmin(最小间隔时间)管理传输速率。
错误处理:检测超时、帧丢失、序列号错误等异常。

3.DoIP (Diagnostic Communication over Internet Protocol)

定义:基于TCP/IP的以太网诊断协议(ISO 13400系列),替代传统CAN诊断。

优势:支持高速远程诊断与编程(如OTA升级),传输速率达100Mbps以上。
应用场景:车辆检测、软件刷写、总装线检测。

4.SF (Single Frame)

定义:单帧,用于传输短数据(≤7字节,CAN FD支持≤64字节)。

结构:通过DLC(数据长度码)声明数据长度,无需分帧。

示例:03 22 F1 90表示读取DID 0xF190的数据。

5.FF (First Frame)

定义:首帧,多帧传输起始帧,声明总数据长度。

结构:前两字节表示总长度(如10 0F表示15字节),后续帧按SN(序列号)顺序发送。

作用:标识数据传输开始,并告知接收方总数据量。

6.CF (Consecutive Frame)

定义:连续帧,携带实际数据,每帧包含6-7字节有效负载。

序列号(SN):每帧递增(0-15循环),确保数据按序重组。

示例:21 [数据块1]表示序列号为1的连续帧。

7.FC (Flow Control)

定义:流控帧,接收方通过BS和STmin控制发送速率。

参数:
BS:允许发送的连续帧数量(如BS=8表示发送8帧后需等待)。
STmin:连续帧间最小间隔时间(单位ms,0表示无限制)。

8.流控状态码(FS):

0:继续发送
1:等待(接收方需处理数据)
2:溢出(数据量超出接收能力)

9.BS (Block Size)

定义:流控帧中定义,允许发送方连续发送的CF帧数量。

作用:防止接收方缓冲区溢出,高负载场景需限制BS值(如BS=4)。

10.STmin

定义:流控帧中定义,连续帧间最小间隔时间。

示例:STmin=10ms表示连续帧间隔至少10ms,STmin=0表示全速发送。

11. SN (Sequence Number)

定义:连续帧序列号,每帧递增,接收方按SN重组数据。

范围:0-15(0x0F)循环,确保数据顺序正确。

12.SA (Source Address)

定义:源地址,标识发送方ECU或诊断仪。

示例:诊断仪发送ID为0x7E0,ECU回复ID为0x7E8。

13.TA (Target Address)

定义:目标地址,标识接收方ECU。

扩展格式:29位CAN ID,如0x18DAA0F1(诊断仪地址0xF1,ECU地址0xA0)。

14.SID (Service Identifier)

定义:服务标识符,定义诊断服务类型。

常见服务:
0x10:诊断会话控制
0x22:读数据
0x2E:写数据
0x27:安全访问
0x19:读DTC。

15.DID (Data Identifier)

定义:数据标识符,标识ECU内部数据(如0xF190表示特定参数)。
应用:读写ECU配置、状态信息。

16.DTC (Diagnostic Trouble Code)

定义:故障码,记录ECU检测到的故障信息。
结构:由SPN(可疑参数群)、故障模式等组成(如P0301表示气缸1失火)。

二、单帧和多帧格式报文格式介绍

1.四种帧格式概览

在这里插入图片描述

2.单帧、首帧、流控帧和连续帧的区分

在这里插入图片描述

3.各种帧类型举例

单帧传输示例

场景:读取车辆诊断ID(DID)0x010A的数据(假设数据长度为2字节)。

数据发送:02 10 03 55 55 55 55 55
02:首字节前4位为0(单帧标识),后4位0010表示数据长度为2字节。
10 03:有效数据(如DID值或状态信息)。
55 55…:填充位(无实际意义)。
应用:车辆诊断中快速获取短数据,如当前车速、发动机状态等。

多帧传输示例

场景:ECU固件刷写,需传输100字节数据。

首帧(FF):10 64 00 01 02 03 04 05

10:首字节前4位为1(首帧标识),后12位0001 0000表示总数据长度为100字节(0x64)。
00 01 02…:前6字节数据(示例数据)。

流控帧(FC):30 00 0A AA AA AA AA AA

30:首字节前4位为3(流控帧标识)。
00:流控状态(FS=0,允许继续发送)。
0A:块大小(BS=10,允许发送方连续发送10帧)。
STmin=10ms:连续帧间最小间隔。

连续帧(CF):21 06 07 08 09 0A 0B 0C

21:首字节前4位为2(连续帧标识),后4位0001表示序列号(SN=1)。
06 07…:后续6字节数据(示例数据)。
后续帧:SN依次递增(2,3,…),每帧携带6字节数据,直至传输完成。

3.帧的应用

在这里插入图片描述
对于单帧而言,它的SF_DL(单帧数据长度)仅占第一个字节的低半个字节,可以表示的数据范围为0x00~0x0F,但是由于CAN标准帧总长度8的限制,帧类型和帧长度共占一个字节,留给传输有效数据的余量只有7个字节,所以SF_DL的取值范围为1 <= SF_DL <=7,即意味着一帧单帧只能传递1-7个有效数据,
在这里插入图片描述

对于传输数据量在此范围内的情况,选择用单帧进行传输,例如请求进入拓展会话:

reuqest :02 10 03 00 00 00 00 00
response:06 50 03 00 32 01 F4 CC

这里请求报文是单帧,有效数据长度为2,后面跟着的10 03是有效数据,5个 00是填充字节,解析的时候可以忽略。

响应报文也是单帧,有效数据长度为6 ,有效数据为 50 03 00 32 01 F4,CC是填充字节,解析的时候可以忽略。

在这里插入图片描述
当需要传输的数据量大于7时,我们选择使用多帧进行传输,首先需要发送首帧,首帧的第一个字节的高半个字节表示帧类型,是1则表表示是一个首帧。首帧的第一个字节的低半个字节以及整个第2个字节(共1个半字节)表示接下来要传输的有效数据长度,FF_DL(首帧数据长度)的取值范围是0x008 <= FF_DL <=0xFFF(4095),首帧的第3个字节及后面的字节可以表示一部分有效数据。

在这里插入图片描述

Receiver收到首帧之后需要发送一帧流控帧,用以表示Receiver接收数据的能力。其中包括几个参数:
在这里插入图片描述

  • 帧类型在第一个字节的高半个字节,是3则表示这是一帧流控帧

  • 低半个字节是FS,表示流控制状态,一般是0,继续发送
    在这里插入图片描述

  • 第2个字节是BS, 表示块大小,是几就允许接下来Sender发几帧续帧,一般该值为0x00, 表示允许Sender 把剩余的数据用续帧一下子发完
    在这里插入图片描述

  • 第3个字节是STmin,表示允许接下来Sender发送续帧之间的最小帧间隔时间
    -
    Sender 在收到流控帧之后,需要根据流控帧的指示把要传输的有效数据继续传输下去,续帧的第一个字节的高半个字节是2,表示这是一个续帧,低半个字节表示帧序号,它的范围是0x00-0x0F,后面的7个字节用来传输有效数据。

续帧会把除首帧之外的有效数据按顺序进行拆包,除最后一帧外,每一帧都搭载7个字节的有效数据,帧序号则表示传输序列,正常的传输过程如下(第一帧总是从21开始):
21 xx xx xx xx xx xx xx
22 xx xx xx xx xx xx xx

2F xx xx xx xx xx xx xx
20 xx xx xx xx xx xx xx
21 xx xx xx xx xx xx xx
22 xx xx xx 00 00 00 00

4.多帧传输完整报文示例

Sender:10 14 00 01 02 03 04 05
Receiver:30 00 0A AA AA AA AA AA
Sender:21 06 07 08 09 0A 0B 0C
Sender:22 0D 0E 0F 10 11 12 13

接收方根据连续帧的SN字段(1, 2, 3,…)按顺序重组数据,最终得到完整数据:
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13

三、网络层时间参数

在这里插入图片描述

定时参数 描述 超时影响
N_As 发送方发送首帧/连续帧后,到接收方成功接收的最长等待时间 发送方终止传输,报错N_TIMEOUT_A
N_Ar 接收方收到首帧后,到发送方成功接收流控帧的最长等待时间 发送方重传首帧或终止传输
N_Br 接收方从接收首帧到开始发送流控帧的最大时间 发送方终止传输,报错N_TIMEOUT_Bs
N_Bs 发送方发送首帧后,到接收方流控帧到达的最长等待时间 发送方重传首帧或终止传输
N_Cr 接收方发送流控帧后,到连续帧到达的最长等待时间 接收方终止接收,报错N_TIMEOUT_Cr
N_Cs 发送方连续帧间最小间隔(即STmin),防止接收方缓冲区溢出 接收方可能丢弃数据

四、非预期帧处理

在汽车诊断(如UDS协议)及工业通信领域,非预期帧处理是确保数据传输可靠性和安全性的核心机制。它指接收方对不符合当前通信状态或协议规范的帧(如错误类型、乱序序列号、超时未响应帧等)进行识别、处理并恢复通信的能力。

1.非预期帧的分类与识别

帧类型 非预期场景 识别依据
首帧(FF) 重复首帧、数据长度冲突、非法N_PCI标识 帧计数器(FCN)不匹配、FF_DL与已接收数据长度冲突、N_PCI高四位非1
流控帧(FC) 非法流控状态(FS)、块大小(BS)越界、STmin超限 FS值非0/1/2、BS值超出接收方缓冲区容量、STmin小于协议最小值(如CAN FD的100μs)
连续帧(CF) 序列号(SN)断续、重复SN、非法N_PCI标识、数据校验失败 SN不连续、SN超出当前块范围、N_PCI高四位非2、CRC校验错误
单帧(SF) 数据长度超限、非法N_PCI标识 SF_DL超过单帧最大容量(如7字节)、N_PCI高四位非0

2.非预期帧处理机制

(1)错误检测与帧丢弃

校验机制:通过CRC校验、帧计数器(FCN)验证、N_PCI字段合法性检查识别非预期帧。

丢弃策略:
-立即丢弃非法帧,不发送确认信号。
-记录错误日志(如DTC码0x1234表示“非预期帧接收”)。

(2) 超时重传与会话恢复

首帧超时(N_As):
发送方等待流控帧超时后,触发重传首帧(最多重试3次)。
仍失败则终止会话,报错N_TIMEOUT_A。

连续帧超时(N_Cr):
接收方等待连续帧超时后,发送流控帧(FS=1,等待状态)。
发送方收到等待状态后,暂停传输并等待新流控帧。

(3) 序列号(SN)管理与重组

缓冲机制:接收方维护16位序列号缓冲区,检测SN断续(如收到SN=3后直接收到SN=5)。

重组策略:
SN断续时,发送流控帧(FS=1)请求重传丢失帧。
累计3次SN错误则终止会话,清空缓冲区。

(4) 流控状态(FS)动态调整

溢出处理(FS=2):
接收方检测到数据长度超过缓冲区容量时,发送流控帧(FS=2)。
发送方立即终止传输,报错N_BUFFER_OVFLW。

等待状态(FS=1):
接收方处理高负载时,发送流控帧(FS=1,BS=0)。
发送方暂停传输,直至收到新流控帧(FS=0)。

3.关键参数配置与影响

参数 作用 配置建议
N_As 控制首帧重传间隔,平衡实时性与可靠性 汽车诊断:500ms(容忍总线负载);工业控制:200ms(低延迟优先)
N_Cr 防止接收方无限期等待连续帧,避免资源泄漏 汽车ECU:150ms(适应CAN FD高带宽);传统CAN:300ms
STmin 约束发送速率,防止接收方缓冲区溢出 CAN FD:100μs(支持高速传输);传统CAN:5ms(保守配置)
SN缓冲区大小 决定最大可容忍的SN断续次数 汽车诊断:16(覆盖全序列号范围);工业控制:8(简化实现)

网站公告

今日签到

点亮在社区的每一天
去签到