UDS学习笔记

1、SDU PCI PDU 三者之间的关系

PDU和相应层的协议有关,不同协议对应各自的PDU长度,用户的数据要进行通信必须封装到PDU中,实现对等层之间的信息交换。而用户数据可以理解为SDU,它的长度可能大于或者小于PDU,要想进行通信,则必须将SDU分割或者拼接为PDU长度。
PDU:协议数据单元,对等实体之间进行数据交换的载体,每个层都有各自PDU,上层调用,请求服务把本层的PDU传递到下层,下层接收上层PDU,并添加PCI,组成本层PDU;
PCI:协议控制信息,用于描述本层功能
土话:PDU包含PCI(协议控制信息)+SDU(用户数据)
如果SDU数据超过PDU发送的最大数据,分解成几个发送。
UDS学习笔记_第1张图片

2、UDS预备知识

①、UDS请求命令4种构成方式。

SID
SID+SF(Sub-function)
SID+DID(Data Identifier)(读写用)
SID+SF+DID
其中安全标识符(Security Identifiers,SID),服务ID值($10、$27那种)
SF(Sub-function):子功能
DID:应该指具体读取哪一个寄存器的指。

②、常见的NRC(响应码)

0x11表示服务不支持;
0x12 subfunction不支持;
0x13 请求的长度不正确,或者格式不正确;
0x31 是请求超出范围;
0x33 安全拒绝
0x35 无效的秘钥
0x7E 是在当前会话下subfunction不支持;(应该是权限不够)
0x7F 是在当前会话下服务不支持。(应该是权限不够)
特殊NRC:78(RCRRP):表明请求消息被正确地接收,请求消息中的所有参数都是有效的,但是要执行的操作还没有完成,等待Server完成后,会重新发送NRC。

③、N_PUD类型

包含PCI+SDU(协议信息+数据单元)
UDS学习笔记_第2张图片
UDS学习笔记_第3张图片
STmin:体现了接收方的处理能力,处理CAN接收的速度
BS:体现了接收方的接收能力:软件buffer的大小
单帧、多帧传输具体步骤参考下面博客:
https://blog.csdn.net/dop102/article/details/80318141

3、常用的诊断服务

结合同事与网上资料,重点掌握以下11个
$10 Diagnostic Session Control(诊断会话)
$11 EcuReset(ECU复位)
$27 Security Access(安全访问)
$3E Tester Present(待机握手)。
$22 Read Data By Identifier(通过ID读数据)
$2E Write Data By Identifier(通过ID写数据)
$14 Clear Diagnostic Information(清除诊断信息)
$19 Read DTC Information(读取故障码信息)
$34 Request Download(请求下载)
$36 Transfer Data(数据传输)
$37 Request Transfer Exit(请求退出传输)
分类
UDS学习笔记_第4张图片

①、$10 Diagnostic Session Control(诊断会话)

$10包含3个子功能,01 Default默认会话,02 Programming编程会话,03 Extended扩展会话,ECU上电时,进入的是默认会话(Default)
权限大小:扩展会话 > 默认会话
编程会话:仅用于解锁bootloader相关的诊断服务,即程序烧录。
备注:我们要写入数据/参数、读写诊断码,均要在扩展会话下。
Eg:
UDS学习笔记_第5张图片

②、$11 EcuReset(ECU复位)

使ECU复位。

③、$27安全访问

类似手机的root权限,一般情况下,一些特殊数据用户是无法读取的,想要读取,必须要先使用$27服务解锁。
解锁流程:我们通过$27服务,加上一个子服务,再加上一个钥匙,这样的服务请求可以进行解锁。比如下面的例子,2n-1是一个子服务,通过首轮种子的请求,首轮ECU会返回67+01+AA+BB+CC+DD,AA~DD就是种子了。之后第二轮,诊断端会利用种子进行运算(利用整车厂的算法),生成k1(不一定是1个字节),那么发送请求,27+02+[k1]。ECU同样也会通过种子算出k2。当k1和k2匹配时,解锁(Unlocked)成功。
UDS学习笔记_第6张图片
UDS学习笔记_第7张图片
具体解释(忽略种子不一致)
Tester:02 27 05 00 00 00 00 00 安全访问,05子功能
ECU: 06 67 05 08 27 11 F0 00 肯定响应,回复了对应安全级别的种子
Tester:06 27 06 FF FF FF FF 00 发送密钥,4个FF。注意06是与05成对使用的。(2n-1与2n)
ECU: 03 7F 27 78 00 00 00 00 若为否定响应,7F+27+NRC
ECU: 02 67 06 00 00 00 00 00 若为肯定响应,通过安全校验

④、$3E Tester Present(待机握手)

例如$10服务,当我们切换非会话模式时,一个定时器会运转,如果一段时间内没有请求,那么到时间后,诊断退回到默认会话01(最低权限)。如果想要保持此模式,就需要使用$3E服务。
例子:
在这里插入图片描述
如果不需要响应,可以在加一个0x80,格式如下
02 3E 80 00 00 00 00 00

