SAE
J1939协议是由汽车工程协会(SAE)定义的,主要用于商用车辆,但也用于舰船、轨道机车、农业机械和大型发动机。另外,SAE
J1939用作国际标准NMEA
2000(海事) 和 ISO
11783(农业机械)的基础,因而此协议栈也能用于这些应用。
在商用车辆方面,由SAE制定的标准化串行协议长期以来一直用于单个电子控制单元和传动装置上元件之间的通信。基于通常可从单片机串行端获得的J1708/
J1587协议可以被视作前驱。
由于需要与J1708/1587协议兼容,对于J1939来说,必须要求CAN报文标识符从11-bits扩展到29-bits(扩展格式),并且CAN模块的开发或协议实现应支持这种报文格式。
因为有扩展的CAN标识符,这就能够象用于J1708那样,将通信关系的定义规则映射到CAN。部分标识符被用于指定一个8-bit源和一个8-bit目标地址(节点数)。
所以通过SAE J1939能够传输测量值和控制数据并配置元件。另外,还能够读或删除单个元件诊断数据,并对单个控制进行校准。
为了使这些成为可能,对于商用车方面的所有相关变量都要在SAE
J1939中定义值域、分辨率、识别数等等。这些对基于J1587技术规格的大都实现。
因此,在J1939协议中,不仅仅指定了传输类型、报文结构及其分段、流量检查等,而且报文内容本身也做了精确的定义。SAE
J1939在ISO/OSI层模型中的分布根据OSI层模型,
SAE J1939被分成几个层,每一层都分别有相应的文档说明。类似于所有实际上的现场总线协议,在SAE
J1939上第5和6层是不需要的,因此没有定义。
SAE J1939的功能被分为如下几层: