SAE J1708协议
SAE J1708协议
1.协议简介
1708是SAE(Society of Automotive Engineers:美国机动车工程师学会)专门针对重型车辆(卡车和客车)起草文件中J标准规范之一,该协议旨在推广微控制器模块之间的通信标准规范。
SAE J1708协议仅详细描述了OSI(Open System Interconnection:开放式系统互联)七层模型中的物理层和数据链路层。所以在进行通信时,常常需要与描述应用层的SAE J1587协议一起使用。
2.物理层
(1)诊断引脚:H引脚 = 12 L 引脚 = 13
(2)通信波特率:9600bps
(3)物理特性:SAE J1708协议使用的收发器与RS-485(串行通信标准)相同,但J1708在总线端接电阻。
(4)电平特性:J1708总线由两路线缆(A和B)组成,双绞线长度最大40米。总线上的电压水平由线路“A”和“B”之间的电势差确定。
逻辑高电平(1):表示A点高出B点至少200 mV;
逻辑低电平(0):表示A点至少低于B点200 mV;
收发器的供电电压应在+6V到-6V(相对于同一地线,适用于所有设备)。
3.链路层
(1) SAE J1708报文请求
1.1,请求格式:PID + MID + DATA + CS
1.2,请求流程:
首先,发送数据时,会先判断总线是否忙,如果忙,则等待空闲后发送;
然后判断发送数据长度是否在有效长度内,如果是,则进行下一步,否则不发送;
最后判断发送数据是否有效(校验位是否正确),如果是,则发送数据,否则不发送;
(备注:SAE J1708协议每帧最大发送21个字节)
(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个数据字节
8E :表示这段数据的校验字节,根据上面的校验方法得出该结果;
5.附表
注:本文由我的同事(修道 - 0323)参考网上资料整理而成。