记:从零开始讲解UDS(二)——传输层帧格式

  • Post author:
  • Post category:其他




0x00 UDS概述

UDS(University Diagnostics System通用诊断系统)是一个在整车系统上经常使用的设备维护协议。其主要遵循的法规为:

ISO-15765、ISO-14229

,其主要协议模式脱胎于OBD(On-board diagnostics)诊断协议。经常应用在整车的各种ECU上面。是一个在整车ECU应用层开发经常使用的也是较为复杂的协议层之一。

本篇文章主要介绍了UDS关于反馈码与故障码相关的简要介绍。阅读本文之前,您需要了解的一些前置技能有:

技能名称 技能熟练度 技能教程链接
CAN总线 熟悉 暂无
数据类型 熟悉 暂无
OBD 了解 暂无
整车缩写 了解 暂无



0x01 反馈码的简要介绍

反馈码,也就是ECU回复给诊断仪的状态码,也就是某些情况在诊断仪中看到的报错信息或者正确提示(当然更多时候是看不到正确提示的)。其实ECU与诊断仪更像是典型的C-S关系,也就是ECU=服务器、诊断仪=客户端。因此,反馈码也就相当于服务器对于客户端访问方式的一种回复,故此,我将其称为反馈。



0x02 反馈码的分类

反馈码主要分为两类:正反馈、负反馈。

正反馈顾名思义,就是正常的情况下,ECU检测当前诊断仪在

当前状态



当前应用等级

下可以完成当前指令,执行完当前指令之后,进行的一种回复。此回复主要作用在与让客户端可以确认当前指令的执行状态。

负反馈应该是相对于正反馈的翻译而来(negative),但是我觉得错误反馈反而更加的合乎逻辑,就像Master和Slave如果硬翻译也许就哲学了……

负反馈主要是ECU发现当前诊断仪传输的数据异常或执行指令异常。需要操作诊断仪的用户进行相关操作或者仅为提示。也是我们日常开发时经常需要处理的地方。

这里仅讲解了反馈码的大致使用,如果需要详细的使用与介绍,我会放在应用层相关的实现上介绍。



0x03 正反馈

正反馈的反馈头格式较为固定,主要是跟随当前的指令变化,并在接收到的指令位数(一般为8位)的第六位

置一

,例如,ECU接收到当前指令为0x10,其正确执行后,即可返回0x50的指令正反馈,而后的数据位一般为1,也可标志当前的状态,以车厂释出的协议为准。



0x04 负反馈

负反馈的格式较多,位数也不固定


1


,但基本上不会超过一帧数据。而报错的状态及其繁琐,但是总结下来无外乎一下几点:

报错类型 错误原因(大多数情况下) 解决方式
超出指定长度 对于指令位数不熟悉或指令使用不正确 仔细检查当前定义的协议中对于长度限制
填充数据错误 一般在移植时会出现当前问题 仔细检查当前是否按照整车厂协议要求填充无用帧数据
不再当前应用等级 开发时未确认当前应用是否在需要的等级下 仔细检查当前指令分级是否出现问题

负反馈的反馈头一般为0x7F开头(八位全为1),而后面的数据组合也较为分散,但是基本符合上表中的报错位置,再者就是某些特别的指令所特有的错误反馈(0x27的校准错误)

需要注意的是,这些负反馈仅会在当前帧格式正确的时候才会正常返回。如果帧格式本身就出现错误,当前指令是不会有错误异常的。避免了在特定条件下的异常错误反馈。



0x05 空闲帧数据位

空闲帧数据位是UDS必然的产物,就是在某些情况下,单一帧发送数据已经足够并且没有使用完一帧数据,则这一帧数据剩下的位置就是空闲帧的数据位,也是ECU需要处理的一部分。一般情况下,空闲帧会被强制填充为指定数据例如0x17或者其他的,这个具体根据各个车厂进行变化。而理论上来讲,填充与不填充的时候,数据的传输速度相差最大30%。相信这也是为什么需要将其填充为指定数据的原因之一。至于其中原理,我会在从零开始讲解CAN总线(二)(还没写)中讲解。



0x06 总结

其实,UDS有了较为严谨的传输数据类型定义,所以对于传输层相关的帧格式的设计就可以十分简明轻快,也十分方便理解。下面我将对UDS各个模式的特性进行相关说明,如果您发现了我有什么不对的地方,欢迎相互交流。



0x07 后记

后面还会将其进行扩展,将一些各层的详细描述、模式的相关的切换方式、反馈相关的流程与错误记录。敬请期待~



更多

本文首发自

记:从零开始讲解UDS(二)——传输层帧格式-我的博客

,更多文章可进入我的博客详查。


  1. 这里的位数单指有效数据位,一般UDS为了稳定性和可靠性,会规定当前帧数据DLC为8

    ↩︎



版权声明:本文为a982606774原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。