1、$10诊断服务
根据<<1SO14229-1>>标准文档中针对10服务做了详细说明,主要体现以下几点:
10服务是用来使能Server(即ECU)不同诊断会话的一种服务
不同的诊断会话则规定了Server在相应session可以开启的功能权限
在不同的诊断会话则因使用对应的数据链路层的时间参数
其中最核心的是诊断服务权限控制,如下图所示:明确规定了不同诊断服务在默认会话和
非默认会话下的可用性,其中“X”则代表可用,“not applicable"则代表不可用。
根据14229-1标准,10服务的请求格式如下图:
DiagnosticSessionControl Request SID:诊断会话控制SID,固定为10。
SubFunction (diagnosticSessionType):会话类型,如默认会话01,编程会话02等。
10服务的会话类型主要可分为以下六种:
2、10服务示例:
在不考虑特殊场景,只需发送"10 02" 诊断请求便可以让Server进入编程会话,如下图:
suppressPosRspMsgIndicationBit:是Subfunction的Bit7 位。
若该Bit位为1,则表示抑制正响应,Server不需要给Client正响应。
若该Bit位为0,则表示不抑制正响应,Server应该给予Client正响应。
10服务诊断正响应的格式如下图所示:
其中sessionParameterRecord参数的具体涵义如下图所示:
关于P2server_max参数(2Byte)及P2*server_max(2Byte)参数值来源于客户诊断需求规范,按照客户需求配置即可。
P2Server_max:该参数指ECU在收到请求和给出响应之间的这个时间间隔,它描述了ECU的反应速度。单位为1ms。
P2*Server_max:该参数与P2Server_max类似,区别在于P2*Server_max该参数是在ECU给出NRC 0x78之后生效的。(个人理解为,ECU收到请求到给出NRC 0x78的最长时间),单位为10ms。
官方文档参数解释如下图:
ETAS工具下该参数通过如下配置:
10诊断服务的负响应格式如下:
ISO14229-1针对所有的诊断服务提供了一种统一的诊断负响应的格式:7F+SID+NRC。
NRC表示Negetive Response Code。每个NRC具有唯一的含义来代表当前诊断请求错误的原因所在。每个诊断服务
支持的NRC也不尽相同,具体支持的NRC需要参考ISO14229-1标准文档。对于10服务而言支持的NRC如下图:
实际CANOE数据截图如下所示: