汽车诊断简介
汽车诊断分类
按照连接方式分类可分为在线诊断、远程诊断:
- 在线诊断:诊断仪通过与汽车OBD(On Board Diagnostic)接口直接连接
- 远程诊断:通过车载终端、云端服务、用户之间交互实现
按照通信方式分类可分为:
- 基于CAN总线的汽车诊断
- 基于LIN总线的汽车诊断
- 基于车载以太网(Automotive Ethernet)的汽车诊断
汽车诊断作用
- 通过诊断仪,读取汽车各电控单元(ECU)存在的故障,方便售后维修;
- 通过诊断仪,对汽车各电控单元(ECU)进行软件升级;
- 通过诊断仪,获取ECU运行状态信息、修改车辆配置、标定等。
汽车CAN网络拓扑


寻址方式
物理寻址:一对一
功能寻址:一对多
标准帧诊断报文ID格式:0x7xx(优先级最小)

汽车在线诊断交互原理

UDS网络层协议
PDU定义
## 单帧(多帧)报文格式

数据流传输分为非分段数据流和分段数据流。
非分段数据流由单帧SF构成,其使用条件为:正常寻址模式下单帧长度不超过7,扩展寻址模式下单帧长度不超过6。
单帧的N_PCI为1个字节,高四位N_PCItype=0,低四位SF_DL表示单帧传输数据的长度,为1-7。

分段数据流由首帧FF、流控制帧FC、连续帧CF组成。正常寻址模式下,数据字节长度大于7,扩展寻址模式下,数据字节长度大于6。
首帧N_PCI占据2字节,第一个字节高四位N_PCItype=1,第一个字节低四位和第二个字节表示后面要传输的数据长度FF_DL,最小为8个字节(首帧6+连续帧的第一帧2,要保证连续帧的第一帧至少有一个字节的数据才会用到非分段数据流),最大为4095个字节。

流控制帧FC的N_PCI占据3个字节,第一个字节高四位N_PCItype=3,第一个字节低四位表示数据流状态FS,0表示继续发送(CTS),1表示等待(WT),2表示溢出(OVFLW);第二个字节表示块大小BS,为允许一次连续发送CF的数量,为0时表示再无流控制帧,发送方可无限发送连续帧直至信息发送完毕;第三个字节表示ST_min,表示发送CF的最小间隔时间。

连续帧CF的N_PCI占据一个字节,第一个字节高四位N_PCItype=2,第一个字节低四位序列号SN,0x010x0F—>0x000x0F—>0x00~0x0F,表示第一次发的连续帧序列号为1~F,加到F后,下一次发的是0,再到F,如此循环。

需要注意的是,所有的报文类型都支持物理寻址;但是只有单帧才支持功能寻址(多帧中需要互相通信,功能寻址无法进行点对点通信)
网络层服务原语

请求服务(Request):网络层的上层使用。用于向网络层传递控制报文信息以及要发送的数据。如tester向ECU发出数据。
指示服务(Indication):网络层使用。用于向更高层或应用层传递状态信息以及接收到的数据。如ECU收到tester的数据,传到应用层。
确认服务(Confirm):网络层使用。用于向更高层或应用层传递状态信息。如tester收到了ECU方面的数据。
定时处理
N_As:发送方CAN帧发送时间,其实质是首帧和连续帧在数据链路层传播的时间(发送方CAN报文确认超时);
N_Ar:接收方CAN帧发送时间,其实质是流控制帧在数据链路层传播的时间(接收方CAN报文确认超时);
N_Bs:直到下一个流控制帧接受的时间,其实质是接收方收到首帧时发出的ACK响应,与自己(发送方)收到流控帧的间隔时间(FC超时);
N_Br:直到下一个流控制帧发送的时间,其实质是自己(接收方)收到首帧,与自己开始发出流控制帧的间隔时间(FC接收端发送等待时间);
N_Cs:直到下一个连续帧发送的时间,其实质是自己(发送方)收到流控制帧,或者连续帧送达时产生的ACK响应,与自己开始发出新连续帧的间隔时间(STmin,不小于传输CF的时间);
N_Cr:直到下一个连续帧接收的时间,其实质是自己(接收方)收到连续帧,或者流控制帧送达时产生的ACK响应,到下一次收到连续帧的间隔时间(CF超时)。
错误处理
SF_DL错误
SF_DL=0或者SF_DL>7(常规寻址)或者SF_DL>6(扩展或混合寻址)时,接收方网络忽略收到的单帧,且接收方无indication。

FF_DL错误
-
FF_DL>接收方的缓存,那么接收方网络层应中断报文接收,接收方发送FC,其中FS = Overflow(2),接收方无indication;

-
FF_DL<8/7(常规寻址模式为8,扩展或混合寻址模式为7),网络层应忽略FF,接受方无indication,且不发送FC;

SN错误
流控帧CF中的SN错误,报文接收应该中断,接收方网络层应指示上层=N_WRONG_SN;

FS错误
如果发送方网络层发现接收到的流控制帧FC中数据流状态FS错误,那么报文发送应被中断,发送方网络层应确认上层=N_INVALID_FS;

N_WFTmax错误
接收方最多连续发送多少个等待FC帧个数,是本地变量。可以在多包报文发送过程的接收方网络实体中定义,系统初始化时应设置正确,使用这个变量可以避免发送方节点一直处于等待FC状态;

ST错误
发送方接收到的FC中的STmin设置为保留值时,发送方继续发送CF,只是各个CF之间的间隔时间为协议最大值(7F-127ms),发送方和接收方没有错误向各自上层报告;

非预期帧的处理
在多包报文传输过程中,任何一方接收到的非期望报文(同一个N_AI),根据网络是全双工还是半双工,节点处于接收状态、发送状态还是空闲状态,网络层的处理方法不同:

多包报文的发送必须采用物理寻址,如果多包报文的发送是功能寻址则需忽略功能寻址第一帧。
超时处理
N_As超时:发送方没有及时发送N_PDU
N_Ar超时:接收方没有及时发送N_PDU
N_Bs超时:发送方没有接收到流控帧
N_Br超时:接收方没有发出流控帧
N_Cs超时:即STmin,发送两个连续帧需要等待的最短时间
N_Cr超时:接收方没有接收到连续帧
N_PDU域的映射
将N_PDU映射到CAN数据帧的不同位置,构成了四种地址格式:

常规寻址-----11位CAN ID
N_AI映射到CAN_ID,但没有规定N_AI与CAN_ID的具体映射关系:

常规固定寻址-----29位CAN ID
与混合寻址编排方式类似,完整定义了N_AI如何映射到CAN数据帧的第一个字节:

扩展寻址-----仅用于11位CAN ID

混合寻址-----11位或29位CAN ID


















