1、服务描述
此服务的目的是提供一种访问数据/诊断服务的方法,这些数据/诊断服务由于安全原因而受到访问限制。
用于下载/上传例程或数据到服务器以及从服务器读取特定内存位置的诊断服务可能需要安全访问。不适当
的程序或下载到服务器的数据可能会潜在地损坏电子设备或其他车辆部件,或危及车辆对排放、安全、或
安全标准的遵守。安全概念使用种子和键关系。主要应用场景为以下场合:
在针对 Server 重新编程时,需要通过 27 安全解锁才能够进行后续的重编辑操作,否则将对 Server 造成极大的安全风险;
在产线写入较为重要的版本或者标定等信息过程中,则首先需要使用 27 服务才能够使用写操作的诊断指令,如 2E 服务。
一般而言,若需要往 Flash 中写入相关数据时都需要优先执行 27 安全解锁之后才能够进行安全写入。
执行十分重要的 31Routine 时,也需要优先执行 27 安全解锁之后才能够执行对应的 routine。
安全解锁的基本原理如下图所示:
2、服务请求格式
27 服务请求报文格式如下图:
SID:27
SubFunction:请求种子 Seed 服务,必须为奇数
SecurityAccessDataRecord[n]:Client 发送给到 Server 的表示信息,可选,一般不用。
SID:27
SubFunction:发送 key 子服务,必须为偶数
securityKey:client 向 server 发送的具体 Key 值
3、肯定响应格式
如下图所示:为 27 01 请求所对应的正响应:
Respond Seed
Verify Key
4、负响应代码(NRC_)
0x12:诊断请求的 subfuntion 不在 Server 支持的范围内
0x13:发送的报文长度或格式不正确
0x22:诊断条件不满足
0x24:当 Server 从未接收到 request seed 子服务,直接发送 Seed key 至 Server 时,此时 Server 会回复"7F 27 24"
0x31:当 securityDataRecord 超出规定的范围时,Server 会回复"7F 27 31"
0x35:当接收到的 key 与 Server 计算出的 key 不一致,此时 Server 会回复"7F 27 35"
0x36:当尝试一定次数的 Send Key,Server 始终无法解锁时,Server 会回复"7F 27 36"
0x37:若延迟计数器处于激活状态且有请求被发送,Server 会回复"7F 27 37"
5、实战配置及代码介绍
以 ETAS 的 ISOLAR-A/B 工具为例:
1、DCM 模块下 DcmDsd 子模块中创建 27 诊断服务,如下图:
2、在 DcmDsp 子模块下创建安全级别配置,如下图:
该配置对应的生成代码如下图: