SAE J1939协议是由美国汽车工程师协会——卡车和公共汽车电气电子委员会下的卡车和公共汽车控制和通讯网络分委员会制定的高层CAN网络通讯协议。它主要用于为重型道路车辆上电子部件间的通讯提供标准的体系结构[1]。
1 SAEJ1939协议构成文件
SAEJ1939协议包括如下几部分内容:
SAE J1939-11 物理层,250 Kbits/s,屏蔽双绞线
SAE J1939-13 物理层,离线诊断连接器
SAE J1939-15 简化的物理层,250 Kbits/s,非屏蔽双绞线
SAE J1939-21 数据链路层
SAE J1939-31 网络层
SAE J1939-71 车辆应用层
SAE J1939-73 应用层-诊断
SAE J1939-81 J1939网络管理协议
-----------------------------------------------------------------------------------
2 各层协议的功能
2.1 物理层
SAEJ1939的物理层规范包含SAE J1939-11(物理层,250 Kbits/s,屏蔽双绞线)、SAE J1939-15(简化的物理层,250 Kbits/s,非屏蔽双绞线)和SAE J1939-13(物理层,离线诊断连接器)三部分。其中SAE J1939-11和SAE J1939-15给出了物理层为屏蔽双绞线和非屏蔽双绞线时的网络物理描述、功能描述、电气规范、兼容性测试、总线错误讨论。而SAE J1939-13(物理层,离线诊断连接器)则定义了离线诊断连接器的通用需求、性能需求和物理需求。
2.2数据链路层
SAEJ1939的数据链路层在物理层之上提供了可靠的数据传输功能。通过数据链路层的组织,发送的CAN数据帧具有必需的同步、顺序控制、错误控制和流控制等功能。其中,流控制是通过一致的信息帧格式完成[2]。
数据链路层的功能通过命令、请求、广播/响应、应答、组功能和传输协议来实现。其中传输协议用于长度大于8个字节的参数组(PGN)的收发。传输协议涉及报文的拆装和重组,通讯方式又分为广播和点对点会话,对传输过程还定义了超时监测和错误处理,是数据链路层最复杂的部分。
2.3 网络层
SAE J1939的网络层定义了网络互联ECU的需求和服务,它们负责不同SAEJ1939网络段之间的互联。同时网络层也定义了各种类型的网络互联ECU和它们所提供的功能。
2.4 应用层
应用层详细定义SAEJ1939协议应用层所用到的SPN(可疑参数编号)和PGN(参数组)。该层包含管理功能和所采用的支持应用的机制。在应用层技术要求中,对报文格式、ISO拉丁字符集、参数范围、传输重复率、发动机参数的命名规则等方面都有具体的规定和描述[3]。应用层定义的SPN和PGN是最多的。
2.5应用层-诊断
SAEJ1939应用层-诊断定义了用于诊断服务的报文。诊断报文(DM)提供了进行车辆维修时的功能。SAE J1939-73提供的诊断定义是为了满足所有可能使用SAE J1939网络的用户需要的。这些定义适合SAE J1939中定义的所有工业组的应用。诊断必须具有能够满足不同客户、工业组和法规制订机构所需求的诊断能力[4]。
SAE J1939所提供的主要诊断功能包括:周期性广播活动诊断故障代码;确定控制器诊断灯状态;读取或xx诊断故障代码;读写控制器存储器;提供安全功能;停止/起动报文广播;报告诊断就绪状态;监测发动机参数。这些功能分别由诊断报文DM1——DM19具体实现。
2.6 网络管理
SAEJ1939的网络管理负责源地址管理、地址与功能的关联和对网络相关错误的检测和报告。它定义了名称和地址方面的需求、网络管理过程、网络错误管理、地址声明和CA(控制器应用)的初始化过程和{zd1}限度的网络管理功能[5]。
3 SAEJ1939协议软件开发
SAEJ1939是一个复杂、完整的汽车网络体系结构,其软件实现是一项大型的系统工程。其复杂性尤其表现在:
(1) 数据链路层的传输协议——用于传送多包的长报文(最多255包,1785字节),具有详细完整的连接管理功能定义,以保证在各种情况下系统都能够稳定可靠地工作。连接管理包括广播,建立点对点会话连接、维持连接、终止连接、流控制、报文结束应答的详细约定。这部分协议还规定了在各种情况下的超时和错误处理。传输协议的软件系统架构是状态图和流程图复杂地交织在一起的混合体。以传统的软件设计、实现方式开发这部分内容需要丰富的经验和高超的技巧。
(2) 网络管理——网络管理规定了系统初始化过程中进行地址声明的过程。设计了在发生地址冲突时,单一地址能力CA(Controller Appliaction——控制器应用)、仲裁地址能力CA和命令地址能力CA的状态转移。网络管理部分软件设计的突出特点是状态转移图。
(3) 应用层—故障诊断——SAE J1939所提供的主要诊断功能包括:周期性广播活动诊断故障代码;确定控制器诊断灯状态;读取或xx诊断故障代码;读写控制器存储器;提供安全功能;停止/起动报文广播;报告诊断就绪状态;监测发动机参数。这些功能分别由诊断报文DM1——DM19具体实现。其中DM1报文是诊断报文中最基本、最常用,也是最重要的。它周期性地向SAE J1939网络广播当前故障信息(以1秒为间隔)。如果有新的故障发生或当前的某个故障消失,它会即时向网络广播故障变化情况。
上述三部分的软件开发均包含了复杂的状态/流程图的设计、仿真调试和代码实现,是SAEJ1939软件开发最复杂的部分。对这部分软件开发所采用的开发模式、开发流程和开发工具将对开发的水平、质量和效率产生很大影响。