在汽车故障诊断领域,针对诊断设备和汽车ECU之间的数据交换,各大汽车公司几乎都制订了相关的标准和协议。其中,欧洲汽车领域广泛使用的一种车载诊断协议标准是KWP2000 (Keyword Pro-tocol 2000),该协议实现了一套完整的车载诊断服务,并且满足E-OBD(European On Board Diagnose)标准。KWP2000最初是基于K线的诊断协议。由于K线物理层和数据链路层在网络管理和通讯速率上的局限性,使得K线无法满足日趋复杂的车载诊断网络的需求。而CAN (Controller Area Network)网络由于其非破坏性的网络仲裁机制、较高的通讯速率(可达1 M bps )和灵活可靠的通讯方式,在车载网络领域广受青睐,因此,近年来欧洲汽车领域广泛采用了基于CAN总线的KWP2000,即ISO 15765协议,而基于K线的KWP2000物理层和数据链路层协议将逐步被淘汰。
TP2.0 的应用层的数据是根据大众KWP2000 定义的,命令定义及数据流格式相同,编程时用统一的数据转换函数。
UDS实践性强,逻辑复杂,很多服务非要体验过一次才能理解,导致包括我在内的初学者感觉晦涩难懂,不明觉厉,因此将自己的理解写下来、整理下来,与君共勉。
本篇文章简要介绍一下基于CAN总线实现的诊断协议的传输层。本文以classical CAN为例,CAN FD原理类似,不单独讲述。
ISO15031支持的汽车OBD口读取的数据项:
其中服务ID,即SID。还有具体一类参数的参数ID,即PID
本篇文章主要从以下几个方面进行讲解
1.OBD用来做什么
2.OBD和UDS的区别
3.OBD硬件接口简介
4.OBD的9大模式介绍
网络层的国际标准是ISO 15756-2,该标准详细规定了协议的具体细节。CAN总线是一帧8个字节,该协议可以使CAN总线高效的传输大约8个字节(up to 4095 bytes)的命令和数据。基于该标准文档,我开发出了一个独立性良好的协议栈,工作在上层诊断协议之下和下层CAN驱动之上,下面详解开发协议栈时需要实现的部分(基于 ISO 15765-2:2004(E))