零碎困惑
肯定响应抑制位SuppressPosRspMsgIndicationBit
简写为SPRMIB。子功能参数的取值范围为0x00 - 0x7F。子功能参数占用了一个字节,可用的数值范围为0~0xFF。但子功能的最大取值只到0x7F,有一位留给了SPRMIB。
ECU收到SPRMIB为1的服务时,不需要给出肯定响应。相反,当ECU收到SPRMIB为0的服务时,需要给出肯定响应。
例如,ECU收到诊断仪发来的Tester Present服务为$02 3E 00时,需要给出$02 7E 00的肯定响应。同样是Test Present服务,如果ECU收到的是$02 3E 80,则无需给出肯定响应。
80对应二进制1000 0000
否定相应:7F + 服务 + NRC
NRC
req 10 01
rep 7F 10 13
req 27 01
rsp 7F 27 37
举例10服务
[02] 10 08--子功能不支持--7F 10 12
[03] 10 02 00--报文长度错误或者格式非法--7F 10 13
\\10 02 _升级-前置条件,例如车速<2KM/h
P2Server:诊断工具请求和ECU相应时间的最大时间间隔(实际需要小于等于这个值)
P2*Server:诊断工具收到否定响应码0x78后,响应最大时间
NRC 78:请求报文被正确接收到,请求报文所有参数均是有效的,诞生所执行的动作未完成,ECU还未准备接受另一个请求,返回否定相应NRC=0x78,同时启动一个定时器,在P2*Server的时间后给予答复。如果动作完成回复相应结果,未完成且P2*Server到时候,继续返回否定相应NRC=0x78,并重启定时器。
会话跳转:01->03->02,不可逆。
NRC 12、13优先级
27服务
由于安全、传输的原因,安全访问服务(#27)需要提供多种方式访问首先得数据或者其他诊断服务。
安全等级
解锁流程&请求、响应格式
解锁流程
安全访问流程
1、请求种子
上位机向ECU发送请求,ECU返回Seed。
种子字节数需要注意,通常是4个字节,具体需要关注需求。
2、发送秘钥
尚未及收到Seed后,计算出一个秘钥发送给ECU,ECU根据同样计算得出一个秘钥,两秘钥匹配则通过。
注意:1.安全等级之间互斥,任意时刻仅激活一个安全等级;安全等级数字是任意分配的,没有优先级之分;
2.种子的值随ECU随机产生,应避开0和最大值F——全0的种子通常来检测当前是否已经解锁,已解锁状态下请求种子将会返回全0种子;
3.秘钥有特定安全算法产生
4.上图请求种子及秘钥的动作流程是强制性的(01,02),当ECU返回否定相应、或者因其他原因导致诊断会话模式回到默认会话模式,种子将重新生成。
请求格式
请求种子:27 + SF(01/03)
肯定相应:67 + SF(01/03) + Seed
否定相应:7F + SF(01/03) + NRC1
发送秘钥:27 + SF+1(02/04) + Key
肯定相应:67 + SF+1(02/04)
否定相应:7F + SF+1(02/04) + NRC2
注意:NRC1:12子功能不支持、13报文长度错误、22条件未满足、37延迟时间未到
NRC2:12、13、22、24请求序列错误、35密钥错误、36超出访问次数限制。
延时机制(NRC=36、37)--防止多次请求、暴力遍历
策略有:
1.连续请求种子,种子是否相同?不相同,多次请求种子后仅允许最新一次请求的种子所计算的额秘钥通过安全访问;
2.错误计数器存储位置。如果错误计数器存放非易失存储器中,ECU上电/复位默认处于闭锁状态,请求安全访问前需要检测错误计数器——根据策略不同,需要确认:
(1)错误延时时间 10S、60S
(2)重新上电后是否开启访问延时? 1. 直接延时 2.掉电前cnt_max,等待延时
(3)什么时候错误计数器会计数
错误的情况(key)
0,NRC=35(Att_Cnt+1),3 35 35 36;
请求顺序错误,返回NRC=24
除了35、36、37外的NRC会不会使得计数增加(引申4种状态)?会不会使控制器回到状态A?11服务会不户导致控制器回到A?
(4)cnt_max,延时结束,错误计数器减1还是清零
错误计数器请求原理
假设:错误计数器3max,10s delay,time on -1;
(1)Reset->A:当重启ECU时,初始化错误计数器-0、启动延时(视需求)
(2)A->B:当收到ECU返回的Seed且DLC格式正确、先决条件正确、不处在延时状态,种子有效且生成并保存,之前的Seed drop,transmit positive response with seed.
(3)B->C:当收到秘钥且子功能为请求种子的子功能+1、DLC格式无问题、Key正确,错误计数器清零(不同的安全等级对应不同的错误计数器)并存非易失性存储器中,解锁对应安全等级并清楚存储Seed,返回正响应。