⑤、$22 Read Data By Identifier(通过ID读数据)

$22读数据,Request(请求):22+DID(Data Identifier,通常是两个字节)
Response(响应):62+DID+Data
在这里插入图片描述
DID有一部分已经被ISO 14229-1规定了。比如0xF186就是当前诊断会话数据标识符,0xF187就是车厂备件号数据标识符,0xF188就是车厂ECU软件号码数据ID,0xF189就是车厂ECU软件版本号数据标识符。

⑥、$2E Write Data By Identifier(通过ID写数据)

$2E写数据,Request(请求):2E+DID+Data
Response(响应):6E+DID
UDS学习笔记_第8张图片
正确的顺序是10开头的帧请求、30开头的帧回复、21开头再请求、22开头继续请求、03开头回复确认。我们一帧一帧来看。
10 14根据ISO15765-2代表这是一组多帧中的首帧(属于传输层的信息),一会要发0x14=20个字节的有效数据。之后是2E+F190(代表这是VIN码)+VIN码的前3个字节。意思是作为外部工具,想写入一个VIN码数据。这件事情正常是发生在车辆下线时。
30 00 14是TP层(传输层)的信息,表示这是一个流控帧,ECU发出的,表示可以一直连续发,但连续帧最短的间隔时间要求是20ms。
21是TP层的信息,表示这是一个连续帧,序号为1。后面是VIN码的第4字节到第10字节。
22是TP层的信息,表示这是一个连续帧,序号为2。后面是VIN码的第11字节到第17字节。
03是TP层的信息,这里说的这个TP层的信息是传不到应用层的,即这是一个用完就会抛弃的信息。03的0表示这是一个单帧,3表示后面有3个有效字节。6E表示我们确认执行了2E服务的请求,这个请求写入的ID是F1 90,即VIN码。
注意:比如0xF190等DID不支持直接写入数据,需要用$10来进行会话转换。也就是说,对于写数据的请求,一般来说需要在一个扩展会话,和安全等级1的状态下才能进行。

⑦、$14 Clear Diagnostic Information(清除诊断信息)

清除(复位)DTC格式,它可以改变DTC的状态。DTC状态中的八个位,除bit4和bit6外均会被清零,包含当前故障(TestFailed)和历史故障(ConfirmedDTC)。bit4和bit6这两个testNotCompleted开头的会被强制置1。
3个FF代表清除所有DTC。
Request:14+FF+FF+FF;
Response:54 。
在这里插入图片描述

⑧、$19 Read DTC Information(读取故障码信息)

19服务是一套诊断服务中的重中之重。协议中篇幅长达63页,通信举例达到了18个。可以说没有19服务,就没有完整的UDS。
故障码包括四个大类,分别是PCBU,P是powertrain动力系统,C是Chassis底盘,B是Body车身,U是network通信系统。一个DTC信息占用4个字节。最后一个字节是DTC的状态。
DTMMiddleByte和DTCLowByte两个字节是我们熟知的类似P0047(ISO15031中的故障码)中“0047”的纯数字故障码。第一个字节在乘用车中,前两个bit代表P/C/B/U(动力/底盘/车身/网络)中的一个,之后六个bit+2字节表示数字,合在一起的样子形如“C01”。
第一个字节的前2个bit中,用00/01/10/11分别表示P/C/B/U。
组成:4字节:3字节DTC(前2位区分P/C/B/U)+ DTCSttatus
UDS学习笔记_第9张图片
$19拥有28个子服务(Sub-Function)。常用的子服务有:
01 (读取符合掩码条件的DTC数量)(必须支持),后面的参数是DTC状态掩码,若为01表示我想读当前故障,若为08表示我想读历史故障,若为09表示当前故障和历史故障都想读。
在肯定回复时,组合应该是59(19+40) - 01 (子功能) - 09 (本ECU所支持的掩码条件)-01 DTC的格式(ISO14229-1为01) - 00 01 (目前满足条件的DTC有一个)
02(读取符合掩码条件的DTC列表及其状态)(必须支持),后面的参数是DTC状态掩码,解读同上。
在肯定回复是,59 - 02(子功能)- 09(本ECU所支持的掩码条件) - XX XX XX ( DTC,车厂定义 ) - 01 (这个故障码怎么了,01表示当前故障)
04(读取快照信息),也叫冻结帧。
06(读取扩展信息)。
0A(读取ECU支持的所有DTC列表及其状态)(必须支持)。这个就不必发DTC状态掩码了。所有支持的DTC列表及其状态都会打印出来。
在这里插入图片描述
来源于网上摘抄。
⑨、$34 Request Download(请求下载)

⑩、$36 Transfer Data(数据传输)

⑪、$37 Request Transfer Exit(请求退出传输)

你可能感兴趣的:(汽车,其他)