1 27服务的总体介绍
1.1 定义
通俗的说UDS诊断的27服务是提供一种加密解密的方法,有一些对ECU的特定的操作,往往这些特定的操作会涉及到安全性或者更高级别的访问权限,这时候就需要诊断仪使用27服务来对ECU进行解密,解密完成后才能对ECU进行相应的操作。
具体解密过程如下:
主要注意的是会话模式的切换,重置以及安全等级切换后,原有解锁状态的ECU应该立即锁定。
1.2 需要注意的事项
(1)27服务是成对出现的,SF的基数位一般是请求Seed,SF的偶数位一般是发送Key。
(2)一个ECU可以有多个安全等级,安全等级的区分是通过SF来区分的,安全性之间的编号具有任意性,不代表各个安全性之间有任何关系,通俗的讲就是各安全等级之间的解锁并不具备关联性。
(3)同一个时刻,只能有一个安全等级处于解锁状态。
2 27服务的请求格式2.1 27服务的请求格式
27服务的请求格式分为两种:
(1)第一种是请求Seed,格式如下:
字节 | 参数名称 | 参数约定 | 数值(Hex) |
Byte1 | Request Service Identifier 请求ID | M | 27 |
Byte2 | SubFunction=SecurityAccessType 子功能=请求种子 | M | 0x01,0x03,0x05,0x07-0x7D |
Byte3 . . Bytem | SecurityAccessDataRecord={ parameter#1 . . parameter#m } | U | 0x00-0xFF . . 0x00-0xFF 0x00-0xFF |
(2)第二种是发送钥匙,请求格式如下:
字节 | 参数名称 | 参数约定 | 数值(Hex) |
Byte1 | Request Service Identifier 请求ID | M | 27 |
Byte2 | SubFunction=SecurityAccessType=SeedKey 子功能=发送秘钥 | M | 0x02,0x04,0x06,0x08-0x7E |
Byte3 . . Bytem | SecurityKey={ Key#1(高字节) . . Key#n(低字节) } | U | 0x00-0xFF . . 0x00-0xFF |
2.2 27服务子功能参数定义
子功能 | 说明 | Cvt |
0x00 | ISO保留值 | M |
0x01 | 车辆制造商定义的安全级别的requestSeed(请求种子) | U |
0x02 | 车辆制造商定义的安全级别的SeedKey(发送密钥) | U |
0x03, 0x5, 0x7-0x41 | 车辆制造商定义的不同安全级别的requestSeed(请求种子) | U |
0x04, 0x6, 0x8-0x42 | 车辆制造商定义的不同安全级别的SeedKey(发送密钥) | U |
0x43-0x5E | ISO保留值 | M |
0x5F | ISO26021-2定义的值 | U |
0x60 | ISO26021-2发送的密钥 | U |
0x61-0x7E | 由系统供应商规定 | U |
0x7F | ISO保留 | M |
2.3 支持的否定响应码
27服务支持的否定响应码包括以下:12,13,22,24,31,35,36,37。
否定响应码 | 含义 |
0x12 | 不支持子服务 |
0x13 | 请求的消息长度与特定的服务规定的长度不匹配或者说参数格式与特定的服务规定的格式不匹配 |
0x22 | 表明ECU当前的状态条件不允许该请求 |
0x24 | 请求序列错误,表明收到的是非预期的请求序列 |
0x31 | 请求超出范围 |
0x35 | 密钥无效,诊断仪发送的密钥与ECU内存中的密钥不匹配 |
0x36 | 超出尝试次数,诊断仪尝试获得安全访问的次数超过了ECU安全策略允许值 |
0x37 | 请求所需延时时间未到 |
3 举例说明
Step1(请求种子):
诊断仪:02 27 01 AA AA AA AA AA
ECU肯定响应:04 67 01 35 A3 55 55 55
备注: 35A3是ECU发送给诊断仪的种子
Step2(发送密钥):
诊断仪:03 27 02 C3 C4 AA AA AA
备注:C3C4是通过安全算法计算出来的密钥
ECU肯定响应:02 67 02 55 55 55 55 55
4 总结
27服务就为大家介绍到这里啦,有什么疑问欢迎各位留言哦,下一期我们介绍14服务~