本专栏以ISO 14229标准为指导,结合网上众多文章资料,根据博主个人理解整理而成,旨在降低该标准的入门门槛与学习成本。文章不对标准做生硬的翻译,尽可能提炼其涵盖的知识点,争取以通俗易懂的描述对该标准做一次全面的中文讲解。当然,由于博主水平有限,在讲解文章中不免出现纰漏,还请各位看官积极在评论区留言或私信博主邮箱xinglong.ni@foxmail.com。
1 汽车诊断
在了解UDS之前,我们需要先了解汽车诊断的概念。
汽车诊断是指对汽车进行故障检测和故障定位的过程,通过诊断,我们可以快速准确的判断车辆或某个ECU的故障以及故障原因,其是保障汽车安全和性能的重要环节。
若要进行汽车诊断,支持该诊断工作的诊断工具则是必不可少的设备。在汽车的开发过程中,汽车工程师可以通过诊断工具连接上汽车的电子系统,读取车辆的故障码,进而快速分析定位故障原因,或者读取车辆的某些实时数据,以支持汽车开发工作。为了使得诊断工具和车辆之间可以正常通信,这两端都要遵循同样的通信协议,其就是汽车诊断通信协议,简称诊断协议。
诊断工具在行业内一般被称为Tester,其可以是任何实现了诊断协议的东西,比如一个实现了诊断协议的上位机软件1、实际的硬件设备(诊断仪)或者支持诊断协议的测试脚本。
2 UDS是什么
UDS(Unified diagnostic services)是一种应用于汽车行业的通用诊断协议,其广泛用于汽车ECU之间的诊断通信。该协议提供了汽车诊断系统实施的基本框架,其定义了通用化的诊断数据格式和诊断流程,以及一系列的诊断服务。
作为一个应用层协议,其不关心应用层以下的具体实现,例如ECU之间的数据通信可以基于CAN或Ethernet等不同的物理传输方式实现,然而只要其传输的数据格式遵循UDS协议,则该段数据即可被同样遵循UDS协议的应用程序所解析,这种遵循UDS协议的数据一般被称为诊断数据。
进行车辆的诊断需要有Tester端和ECU端,其诊断过程通常是
- Tester向ECU发送诊断请求request
- ECU向Tester回复诊断响应response
Tester端和ECU端通过以上这种一问一答的形式进行通信,从而实现对目标ECU的诊断操作。而UDS则用于支持Tester(client)端和ECU(server)端之间的诊断通信,其为不同类型的诊断功能(或称诊断服务)定义了统一的内容和格式。
3 UDS与OSI
UDS由ISO 14229-1标准定义和规范,该标准同样也是汽车诊断系统的通用规范。为了实现该应用层协议,ISO 14229将UDS协议定义的诊断服务的应用映射到OSI(Open Systems Interconnection)基础参考模型上,该模型由ISO/IEC 7498-1和ISO/IEC 10731标准定义,其将通信系统从逻辑上分为七层,具体参见下表:
虽然ISO 14229-1标准定义了UDS的规范和要求,但是由于UDS并没有统一的实现标准,因此一份能用于OEM(主机厂)和零部件供应商进行ECU诊断系统功能开发和验证的诊断规范,除了要遵循该应用层标准外,还要根据自身实际情况,自定义UDS协议实现的具体细节,例如需要支持的DID、DTC、RID等特定数据,所以基于UDS开发的诊断功能又常常被称为Enhanced diagnostic(增强型诊断),亦如上表所示。
随着车辆ECU的增多,车辆网络拓扑结构也越来越复杂,一辆车里可能包含多种总线,如CAN、LIN、Ethernet、FlexRay、K-line等,因此在ISO 14229标准释放的文件中,除了ISO 14229-1标准对UDS的定义以外,还包含了关于UDS在各个总线中应用的定义,如 ISO 14229-3 UDSonCAN、ISO 14229-5 UDSonIP等。
由上表可见,在OSI七层模型中,ISO-14229定义于OSI七层模型第四层传输层之上,并不涉及具体的通信机制,因此可以架设在各种网络之上实现2。然而,要实现一个完整的诊断通信链路,还需要传输层和网络层协议,如ISO 13400、ISO 15765,以及数据链路层和物理层协议,如ISO 11898。
以UDSonCAN的诊断通信链路为例,它的物理层和数据链路层遵循的是ISO 11898,而网络层和传输层遵循的是ISO 15765-2(DoCAN),应用层遵循ISO 14229-3,其实现了UDS协议基于CAN总线的应用。
以UDSonIP的诊断通信链路为例,它的物理层和数据链路层遵循的是ISO 13400-3,而网络层和传输层遵循的是ISO 13400-2(DoIP), 应用层遵循ISO 14229-5,其实现了UDS协议基于Ethernet的应用。