UDS 之服务描述约定(Service description conventions)
服务描述
服务定义了14229协议中如何描述每个诊断服务。它定义每个诊断服务的常规服务描述格式。
此子条款简要概述了服务的功能。每个诊断服务规范都以客户端和服务器执行的操作的说明开头,这些操作特定于每个服务。每个服务的描述都包含一个表,其中列出了其原语的参数:request/indication, response/confirmation 都会有positive response 或 negative response.它们都具有相同的结构:
对于给定的A_PDU(Application layer protocol data unit)的request/indication和response/confirmation ,每个参数都会有一个convention(Cvt)值来描述,下表定义了A_PDU参数约定。
Mandatory:该参数必须存在于A_PDU中。标记为“M”的<Service Name>请求 SID”并不意味着此服务必须得到服务器的支持。“M”仅表示在服务器支持该服务的情况下,请求A_PDU中必须存在此参数。
Conditional:该参数可以基于某些条件(例如A_PDU中的子函数/参数)存在于A_PDU中。
Selection:指示参数是必需的(除非另有指定),并且是从参数列表中选择的参数。
Use option:该参数可能存在,也可能不存在,具体取决于用户的动态使用情况。
Request message(请求消息)
请求消息的定义
1.带有子服务
2.不带子服务
在所有request/indication中,地址信息MType,TA,SA,TA类型和Length是强制性的,RA 是可选的。
子服务的参数结构(subfunction parameter structure)
子函数参数字节分为两部分(位级),如表 11 中所定义。
子服务参数值是一个 7 位的值(子服务参数字节的 6-0位),可以有多个值来进一步指定服务行为。除了 suppressPosRspMsgIndicationBit,有子服务的服务还应支持子服务参数值表中定义的子函数参数值。
suppressPosRspMsgIndicationBit
此位指示服务器是否应抑制肯定响应消息。
此位为‘0’ 表示FALSE,不要禁止显示positive响应消息,也就是说需要positive响应消息。意思就是client向server发送请求后,如果此请求的反馈是positive的,那server必须要发聩给client。
此为如果是’1’ 表示 TRUE,禁止响应消息,意思就是client向server发送请求后,如果此请求的反馈是positive的,那server不用反馈给client,即不用返回此消息。
值得注意的一点是如果server给client反馈的是negative的响应消息,那不管suppressPosRspMsgIndicationBit的标志位是什么,**都需要反馈给client。**即使不需要肯定响应(即 SPRMIB = true),也必须完全传递服务的执行,以保持实现的一致性,而不管 SPRMIB 值如何。
如果SPRMIB对于具有大量数据的响应为true,其中需要使用分页缓冲区处理,这可能导致这样的情况:第一批数据的传输仍然可以在响应定时窗口内开始,但是服务执行的终止超出了响应定时窗口的限制。如果在这种情况下抑制了响应,则无法通知客户端延迟,这时服务器处于繁忙状态,仍准备接收另一个请求。
避免以上情况发生,对于客户端,建议不要在同一请求中索要大量数据并设置SPRMIB(例如,SID 0x19 SF 0x0A) ,因为这将违背SPRMIB的目的。
对于服务器,建议使用大小写分页缓冲区处理,并发送错误码NRC 0x78(RCRRP)以及positive响应,在当SPRMIB为true时。
Positive response message
注意:这里的Response SID = Request SID + 0x40
Negative response message
注意:一般Nega Response SID 为0x7F
常用的 NRC(Negative Response Code)
NRC 否定响应码 | 英文描述 | 中文描述 |
---|---|---|
11 | ServiceNotSupported | 服务不支持 |
12 | sub-functionNotSupported | 子服务不支持 |
13 | IncorrectMessageLengthOrInvalidFormat | 不正确的消息长度或无效的格式 |
22 | ConditionsNotCorrect | 服务执行条件不满足 |
24 | requestSequenceError | 请求序列错误 |
31 | requestOutOfRange | 请求超出范围 |
33 | securityAccessDenied | 安全访问拒绝 |
35 | invalidKey | 密钥无效密钥无效 |
36 | ExceedNumberOfAttempts | 请求安全访问(SecurityAccess)服务的失败次数超过服务器允许的最大次数时 |
37 | RequiredTimeDelayNotExpired | 服务器在安全访问延迟时间内收到安全访问(SecurityAccess)服务请求时 |
70 | UploadDownloadNotAccepted | 由于故障导致从服务器的存储器上传数据失败或向服务器的存储器下载数据失败时 |
7E | sub-functionNotSupportedInActiveSession | 激活会话不支持子服务 |
7F | serviceNotSupportedInActiveSession | 激活会话不支持该服务 |