1,协议简介
1708是SAE(Society of Automotive
Engineers:美国机动车工程师学会)专门针对重型车辆(卡车和客车)起草文件中J标准规范之一,该协议旨在推广微控制器模块之间的通信标准规范。
SAE J1708协议仅详细描述了OSI(Open System
Interconnection:开放式系统互联)七层模型中的物理层和数据链路层。所以在进行通信时,常常需要与描述应用层的SAE
J1587协议一起使用。
图1-OSI模型
2, 物理层
(1),诊断引脚:
H引脚 = 12
L 引脚 = 13(2),通信波特率:9600bps
图2-OBDII接口
(3),物理特性:SAE J1708协议使用的收发器与RS-485(串行通信标准)相同,但J1708在总线端接电阻。
图3-收发器
(4)电平特性:J1708总线由两路线缆(A和B)组成,双绞线长度最大40米。总线上的电压水平由线路“A”和“B”之间的电势差确定。
逻辑高电平(1):表示A点高出B点至少200 mV; 逻辑低电平(0):表示A点至少低于B点200 mV;
收发器的供电电压应在+6V到-6V(相对于同一地线,适用于所有设备)。
图4-逻辑总线电平
3, 链路层
(1) SAE J1708报文请求
1.1,请求格式:PID + MID + DATA + CS
1.2,请求流程: 首先,发送数据时,会先判断总线是否忙,如果忙,则等待空闲后发送; 然后判断发送数据长度是否在有效长度内,如果是,则进行下一步,否则不发送;
最后判断发送数据是否有效(校验位是否正确),如果是,则发送数据,否则不发送; (备注:SAE J1708协议每帧最大发送21个字节)
图5-请求流程图
(2) SAE J1708报文应答
2.1,应答格式:MID + PID + DATA + CS
2.2,应答流程: 首先,先判断是否有ecu响应,如果有,则进行下一步,否则响应前接收不应答; 其次,进行数据校验正确判断,如果正确进行下一步,否则校验正确前不接收应答;
然后,进行ecu响应请求判断,如果有对应服务信息,则返回,否则应答空;
(备注:1,数据校验方式: 设x =(所有数据(MID+PID+DATA+CS)进行相加后的总和),
若 x & 0xFF = 0 ,则该应答正确,否则数据校验失败;
2,根据校验方式,得到校验位算法为 CS = 0x100 -(MID + PID + DATA) % 0x100))
图六-应答流程图
(3)交互方式
3.1 一对一
Req: AC 80 9F 80 B5
Ans: 80 9F 02 01 02 DC
3.2 一对多
Req: AC 80 EA 80 6A
Ans: 80 C0 11 EA 30 2D 30 34 38 39 38 31 31 32 2A 38 33 39 35 30 94
Ans: 80 C0 11 EA 31 30 39 35 2A 30 35 31 39 30 34 32 32 31 39 35 96
Ans: 80 C0 11 EA 32 31 2A 30 31 30 35 30 38 30 35 2A 4F 4F 2A 30 83
Ans: 80 C0 03 EA 33 30 70
(备注:请求应答的具体内容在应用层在进行解析)
(4)否定应答
无否应应答类型,若为广播,则等待下一个广播,如过不是,则重发送数据;
4, 应用层
(1),系统进入
Req: AC 80 F3 80 61
Ans: 80 F3 01 66 26
命令说明:
AC 80:表示非车载诊断请求
F3 :PID = f3,表示自定义服务
80 : MID = 80,表示发动机
01 :表示数据位长度,即有一个数据字节(不包含有效字节)
66 :表示数据信息,意思根据请求服务类型决定,
26 :CS = 26, 根据校验位方法,26 = 0x100 – ((0x80 + 0xFf3 + 0x01 + 0x66) % 0x100);
(2),读版本信息
Req: AC 80 ED 80 67
Ans: 80 C0 11 ED 30 2D 30 34 38 39 38 31 31 32 2A 38 33 39 35 30 94
Ans: 80 C0 11 ED 31 30 39 35 2A 30 35 31 39 30 34 32 32 31 39 35 96
Ans: 80 C0 11 ED 32 31 2A 30 31 30 35 30 38 30 35 2A 4F 4F 2A 30 83
Ans: 80 C0 03 ED 33 30 70
命令说明:
AC 80:表示非车载诊断请求
ED :PID = ED表示自定义服务
80 : MID = 80,表示发动机
C0 : 多段参数(Multisection Parameter),发多帧标志;
11 :表示后面除了校验字节之外的所有字节个数;即右面有0x11个数据字节
30 :该字节分高四位和底四位,3表示总共发(3+1)段数据,0表示这是第0段
94 :表示这段数据的校验字节,根据上面的校验方法得出该结果;
(备注:SAE J1708协议每帧最大发送21个字节)
(3),读故障码
Req: AC 80 C2 80 91
Ans: 80 C2 0E 64 24 A8 21 9D 23 5B 24 66 24 6E 23 69 23 79
命令说明:
AC 80:表示非车载诊断请求
C2 :PID = C2表示发送机系统诊断码以及计数表
80 : MID = 80,表示发动机
0E :表示后面除了校验字节之外的所有字节个数;即右面有14个数据字节
79 :表示这段数据的校验字节,根据上面的校验方法得出该结果;
故障码信息:64 24 A8 21 9D 23 5B 24 66 24 6E 23 69 23
(故障码读取根据数据分两个或三个字节一个故障码两种方式混合读取,这里不做介绍)
(4),清故障码
Req: AC C3 03 80 00 80 8d
Ans: 80 C4 08 01 02 03 04 05 06 07 08 8f
AC C3:表示诊断数据请求或清理计数
03 :表示后面除了校验字节之外的所有字节个数;即右面有0x03个数据字节
80 :PID = 80表示发送机
C4 :表示诊断数据或清理计数器响应
8f :表示这段数据的校验字节,根据上面的校验方法得出该结果;
(备注:其中PID和MID数据的具体对应信息清看附表)
(5),读数据流
Req: AC FE FA 04 D4 80 8E FA 7C
Ans: FA FE AC 08 FE 8E 03 04 05 06 07 08 A7
AC FE:表示请求自定义(FE)表示转义
FA :PID = FA 表示转向柱单元
04 :表示后面除了校验字节之外的所有字节个数;即右面有0x04个数据字节
A7 :表示这段数据的校验字节,根据上面的校验方法得出该结果;
(备注:由于PID = FE,故该命令应答由设备商设定)
应答附录:
PID 0-127(以及256-383):
描述一个字节长的数据参数。PID 128-191(384-447)描述包含两个字节的数据参数。需要两字节以上的数据参数分配的PID是192-253(或448-509)。这些PID后面的第一个字节将包含数据参数字节数。
PID 194-196:
用于诊断。出于这个目的,车辆中的许多电气部件都分配有子系统标识(SID)。对于每个MID,最多可以为其定义255个不同的SID。通过这些SID,可以标识那些无法与特定PID关联的部件。SID只应分配给可现场替换的部件或可以与MID相关的部件。大部分SID由SAE或数据格式分会预定义。SID 151-155是可用于读出非部件特定诊断信息的“系统诊断代码”。诊断信息包含一个故障模式标识符(FMI)。
PID 225-227
用于仪表盘文本显示,多个ECU均可以访问它。有三个命令用于此用途:文本报文显示类型(PID 227)、要显示的文本报文(PID 226)和确认的文本报文(PID 225)。
PID 254
用于传输目的地为总线上特定节点的特殊命令、数据和信息。这个PID后面发送的数据参数可以由设备厂商确定。
PID 255用于把PID扩展到两个字节,也就是说,后面的字节也是一个PID。对于这个额外的PID,可以使用的值最大可以为511。如果第一个PID是255,那么后面的PID被理解为256的求模结果(0=256、1=257)。
5, 附表
图八-SAE J1708 MID对应表-1
图七-SAE J1708 MID对应表-2
图九-SAE J1587 PID对应表 -1
图九-SAE J1587 PID对应表 -2
图九-SAE J1587 PID对应表 -3