UDS诊断

零碎困惑

肯定响应抑制位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,返回正响应。

 

常见安全算法原理

  • 23
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Python中,可以使用time模块的sleep函数来实现延时操作。引用中提到,time.sleep函数会阻塞当前线程一段时间,但不会影响整个进程和其他线程的执行。该函数接受一个延迟时间的参数,单位为秒,可以是浮点数。例如,time.sleep(1)会让当前线程暂停1秒。引用中指出,在Windows 10操作系统下,time.sleep的最小延时精度为0.001秒,即1毫秒。然而,根据该引用中的测试,实际延时可能会比期望的延时更长,例如13毫秒。这可能是因为系统的特定设置或硬件的限制所导致的。如果对于某些应用来说,这种延时不可接受,可以考虑其他替代方案。另外,引用展示了一个自定义的sleep函数的示例代码,可以根据需要来实现延时功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [python延时函数](https://blog.csdn.net/weixin_39608478/article/details/110315668)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [python实现亚毫秒(微秒)级延时](https://blog.csdn.net/13011803189/article/details/123340150)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值