• Automotive

SAE J1708介绍


协议背景

J1708是专门针对重型车辆(卡车和客车)开发的一种SAE规范。协议旨在推广用于带微控制器的模块之间通信的标准。标准规范以更经济的方式在设备之间进行数据传送。更多优点包括:

  • 把硬件成本降到最小。
  • 为现有系统的进一步扩展提供灵活性和可能性。
  • 使用标准的工业电子产品,便于开发。

应用领域

因为J1708协议只描述OSI模型的底层部分,所以始终需要与一种上层应用协议一起使用。这种上层协议的一个例子是J1587(用于重型车辆中微控制器之间的数据交换)。

协议简介

  • 描述OSI模型中的物理层和数据链路层。
  • 几乎总是与应用层协议SAE J1587一起使用。
  • 基于来自RS-485总线的电子特性。
  • 最大长度为40米的双绞线。
  • 网络基于一种总线拓扑。
  • 面向字节的串行通信,最低有效位优先传送。
  • 传送速率为9600 bps。
  • 报文包含
    •    一个1字节长的MID(报文标识符)
    •    后跟一些数据字节
    •    最后是检验和
  • 报文的最大长度是21字节。
  • 为报文传送冲突提供错误检测和处理。

协议详情

协议既描述诸如应该如何解释总线上的电压电平的物理特性,也描述报文的组成。

物理特性

J1708协议使用与RS-485相同的收发器。总线网络支持至少20个使用这些收发器的节点。J1708不使用RS-485所使用的总线端接电阻。

j1708-transceiver1

RS-485收发器(图片摘自J1708规范)

注意,这种收发器基本上与用于CAN总线的收发器相同。

J1708总线由两路线缆(A和B)组成,每英寸(2.54厘米)至少包含一个绞点(360°),总长度最大可达40米。总线上的电压水平由线路“A”和“B”之间的电势差确定。当A点高出B点至少200 mV时,达到逻辑高电平(1)。逻辑低电平(0)表示A点至少低于B点200 mV(参见下图)。收发器的供电电压应在+6V到-6V(相对于同一地线,适用于所有设备)。

j1708-logic-levels1

逻辑总线电平的确定

如果所有发送节点都已不活动或者当所有发送节点在发送逻辑高位 (1)时,总线处于空闲模式则处于逻辑高电平。如要将总线置于逻辑低电平状态,只需有一个发送节点发送一个逻辑低位0,这使得逻辑低位变成显性。

位级别通信

J1708网络使用一种可以“随机”访问总线的总线技术。随机访问表示任何节点都可以在需要的时候进行传送,除非总线尚未进入忙碌状态。总线必须已经处于空闲模式(逻辑高电平)至少一次总线访问时间后,节点才可以访问它。

时间计数基于位时间。如果速度是9600 bps,时间计数大约是104.2微秒。每条报文都有一个1和8之间的优先级,其中1的优先级最高。一次总线访问时间是最短空闲时间(至少10比特时间)加上报文优先级的两倍。

如果两条报文恰好同时发送,那么总线上发生冲突。发生这种情况时,两个发送节点都必须放弃对总线的控制,也就是说,取消激活它们的发送器。然后,两个节点都必须在等待一个总线访问时间后才能重新开始发送。结果是,具有最高优先级的节点将首先获得对总线的访问权并开始传送其报文。

J1708报文的构成

报文面向字节,也就是由许多字节组成。每个字节由一个起始位、八个数据位和一个停止位组成。起始位具有逻辑低电平,停止位是一个逻辑高电平。八个数据位首先以最低有效位发送。

这遵循标准串行UART(通用异步收发传输器)通信。

报文由一个MID(报文标识符)、数据字节和最后面的1字节长检验和组成。J1708规范中没有描述数据部分的内容,而是在高层协议(例如J1587)中进行描述。报文前面必须始终有一个空闲时间,这个时间至少是最短的总线访问时间。报文中两个字节之间的时间不允许超过两个位时间。

MID 数据1 数据2 数据3 数据4 检验和
44 23 61 114 62 208

J1708报文

每条报文的第一个字节必须始终是一个MID。MID的有效值为0-255。

  • MID 0-68属于预定义的设备,用来确保一致性。
  • MID 69-86专门用于J1922协议。
  • MID 87-110保留用于将来的应用。厂商可以向SAE卡车和客车电气委员会申请定义一个MID。
  • MID 111指定用于电子控制设备的出厂测试,任何板载单元都不应使用这个MID。
  • MID 112-127没有被保留,可以根据需要使用。
  • MID 128-255为SAE J1587保留并在该协议中进行定义。
  • 各厂商负责保证在每个网络系统中每个MID仅用于一个设备。

J1708标准列出所有MID及其使用范围。

检验和的计算

报文中的字节。一种决定报文是否已经正确传送的简单方法是把检验和加上所有数据字节的8位总和,再加上接收到的报文的MID。如果报文得以正确传送,那么8位总和应当是零(0)。

举例如下(使用上图中的示例报文),

  • 44+23+61+114+62+208 = 512
  • (512 AND 0xFF) = 0,所以报文正确。

返回到 CAN标准