SAE J1587/SAE J1708 协议笔记

SAE J1587/SAE J1708 协议笔记

1. 协议架构概述

SAE J1708 定义了物理层和数据链路层,相当于 OSI 模型的底两层。

SAE J1587 定义了应用层,规定了数据的含义和格式。

简单理解:J1708 是"公路和交通规则"(怎么跑),J1587 是"货物清单"(运什么)。

2. SAE J1708:物理层与链路层

2.1 物理层特性

  • 硬件基础:基于 RS-485 差分总线。
  • 拓扑限制:最大总线长度 40 米。
  • 电气特性
    • 默认状态:通过上拉电阻保持隐性电平(逻辑 1)。
    • 显性电平:逻辑 0,由驱动器主动拉低。

2.2 链路层特性

  • 通信速率:9600 bps(固定)。
  • 字节序小端模式,低位优先。
  • 报文结构
    • 最大长度:21 字节。
    • 组成MID (1字节) + 数据域 (N字节) + 校验和 (1字节)
  • 核心机制非破坏性位仲裁(软件协助硬件实现)。

3. J1708 核心难点:仲裁机制

由于 RS-485 本身无仲裁功能,J1708 通过时间片 + 线与逻辑实现多主竞争。

3.1 硬件实现原理(模拟"线与")

为了实现类似 CAN 总线的"0 覆盖 1"仲裁:

  1. 电路接法 :将 MCU 的串口 TX 引脚反向接到 RS-485 收发器的发送使能端 (DE)。
  2. 逻辑分析
    • 发送数据位 '1' → TX 为高 → DE 为低 → 关闭发送器 → 总线被上拉为隐性 (1)
    • 发送数据位 '0' → TX 为低 → DE 为高 → 开启发送器 → 总线被拉低为显性 (0)
  3. 冲突检测
    • 节点发送 '1' 时,发送器关闭,此时读取总线状态。
    • 若读回为 '0'(显性),说明有其他节点正在发 '0'(优先级更高),判定为冲突。

3.2 总线访问控制

节点必须在总线空闲后,等待特定的时间才能发送。

标准访问时间公式

总线访问时间Ta的计算公式:Ta = Ti + 2 × Tb × P

  • 其中:Ti = 空闲线最小时间(10比特时间),Tb = 比特时间,P = 消息优先级(1-8)
优先级映射表
优先级 紧急程度 应用场景 访问时间示例
1-2 最高紧急 需立即访问总线的消息 12-14 bit
3-4 高度紧急 防止严重机械损坏的消息 16-18 bit
5-6 中等紧急 影响车辆运行经济性的消息 20-22 bit
7-8 普通紧急 其他所有消息 24-26 bit

3.3 冲突处理流程

  1. 检测:所有发射器监视 MID 字节的发送过程。
  2. 判定:若检测到冲突(发 '1' 读到 '0'),立即放弃总线控制。
  3. 退避算法
    • 若连续两次碰撞,采用修改后的公式计算延迟:
    • Ta = Ti + 2 × Tb × (P + 1) + 2 × Tb × P2,其中P2为3bit的伪随机数。

4. SAE J1587:应用层协议

J1587 定义了消息的具体内容,不再是单纯的比特流。

4.1 消息格式

MID + 参数块 + 校验和

  • MID (Message Identifier) :1 字节,标识发送源模块
    • 范围:128 - 255。
    • 位于SAE J1587协议 页码 2
  • 参数块:包含一个或多个 PID 及其数据。
  • 校验和:用于错误检测。

4.2 PID (Parameter Identifier) 详解

PID 标识了数据的含义(如转速、油温)。J1587 支持 PID 扩展机制。

位于SAE J1587协议 页码6 ,若搜索 PID 383 后面有哪些数据,则搜索A.383

PID 扩展机制
  • 标准 PID:直接发送 PID 码。
  • 扩展 PID :若第一个字节为 PID 255 ,则表示 PID 为双字节。
    • 计算公式:扩展PID值 = 255 + 第二个字节值 + 1
PID 数据长度映射规则 (关键)

J1587 通过 PID 的值范围来定义后面跟随的数据长度:

