子功能参数定义
UDS协议中,有些诊断服务是带有子功能的。子功能参数的取值范围为0x00 - 0x7F。细心的同学应该发现了,子功能参数占用了一个字节,可用的数值范围为0~0xFF。但子功能的最大取值只到0x7F,那么最高位去哪了呢。这个子功能参数的最高位就是我们今天要聊的诊断服务肯定响应抑制位SuppressPosRspMsgIndicationBit,简写为SPRMIB。
如下是诊断服务子功能参数的格式定义。其中的最高位Bit7就决定了ECU是否需要给出肯定响应。
子功能参数格式定义

肯定响应抑制位的作用
ECU收到SPRMIB为1的服务时,不需要给出肯定响应。相反,当ECU收到SPRMIB为0的服务时,需要给出肯定响应。
例如,ECU收到诊断仪发来的Tester Present服务为$02 3E 00时,需要给出$02 7E 00的肯定响应。同样是Test Present服务,如果ECU收到的是$02 3E 80,则无需给出肯定响应。
例外情况
ECU在响应某些诊断服务时,由于执行时间较长,无法立即给出肯定响应。此时ECU会先给出NRC为0x78的否定响应。然后等到所请求的服务执行完后,给出最终的肯定响应或否定响应。这种情况下,即使ECU收到的诊断服务请求中子功能参数肯定响应抑制位为1,最终的肯定响应也不会被抑制。
例如在如下的诊断通信中, 即使ECU收到了子功能为0x82的诊断会话控制(DiagnosticSessionControl)服务,最终仍然需要给出肯定响应。
Tester : $02 10 82
ECU : $03 7F 10 78
ECU : $06 50 02 00 32 01 F4
我们来分析一下这个过程。首先Tester请求ECU进入编程回话(Programming session),但不希望ECU给出肯定响应。但是进入编程回话通常需要ECU复位,重新启动后进入Bootloader。这个过程所需要的时间会超过P2CAN_Server (通常为50ms)。所以ECU会先给出NRC为0x78的否定响应,用以通知Tester诊断请求已经正确接收了,正在处理,稍后给出响应。
当ECU成功执行了切换到Programming Session的操作后,由于之前给出了NRC为0x78的否定响应,此时必须给出肯定响应,用以通知Tester诊断请求已经被成功执行了。
-
复位器
+关注
关注
0文章
5浏览量
6925 -
诊断仪
+关注
关注
1文章
82浏览量
9389 -
ECU软件
+关注
关注
1文章
13浏览量
10503
发布评论请先 登录
UDS在CAN和以太网上的实现方案
【CPKCOR-RA8D1】+ 6. 使用RA8D1实现UDS诊断之27安全访问
UDS诊断命令备忘录
OBDII与UDS的区别是什么
基于MM32F0140系列MCU实现UDS Bootloader的设计
UDS诊断协议在纯电动汽车电机控制器中的应用说明
UDS常用诊断服务
UDS之19服务中04子服务:读取快照数据
UDS诊断服务响应规则介绍
汽车UDS协议栈与XCP协议栈
盟通方案|如何集成UDS协议
《CAN(FD)总线十万个为什么》之UDS诊断(上)
在CANdelaStudio中如何修改肯定响应抑制位

浅析UDS中的肯定响应抑制SPRMIB
评论