ISO15765-2和ISO14229
3.1:
MPLAB X IDE 8位编译器
S32DS_ARM_Win32_v2.2未安装
CSDN:
IOS 15765-2
经典CAN数据链路层最⼤能够⽀持8个字节,但ISO 14229并不仅仅是为
巨蟹女性格了CAN总线设计的,最⼤容量达到4095个字节。⽐如VIN码是17个字节,
CAN总线必然需要传递3帧才能传完VIN码,那么如何科学、快捷、安全
地将多个字节通过经典CAN来进⾏传输,就成了⼀个需要解决的问题,
ISO 15765-2 协议由此诞⽣。
两个⽹络实体之间的通信都必须遵循N_PDU的格式和定义。N_PDU
的格式由3个部分组成,N_AI,N_PCI,N_Data ;N_PDU有四种
SF N_PDU, FFN_PDU, CF N_PDU, FC N_PDU。
0 单帧 SF 未拆分的 整段发送
1 ⾸帧 FF 分段发送
2 连续帧 CF
3 流控帧 FC 调整发送的速率 FlowComtrol FC
4-F 保留
分段发送:
FF 开启发送 0001(⾼4bit FF的标志)+数据长度(低4bit加上第⼆个字节)
FC 控制速度 0011(⾼4bit)+FS(低4bit)+BS(第⼆个字节)+STmin(第三个字节) BS(BlockSize)STmin(SeperateTime) STmin 的定义,是在⼀个连续帧发送完开始到请求下⼀个连续帧时的间隔时长。
FC 三种状态0(允许继续发送) 1(等会发) 2(下次发)
0 ContinueToSend (CTS) 1 Wait (WT) 2 Overflow (OVFLW)
CF 它使⽤第⼀个字节⽤作PCI,⾼4bit为0010,低4bit⽤于标识CF的
序列号,从1开始,每发送⼀次CF增加1。
不分段传输的诊断服务举例:
request 02 10 03 55 55 55 55 55
respon 06 50 03 00 32 01 F4 AA
这是⼀个请求进⼊extended ssion的最简单的诊断服务,
请求和应答都是SF,加粗的0标识了SF,后⾯的2和6表⽰了这
条诊断报⽂拥有⼏个字节的数据。
分段传输的诊断服务举例:
这是⼀个读取DTC的命令和应答。
03 19 02 08 55 55 55 55 (诊断仪发送的SingleFrame的request)03(3 诊断报⽂拥有⼏个字节的数据) 19 02 08(3个) 55 55 55 55 SF
10 33 59 02 19 01 00 07 (ECU以FirstFrame开始传输的respon)10(1 FF标志) 33(0 33数据长度51) 59 02 19 01 00 07数据 6
30 00 00 55 55 55 55 55 (诊断仪发送的FC)30(0 FS) 00(BS) 00(STmin) 55 55 55 55 55
21 09 03 05 02 09 05 04 (ECU发送的CF1)21(0010+初始序号1) 7字节数据
22 07 09 05 06 06 09 05 (ECU发送的CF2)22(0010+初始序号1+1=2) 7
23 08 03 08 07 01 05 08 (ECU发送的CF3)7
24 07 01 06 08 07 01 0C (ECU发送的CF4)7
25 08 07 01 0D 08 07 03 (ECU发送的CF5)7
26 07 09 08 01 01 09 09 (ECU发送的CF6)7
27 01 07 09 AA AA AA AA (ECU发送的CF7,此时传输结束)3 6+6*7+3=51
BS和STmin等于0时,表⽰接收端可以以最快的速度来接收数据
凸凹书吧
,发送端可以⼀次发送的CF数量不受限制。
ISO 14229 UDS协议,是Unified Diagnostic Services,统⼀诊断服务,
是诊断服务的规范化标准,⽐如读取故障码应该向ecu发什么指令,读
数据流⼜是发什么指令。 OBD是关注车辆售后实时排放的理念形成的⾏
业规范,⽽UDS是诊断服务的统⼀化规范,只是应⽤层的规范。
肯定响应格式由“SID+40+具体的数据”。
否定响应格式是⼀个固定的格式“7F+请求报⽂⾥的SID+⼀个字节的NRC”
UDS服务⽀持Subfunction的请求和响应格式,
“请求”为“SID+⼀个字节Subfunction+具体的数据”,
肯定响应为“SID+40+Subfunction+具体的数据”,
⽽有的UDS服务⾥⾯是不⽀持Subfunction,是⽀持DID的,
DID是“数据ID”的意思,那么它的
请求格式为“SID+具体的DID+数据内容”,
肯定响应“SID+40+DID+具体的数据”,
这⾥举出两个例⼦,⼀个是 “31例程控制服务”,
还有⼀个是“2F IO控制服务”,31就是它的请求报⽂⾥⾯,
带⼀个字节的Subfunction和两个字节的Routine ID,
后⾯的这个数据是跟具体的数据内容,也可以没有具体的数据。
2F是它的SID+两个字节的DID+⼀个字节的输⼊输出控制参数
(这⾥注意这⼀个字节的数据类似于Subfunction,但是他不是
萱萱休闲吧
Subfunction)+后⾯加具体的数据内容。
肯定响应抑制位。
肯定响应抑制位是在Subfunction⾥的这个字节的最⾼位,我们把它叫做肯定响应抑制位。
只有这个服务⽀持Subfunction的时候,才有可能⽀持肯定响应抑制位,
当肯定响应抑制位置1的时候,要求所有的肯定响应的抑制将不再发送。
当肯定响应抑制位为0的时候,肯定响应是不被抑制的。
这⾥要注意的是它只是抑制肯定响应,⽽否定响应是不被抑制的。
Tester发送的请求报⽂格式错误,或者请求发送的条件处于错误,
ECU将发送否定响应,否定响应的格式是“7F+SID+NRC”,
常⽤到的NRC在这⾥罗列了。
11表⽰服务不⽀持;
英语感谢信12 subfunction不⽀持;
13 请求的长度不正确,或者格式不正确垃圾分类实践报告
31 是请求超出范围;
31 是请求超出范围;
7E 是在当前会话下subfunction不⽀持
7F 是在当前会话下服务不⽀持
⼀个是叫做P2Sever,⼀个是叫做P2Sever*。
当Tester给ECU发送请求过后,ECU需要在P2Sever时间内给出相应的响应,
如果ECU当前正在处理别的任务,处理别的事情,⽽不能在P2Sever的时间
内给出相应的响应,那么它先在P2Sever时间内给出⼀个NRC为78的Pending
报⽂,告诉Tester“ECU正在忙”,之后会在P2Sever*的时间内给出其它的
响应报⽂,如果P2Sever*的时间内还是不能给出相应的肯定响应和否定
响应,将继续给出Pending报⽂,直到能够正确处理请求报⽂之后,
会给出正确的响应报⽂。
26个UDS服务⾥的6个,分别是
10诊断会话控制,
14清除诊断信息,
19读取诊断信息,
22由DID读取数据,
27安全解锁服务,
2E由DID写⼊数据。
*****************************************************************************************************************************************************************************
1. Diagnostic Service (诊断服务)诊断服务是介于诊断设备和被诊断ECU之间的⼀种信息交互⽅式。通常是由诊断设备发出请求,
被诊断ECU做出回应。
2. Diagnostic Trouble Code (故障码)故障码是⽤来标记ECU故障的代码,它遵循⼀定的规则(以后会介绍),驻留在ECU的⾮易
肛裂用药失性存储器中。
3. Diagnostic Data (诊断数据)诊断数据是可以被诊断设备请求的ECU内部数据,它包括:
-当前数据,即ECU正在使⽤的某个数据,⽐如车速、节⽓门⾓度等
-存储数据,即被ECU存储在存储器中某⼀时刻的数据,⽐如DTCcrawled
-静态数据,即恒定不变的ECU内部数据,⽐如VIN码。
4. Diagnostic Session (诊断会话)可以理解为某种诊断模式或权限,即在不同的模式下,对不同的诊断服务的使⽤做了限制。
5.Diagnostic Routine (诊断例程)驻留在被诊断ECU中的⼦程序,它可以被诊断设备启动和停⽌。⽐如格式化EEPROM的⼦程
序。
6. Tester, 就理解为诊断设备或诊断仪吧。
1 Addressing Type (寻址⽅式)寻址⽅式指的是诊断消息的传递⽅式,有两种寻址⽅式:
-Physical ,物理寻址,即1对1通信,⽤于知道确切的被诊断ECU的地址
-Functional,功能寻址,即1对n通信,或者说⼴播发送,⽤于不知道确切的被诊断的ECU的地址,向⼀组或者全体ECU发送请求
2 ResultResult指的是tester请求诊断服务执⾏后,从ECU的返回结果。可以有两种结果:
-Positive Respon,正响应,即诊断请求执⾏成功
-Negative Respon,负响应,即诊断请求执⾏失败
3 Service IdentifierService Identifier可以简称为SID,它是⼀个⼀字节的⽆符号整数,⽤以指代某个诊
断服务。诊断协议为每⼀个
诊断服务都分配了唯⼀⼀个SID,因此更⽅便协议的软件实现。同时,在⽇常⼯作中⼯程师们⽤SID来指代某个诊断服务⽐说出某个服务的
名字更⽅便简洁。⽐如ReadDataByIdentifier这个服务是去按照ID去读某个诊断数据,直接说22服务会更加⽅便。
4 Data Identifier简称DID,是2个字节⽆符号整数的ID,⽤来标识ECU中贮存的某个诊断数据单元。它的好处是当要读取某个单元
的诊断数据时,只要读对应的DID就可以,不必知道数据的具体地址。即使当ECU中的数据地址发⽣变化时,只要DID和某个地址单元的映
射地址改变即可,对于使⽤者来说DID屏蔽了具体实现细节,⽽将重点放在了数据本⾝。
5 Negative Respon Code可以简称为NRC,或者叫错误响应码,是⼀个字节的⽆符号整数。它是诊断协议为每⼀种执⾏失败的
诊断服务分配的失败原因代号。
6 Sub-function有些诊断服务可以⽀持不同的诊断⼦服务,sub-function就是⽤来定义这种⼦服务的,它将某⼀个服务细分为更为济南图书馆
具体的服务,它是⼀个字节的⽆符号整数。⽐如ECURet这个服务就有0x01,0x02,0x03等⼏种sub-function指代具体的ret⽅
式。
基本格式
归纳起来,诊断的request格式⽆⾮以下2种:
<SID> + <Sub-function> + <Parameter>
<SID> + <Parameter>
即有⽆sub-function的区别。其中,我把DID也归为Parameter
即有⽆sub-function的区别。其中,我把DID也归为Parameter