14229UDS诊断服务个人笔记

UDS诊断服务

前奏

即为service identifier。测试者发送一个SID,返回一个SID+40。

如果ECU不能发送一个答案或者需要更多时间响应,则发送NRC。一般格式为7F+SID+NRC码。跟我学UDS(ISO14229) ———— NRC码_nrc uds-优快云博客

多个UDS服务支持同一子功能SF(subfunction),其中SF最高位为肯定响应抑制位,置一则抑制肯定响应,也就是不需要ECU回应。不管置一与否都不会抑制否定响应。

一些额外的服务支持一个标识符DID(Date identifier),一般格式为SID+DID。ECU响应一般格式则为(SID+40)+DID。

PCI(Prorocol Control Information)--------------->协议控制信息。

USDT(Unaknowledged Segmented Data Transfer(i,e with transport protocol))-------------->未确认分段数据传输(即使用传输协议)

1.SID

1.1 0x2F

输入输出控制服务,也就是所谓的强控。比如要控制一个高驱,正常需要达到软件逻辑才能控制。可以通过2F直接控制该高驱。

一般格式为 2F+DID+IOCP。IOCP:INPUT OUTPUT CONTROL。

1.2 0x10

可以通过10服务的子功能进入非默认回话。常用的有0x01:默认会话、0x02:编程会话、0x03:拓展会话。一般切换格式为:0x10+SF(0x01、0x02等)。

其中0x3E周期性服务,用来保证非默认会话不会回到默认会话,因为处于非默认会话一段时间后,若没有其他响应则会自动回到默认会话。一般格式为3E+SID。一般称此时间为S3时间,也就是超时时间,在此超时时间内发送3E即可维持非默认会话。

于此同时还有两个P2时间,分别为P2Client和P2Server。P2Client为客户端从发出信号到接收ECU响应的最大超时时间,如果在这个时间内没有接收到响应信号,则会报超时错误。P2Server为ECU接收到信号后处理信号的最大超时时间,同样没有处理完发出信号贼会报超时错误。还有两个与之对应的P2*时间,分别为P2 *Client和P2 *Server。P2 *Server为如果ECU处于忙的状态或者需要额外的一些处理时间,则可以通过一些特殊的否定响应码0x78来表示当前忙,需要更多的等待时间,也就是P2 *Server,并且最终发送响应给Server。P2 *Client则为Server等待的时间。其中,P2 *Server的时间和响应次数是各大厂商自己制定的。

1.3 0x27

如果请求种子被发送ECU默认是锁定的,可以通过27服务跳转到Level1甚至Levelm,ECU也可以通过27服务在不同的Level之间进行转换,但是只能同时处于一个安全等级。

一般格式为0x27+SF

在上电或者重置(RESET)ECU之后,ECU是处于被锁住状态的

和27相关的否定响应码如下:

0x35-----------代表发送给ECU的秘钥不正确

0x36-----------代表发送错误次数过多,ECU已经处于最大接收次数的一个状态

0x37-----------代表太多次被尝试,ECU已经处于一个被锁定的状态

1.4 0x2E

写内容,往哪里写内容,就要看DID了 一般格式为 2E+DID+Data

1.5 DTC 0x19

0x19+0x02----------通过DTC状态掩码读取DTC

0x19+0x04---------通过DTC来读取快照数据(发生错误时的环境数据)

0x19+0x06---------通过DTC来读取故障产生时的环境数据

0x19+0x0A--------通过DTC来读取所有支持的DTC故障码

1.5.1 快照数据如何读取:

首先有个概念 Snapshot Record Number,快照数据编号,也就是SRN,一般最近的快照数据编号为20,也可以自定义一个编号。

定义好编号之后就要设置快照数据中的内容 比如说其中有五个DID,那么就要定义五个DID的含义

第一步先发送0x19+0x03读取一个DTC中所有存储的DTC快照编码,一般响应为0x59+0x03+三个DTC字节+SRN(SRN也就是快照编码)

第二步就可以发送0x19+0x04+三个DTC字节+SRN码来读取快照中的数据了 如果SRN为FF则为读取所有的快照数据。

第三部就是接收肯定响应了,一般格式为0x59+0x04+三个DTC字节+当前DTC的状态位+(SRN(块状数据)+NoID(到底多少个DID码,比如定义了5个DID,那么NoID为0x05+(DID+SD(这里面就是快照数据内容了))))

第四步,如果没有定义这个SRN码,那么就会回复31负相应,表示出现了超出范围的请求数据。

1.5.2 02服务如何读取DTC

SM:StatusMask(八位)---------状态掩码 不支持置1

SAM:StatusAvailabilityMask(八位)-------------ECU支持的状态有效位 支持就置1 这个SAM是不会改变的 是早就被定义好的

status:ECU的状态(八位)一般来说会回复一个status与SM相与不为0的字节

一般发送格式为:19+02+SM 接收格式为:59+02+SAM+(DTC+status)----------------------------部分故障

一般发送格式为:19+0A 接收格式为:59+0A+SAM+(DTC+status)----------------------所有故障

1.5.3 14服务

14 服务主要是负责清楚诊断信息的服务,也就是让DTC复位

一般发送格式为:14+三个字节的DTC(DTC+DTC+DTC)若为三个FF字节则为清楚所有DTC

接收则为:54+三个DTC字节

2.CAN的传输

2.1 首帧

第一帧的第一个字节高四位如果是1,那么代表发出的就是首帧。低四位和第二个字节就代表了传输的数据的具体的长度。

比如说第一个字节的低四位为0和第二个字节为18,那么就代表要传输的字节数为24个字节。

示例传输格式为:10+18+data段。

2.2 流控帧

当接收到首帧(First Frame-------->FF)以后,需要回复一个流控帧(Flow Conrtrol----------->FC)。一般通过第一个字节PCI高四位(第一个字节的高四位)为3来表示当前帧为流控帧。第一个字节低四位(Flow Status------->FS)则表示当前流控的一个状态:0------>继续发送、1----------------->等待、0--------------------->发送方发送的数据长度超过了接收方的接收能力。

第二个字节一般叫做Block Size(BZ),表示在下一帧流控帧返回之前,A节点最多还能发送几帧连续帧给B。

第三个字节一般叫做Separation time(STmin)。代表了两帧连续帧之间的时间间隔。如果为0x14则代表A像B节点发送连续帧时,两帧连续帧之间的时间间隔要大于20ms,不能小于20ms。

2.3 连续帧

Consecutive Frame(CF)代表连续帧。

其中,PCI高四位(第一个字节的高四位)用2来表示连续帧,低四位(sequence number)表示当前帧数为第几个连续帧

例如说21、22一直到2F发送完之后,又会从21开始发送,一直循环。

在发送完连续帧以后,B节点会发送一个流控帧回来,其中的FS为0表示当前数据需要等待处理一下

2.4 单帧传输

PCI高四位一般为0,表示单帧传输。低四位表示这一帧表示要传输的数据内容,有几个字节。

比如一般格式为03+49+53+4f+00+00+00+00。

3. CAN的物理寻址和功能寻址

物理寻址和功能寻址是通过定义不同的CAN ID 来定义向单个ECU发送的物理寻址还是对多个ECU发送的功能寻址。

物理寻址:客户端与服务器是一对一的通信方式

功能寻址:客户端可以对多个ECU发出同一功能的诊断请求,实现一对多的通信方式

功能寻址示例如下:

750发送:10+03

那么会回复601:50+03+.......

和602:50+03+........

物理寻址就是单个了,相当于没有602这个CAN ID。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值