详解 UDS CAN 诊断:DiagnosticSessionControl Service(SID:0X10)
诊断和通信管理功能单元(Diagnostic and communication management functional unit)包含 10 种服务,本篇博文将详细讲解 DiagnosticSessionControl Service(SID:0X10)的特性和协议。
本篇博文素材来源于:ISO 14229-1-2020:规范和要求。
在学习本篇博文之前推荐学习:
详解UDS CAN诊断:什么是UDS(ISO 14229)诊断?
对汽车电子、CAN 通信、UDS 诊断技术感兴趣的小伙伴请关注公众号:美男子玩编程,公众号优先推送最新技术博文,创作不易,请各位朋友多多点赞、收藏、关注支持~
DiagnosticSessionControl Service 用于在服务器中启用不同的诊断会话。
诊断会话有两种:Default Session 和 Any Other Session,它们之间可以互相转换,如下所示:
不同服务在 Default Session 和 Any Other Session 中的权限不同,某些服务并不支持在 Default Session 中运行,所有服务都可以在 Any Other Session 中运行,如下图(not applicable 代表不支持服务,x 代代表支持服务)所示:
1、诊断请求
诊断请求分为具有子功能的请求和没有子功能的请求两种。
首先来看看具有子功能的请求协议,如下所示:
我们只需要关注 A_Data.A_PCI.SI 和 A_Data.Parameter 1~k 数据,其他参数数值取决于客户的实际应用。
具有子功能的请求 A_Data.Parameter 1 字节存储的就是子功能数据。
没有子功能的请求协议,如下所示:
A_Data.Parameter 1 字节不再规定。
接着来看一看协议中对 A_Data.A_PCI.SI 和 A_Data.Parameter 1~k 数据的规定和使用。
启用不同的诊断会话需要客户端发送请求协议:0X10 0X**(A_Data.A_PCI.SI 和 A_Data.Parameter 1~k 数据)。
其中:
0X10 是服务 ID(SID),1 字节;
0X**是服务的子功能,范围为:0X00~0XFF,1 字节。
在 ISO 14229-1-2020 协议中规定了各类数值子功能的意义和使用场景,如下所示:
2、诊断响应
诊断响应有肯定响应和否定响应两种类型。
2.1、肯定响应
肯定响应协议中也只需要关注 A_Data.A_PCI.SI 和 A_Data.Parameter 1~k 数据,如下所示:
肯定响应表示服务端回复客户端请求成功,响应协议:0X50 0X** 0X&&(A_Data.A_PCI.SI 和 A_Data.Parameter 1~k 数据)。
其中:
0X50 是响应服务的 SID,相当于 0X10+0X40,1 字节;
0X**是响应服务的子功能,范围为:0X00~0XFF,1 字节。例如,客户端使用 0X01 子服务,此时肯定响应的子服务就是 0X01;
0X&&记录了包含服务器报告的特定会话参数值,范围为:0X00~0XFF,4 字节,协议规定如下所示:
2.2、否定响应
否定响应表示客户端或者服务端存在问题,否定响应会提示失败原因。
否定响应协议中只需要关注 A_Data.A_PCI.NR_SI、A_Data.A_PCI. SI 和 A_Data.Parameter 1 数据,如下所示:
响应协议:0X7F 0X** 0X&&(A_Data.A_PCI.NR_SI、A_Data.A_PCI. SI 和 A_Data.Parameter 1 数据)。
其中:
0X7F 是否定响应固定数值,1 字节;
0X**是诊断服务 ID(SID),本篇博文使用的是 0X10 服务,则否定响应会返回 0X10,1 字节;
0X&&是 NRC 错误码,描述了返回错误的原因,1 字节。
DiagnosticSessionControl Service(SID:0X10)有 3 种类型错误,如下所示:
UDS诊断 ISO 14229 1~8整套协议-中英文最新版
版权声明: 本文为 InfoQ 作者【不脱发的程序猿】的原创文章。
原文链接:【http://xie.infoq.cn/article/4797df7b66246899e28df24a2】。文章转载请联系作者。
评论