八、诊断仪(TESTER)如何准确访问到特定的ECU?
答案是:两种寻址方式——物理寻址和功能寻址
1.物理寻址(1:1)
客户端(TESTER)与服务器(ECU)之间采用一对一的诊断通信方式
2.功能寻址(1:N)
客户端(TESTER)与服务器(ECU)之间采用一对多的诊断通信方式,客户端向多个服务器发出同一功能寻址的诊断请求
3.寻址的基本术语
(1)源地址(Source Address ,SA)发送节点地址
(2)目标地址(Target Address,TA)接受节点地址
4.地址与报文ID的关系
(1)地址和报文ID相关,诊断报文ID=基地址+节点地址
(2)以某个ECU物理寻址为例,基地址为0x700,Tester节点地址为 0x01,ECU节点地址为 0x08,那么对于此ECU的物理寻址请求ID为0x701(0x700 + 0x01),ECU的响应ID为0x708 (0x700 + 0x08)
(3)功能寻址一般为特定ID,如x7DF
(4)每一个ECU都有2个CAN的诊断帧ID,分别对应物理寻址的收与发。通常由主机厂来确定不同ECU的这两个特定的诊断ID。比如0x701对应接收Tester的消息,0x709对应发给Tester的消息。
九、UDS服务使用OSI模型的会话层和应用层
诊断工具(TESTER)与车内的所有控制单元(ECU)均有连接,且这些控制单元均启用了UDS服务。不同于仅使用OSI模型第一层、第二层的CAN协议,UDS服务使用OSI模型的第五层和第七层(会话层和应用层)。服务ID(SID)和与服务相关的参数包含在CAN数据帧的8个数据字节中,这些数据帧是从诊断工具(TESTER)发出的。
十、UDS服务的通讯
UDS的服务分为6大类,一共26种服务, 对应26个SID
重点关注:10、11、22、2E、27、28、14、19、34、36、37、3E
1.UDS服务的通讯格式
在使用中,UDS诊断是基于问答形式实现,"请求"由client端发送给server,UDS规定使用1个byte来表示诊断服务,即服务ID(Service Identifier,SID)。请求报文里带有SID,根据具体的服务内容后面加具体的数据
服务ID(Service Identifier,SID)范围:0x00 - 0xFF
2.请求/响应格式 ![](https://img-blog.csdnimg.cn/direct/282802a8162244179fcec455e52eb564.png)
A.请求的格式如下:
(1)有sub function的诊断请求 service ID+ sub-function+parameter
(2)无sub function的诊断请求 service ID+parameter
(3)SID(service id)诊断服务ID,表示诊断服务的功能,长度为1字节。sub-function子功 能,表示诊断服务的具体操作,长度为1字节。parameter参数,表示诊断服务的执行条 件
(4)请求服务的SID:(X0XX XXXX)b 第6位为0
(5)示例:ReadDTCInformation(0x19)服务请求的SID (00011001)b
B.响应的格式如下:
Response SID +Sub-function+Parameter
a.肯定响应服务:response SID是诊断请求的echo,值为SID+0x40
(1)肯定响应服务的SID:(X1XX XXXX)b 第6位为1
(2)肯定响应服务的SID=请求服务的SID+0x40
(3)示例:ReadDTCInformation(0x19)服务响应的SID (01011001)b =0x59
b.否定响应服务:固定三个字节,分别是0X7F,请求服务SID,否定响应码(NRC)