首先要有网络网络七层的概念:
学习链接: 七层网络模型-CSDN博客
UDS网络层/TP层(ISO 15765-2)的解读 - 知乎 (zhihu.com)
概念:
UDS(Unified Diagnostic Services,统一的诊断服务。
标准名是《道路车辆 统一的诊断服务》
英文名是《Road vehicles—Unified diagnostic services》
在ISO 14229中规定,它是从ISO 14230-3(KWP2000)和ISO 15765-3协议衍生出来的。这些ECU控制车辆的各种功能,包括电控燃油喷射系统(EFI),发动机控制系统,变速箱,防抱死制动系统(ABS),门锁,制动器等。
除CAN总线以外,UDS也可在不同的汽车总线(例如 LIN, Flexray, Internet 和K-line)上实现。
关键缩略词
缩写 | 释意 | ||
SID | Service Identifier | 诊断服务ID | 是一种交互协议(Request/Response),即诊断方(Tester)给ECU发送指定的请求数据(Request),这条数据中需要包含SID,且SID处于该应用层数据的第一个字节。如果是肯定的响应(Positive Response),首字节回复[SID+0x40],举例子就是请求0x10,响应0x50;请求0x22,响应0x62。如果是否定的响应(Negative Response),首字节回复0x7F,第二字节回复刚才询问的SID如果是肯定的响应(Positive Response),首字节回复[SID+0x40],举例子就是请求0x10,响应0x50;请求0x22,响应0x62。如果是否定的响应(Negative Response),首字节回复0x7F,第二字节回复刚才询问的SID |
协议栈总览:
协议
网络层概述
uds只涉及第一第二,第五第七层。
OSI | |
物理层 | 定义终端之间的电气、机械等特性和标定;包括电压、频率、数据速率、最大传输距离。 |
数据链路层 | 在物理线路上提供可靠的数据传输;例如物理地址、网络拓扑、线路规划、差错报告、数据帧有序传输;需要解决帧的破坏、丢失和重复的问题,线路使用权的竞争问题,流量调节和出错处理问题。 |
网络层 | 网络层最主要的目的就是把数据转换成能适应CAN总线规范的单一数据帧,从而进行传输,如果将要传输的报文长度超过了CAN数据帧的长度,则需要将报文信息进行拆分后传输,每次至多可以传输4095个字节长度的报文。 网络层协议数据单元(N_PDU)有四种类型,即单帧(SF)、首帧(FF)、连续帧(CF)、流控制帧(FC),用于建立对等实体间的通信。 |
传输层(TP层) | 使收发的数据帧所包含的字节总数,扩容到4095个字节。 不管发送或接收是成功或是出错,都需要上报给应用层。 |
会话层 | |
表示层 | 在物理线路上提供可靠的数据传输;例如物理地址、网络拓扑、线路规划、差错报告、数据帧有序传输;需要解决帧的破坏、丢失和重复的问题,线路使用权的竞争问题,流量调节和出错处理问题。 |
应用层 | USD应用层由ISO 14229标准定义。诊断通信的过程从用户角度来看非常容易理解,诊断仪发送诊断请求(request),ECU给出诊断响应(response),而UDS就是为不同的诊断功能的request和response定义了统一的内容和格式。 |
基 于UDS的DOIP/DOCAN框架
DoI P
是Diagnostic communication over Internet Protocol 的简称,顾名思义,我们以太网协议,承载UDS数据,实现诊断通信的这种方式称为DoIP,相比DoCAN中CAN网络的封闭性,DoIP由于Ethernet的互联互通,可以实现车与车、车与人的远距离诊断通信。由ISO13400 系列标准定义。通过网络协议进行诊断通信,由ISO13400 系列标准定义。即DoIP是在以太网网络上传输UDS诊断数据的传输协议。DoIP带宽高,适合传输大量数据的场景,如车上的OTA软件升级。DoIP报文也是基于TCP或UDP,但在其报文的Payload起始段添加了DoIP报头(首部),用来区分不同的DoIP报文类型,实现不同的功能。DoIP报文的结构如下图所示:
DOIP协议体系参考协议总览‘
- 网络层协议IP
- 传输层协议TCP/UDP
- 对网关的要求(网关如何集成到现有网络总)
- 对测试设备的要求(如何发现车辆并建立通信)
支持DoIP的车辆网络架构图如下
从这张图上可以看出:汽车内部必须有一个DoIP的总网关,它作为和外部的诊断设备DoIP通信的唯一接口。
DOCAN
UDS定义的是诊断服务,属于应用层的内容,实现诊断通信的底层总线技术有很多,比如CAN,LIN,Ethernet,Flexray等,由于法规强制的OBD接口是CAN总线的,所以绝大多数场景中诊断都是基于CAN实现的。这就带来了一个问题,classical CAN总线物理层的每一帧只能传输8个字节,CAN FD第帧最多能传输64个字节,那么如果UDS产生的一条诊断命令超过了8个字节,在CAN总线上一帧是承载不了的,就需要进行分包,这也是DoCAN(Diagnose over CAN)要解决的最主要的问题。
参考:基于CAN总线实现的UDS诊断(DoCAN) - 知乎 (zhihu.com)
目前并非最终版本,工作中遇到了再回来修改添加