UDS诊断概述、单/多帧、肯/否定响应
概念
- UDS(Unified Diagnostic Services,统一诊断服务)为协议ISO 15765和ISO 14229定义的一种汽车通用诊断协议,处于OSI七层网络模型中的应用层。当前主要以UDSonCan为主。
UDS协议通过【请求】、【响应】的模式,对ECU进行测试、检测以及诊断等功能。
单/多帧传输
单/多帧传输是由can数据传输大小受限所引出的概念,即若一条诊断命令的长度超过数据场的大小,那么就需要分包传输–多帧传输
根据ISO 15765规范规定了帧格式:
- 单帧传输
- 单帧意味着这一帧的数据场部分有效字节数<=8,不足的地方多以0xAA/55/CC等填充;
- 无论单帧还是多帧,每一帧的0号字节的高四位用于区别帧类型(0/1/2/3);
- 对于单帧SingleFrame,0号字节低4位【SF_DL】表示DLC(Data-Length-Control),表示需要读后面多长的数据(即后续有多少有效的数据位);
例:
02 10 03 55 55 55 55 55 -----> 有效数据是10 03
01 10 03 55 55 55 55 55 -----> 有效数据是10
- 多帧传输
- 首帧FF ---- FirstFrame
- 0号字节高4位固定为1,低4位加上1号字节组成DLC,表示多帧传输的数据长度(如果是22/2R读写数据服务,需要包含SID+DID)
- 连续帧CF ---- ContinueFrame
- 0号字节高4位固定为2,低4位表示包的连续号SN,后面跟数据
- 流控帧FC ---- FrameControl
- 0号字节高4位固定为3,低4位表示流状态参数FS
- FS(流控状态):
- 0,CTS表示继续发送;
- 1,WT表示等待,令发送方停止发送,直到下一个流控帧的到来;
- 2,OVFLW表示溢出,当接收方接收到首帧,判断到FF_DL的长度比接收方缓冲区大时发送,随后发送方终止发送
- FS(流控状态):
- 1号字节表示BS(BlockSize)块大小,即告知发送方允许接下来发多少帧连续帧。当BS=0时,块大小不做限制。
- 2号字节表示STmin(SeparationTimeminimum),规定了连续帧发送的最小时间间隔。
- 0号字节高4位固定为3,低4位表示流状态参数FS
- 多帧传输示例:
- 首帧FF ---- FirstFrame
请求/响应
- 请求格式
- SID+SF(sub-function),服务+子功能
如:10 01 - SID+DID(Data-Identifier),服务+DID,常用于读写
如:22 F15A - SID+SF+DID,服务+子功能+DID,如例程服务
如:31 01 FF00 - SID,仅服务号
- SID+SF(sub-function),服务+子功能
- 响应格式
- 肯定响应(positive response)
SID+0x40 + 其他
如:req:10 01
rsp:50 01 - 否定响应(negative response)
7F + 服务 + NRC(negative response Code)
如:req:10 01
rsp:7F 10 13
- 肯定响应(positive response)
补充:寻址方式
总线上往往有多个ECU,诊断设备可以和某一个ECU进行通信,也可以和多个ECU通信,方式就是把寻址方式设置为物理寻址及功能寻址。寻址即数据传输方式。
诊断报文通常会有三个诊断ID,物理请求报文ID,功能请求报文ID、诊断响应ID。
- 物理寻址
物理请求报文ID对应物理寻址方式,是诊断仪与ECU之间点对点通信; - 功能寻址
功能请求报文ID对应功能寻址方式,属于一对多通信;