文章目录
-
- 一、术语定义和缩略词
-
- 1.UDS (Unified Diagnostic Services)
- 2.ISO 15765
- 3.DoIP (Diagnostic Communication over Internet Protocol)
- 4.SF (Single Frame)
- 5.FF (First Frame)
- 6.CF (Consecutive Frame)
- 7.FC (Flow Control)
- 8.流控状态码(FS):
- 9.BS (Block Size)
- 10.STmin
- 11. SN (Sequence Number)
- 12.SA (Source Address)
- 13.TA (Target Address)
- 14.SID (Service Identifier)
- 15.DID (Data Identifier)
- 16.DTC (Diagnostic Trouble Code)
- 二、单帧和多帧格式报文格式介绍
- 三、网络层时间参数
- 四、非预期帧处理
一、术语定义和缩略词
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(简化实现) |