UDS协议
1、UDS(Unified Diagnosic Services 统一诊断服务)是ISO 15765&ISO 14229定义的一种可以在不太的汽车总线(CAN&LIN)上的应用层诊断协议
UDS应用层是ISO 14229-1
2、UDS本质上是一种服务,通过请求&响应对ECU进行测试、检测、诊断
3、UDS位于应用层,不必关心提供差错控制等功能的PCI部分
4、由于数据场较短(CAN为8Byte CAN FD为64Byte),故一条诊断命令超过数据场长度,则需要分包传输,即需要多帧传输
ISO 15765定义多帧传输的格式:
报文类型 CAN ID | CAN数据场
--------------------------------|--------------------------------Byte[0]-------------|--------------Byte[1]------------------
| [bit7~bit4] [bit3] [bit2~0] |
--------------------------------|----------------------------------------|----------------------------------------------------
单帧 CANID | 0000b SF_DL |数据
首帧 CANID | 0001b FF_DL | 数据
连续帧 CANID | 0010b SN |
流控帧 CANID | 0011b FS |BB STmin
无论是单帧还是多帧,均使用每一帧的0郝字节的高四位进行区别
0:单帧
1:首帧
2:连续帧
3:流控帧
单帧:
表示该帧的数据场有效字节数据<=8,不足的地方使用0xAA,0x55(增加跳变)
对于单帧而言,0号字节的低四位[SF_DL]表示DLC(数据长度控制),说明后面有多少位有效
发送方:
首帧:
FF_DL:则是代表该多帧的长度,
当长度信息发送完成后后面的字节发送部分数据
连续帧:
SN代表该连续帧为帧序号,即该连续发出的第几帧(从1开始计数)
接收方:
流控帧:
Byte[0]前四位固定为3,后四位FS表示流状态参数
FS:0,CTS表示继续接受
1,WT表示等待,让发送方停止,等待下一个流控帧的到来
2,OVFLW表示溢出,当接收方接收到首帧后,判断FF-DL长度比接受放到缓冲区大时发送,随后发送方停止发送
3,F:保留
Byte[1]为BS块的大小,即接下来会发送多少帧,当BS为0时,块大小不做限制
Byte[2]为STmin,规定了连续帧发送的最小时间间隔
5、NRC
服务以请求+响应格式构成,当涉及到否定响应时需要知道为什么否定,故引入了否定响应(Negative Response Code)NRC
请求格式:
SID+SF,服务+子功能
例如:10 01
SID+DID(Data Identifier),服务+DID,用于读写
例如:22 F15A
SID_SF_DID,服务+子功能+DID,如例程服务
31 01 FF00
SID,仅服务号
响应:
肯定响应:(SID+0x40) +其它
Q:0x10 0x01
A:0x50 01
否定响应:7F +服务 +NRC
例如:
Q:10 01
R:7F 10 13
常见NRC:...
6、0x10服务
浙公网安备 33010602011771号