PID 范围 (十进制) 数据长度 备注
0 - 127(256-383) 1 字节 常用参数
128 - 191(384-447) 2 字节 模拟量数据
192 - 253(448-509) 变长 (≥2字节) 需额外指定长度
255 扩展标识 用于双字节 PID 扩展

注:扩展后的 PID 同样遵循上述长度映射规则。

4.3 特殊功能 PID

  • 诊断相关:PID 194-196。
  • 仪表文本显示:PID 225-227。
  • 特定节点命令:PID 254。

5. 报文剖析

  • 数据校验:报文有效,包括检验和在内的报文中的所有字节总和对256求模,结果是0。
  • 单帧传输的最大字节数为21个字节,多帧传输的最大字节数为16*21 = 336个字节
  • 单帧消息
c 复制代码
单帧消息如下:
MID=0xAC,表示非车载诊断请求
PID = 0x80,表示特定参数请求,128 a b
    a --- 请求的参数编号
    b --- 请求参数数据的组件MID
ED 80 ED代表车辆VIN,MID 80代表发动机
含义即读取发动机的VIN识别码
Req:AC 80 ED 80 66
    
MID 80代表发动机
PID ED ED代表车辆VIN
11 代表数据长度,后面的是17byte数据,最后的是校验码
有效数据为56 50 20 20 20 30 38 37 36 33 39 20 20 20 20 20 20
车辆VIN为VP   087639      ,0x20为空格
Ans:80 ED 11 56 50 20 20 20 30 38 37 36 33 39 20 20 20 20 20 20 7B
  • 多帧消息
c 复制代码
多帧传输:根据协议规定,SAE J1587协议多帧传输的最大字节数为16 * 21 = 336个字节;
    
非车载诊断请求,读取车辆管理系统的软件识别码
Req:AC 80 EA BB 69
    
MID BB代表车辆管理系统
PID C0代表多包数据
11 代表本包数据长度
EA 为PID值,软件识别码
20 为最后段编号(总段数减 1)和当前段编号。其中高四位(upper nibble)包含最后段编号(1 至 15)。低四位(lower nibble)包含当前段编号,范围为 0 至 15。段编号按升序分配。
第一帧的24为有效数据长度,为36byte
所以有效数据为32 30 39 35 32 32 33 35 50 30 31 2A 32 30 39 30 32 36 36 32 50 30 31 2A 32 30 39 30 32 35 39 31 50 30 31 2A
软件识别码ASCII为20952235P01*20902662P01*20902591P01*
请注意:后几帧没有有效长度,只有第一帧存在;不要将段编号当成有效数据
Ans:BB C0 11 EA 20 24 32 30 39 35 32 32 33 35 50 30 31 2A 32 30 A8
Ans:BB C0 11 EA 21 39 30 32 36 36 32 50 30 31 2A 32 30 39 30 32 58
Ans:BB C0 09 EA 22 35 39 31 50 30 31 2A 31
相关推荐
IT古董1 小时前
【MES学习笔记系列】MES 推荐书籍与资源
笔记·学习
一米阳光86612 小时前
软考(中级)软件设计师核心笔记(9)算法——时间复杂度与空间复杂度、查找算法、排序算法
笔记·算法·职场发展·软考·软件设计师·中级职称
米饭不加菜2 小时前
常用基本求导公式与法则(超详细推导版——上)
经验分享·笔记
恒锐丰科技韩生2 小时前
率能 SS6635E|3.0~30V 直流双向 H 桥电机驱动 SOP8 玩具电子锁机器人分享
嵌入式硬件·硬件工程
嘉子的秃头日记2 小时前
机械革命“自动修复”无法修复你的电脑
stm32·单片机·电脑
恒锐丰科技林技术员2 小时前
高集成双通道 H 桥驱动芯片 SS6850H:低压直流电机驱动优选方案
嵌入式硬件·硬件工程
森旺电子2 小时前
电子负载使用介绍
单片机·嵌入式硬件
青山是哪个青山10 小时前
LangChain 学习笔记(四):Message 与提示词模板
笔记·学习·langchain
hsjiasb12 小时前
FreeRTOS学习(二十六)——动态内存管理heap_1到heap_5
stm32·单片机·学习·学习笔记·freertos