AUTOSAR图解==>AUTOSAR_SWS_SAEJ1939TransportLayer
AUTOSAR SAE J1939 传输层详解
目录
- 1. SAE J1939 传输层概述
- 1.1 模块定位与功能
- 1.2 J1939TP 在 AUTOSAR 中的位置
- 2. J1939TP 模块架构
- 2.1 架构概览
- 2.2 接口说明
- 3. J1939TP 状态机设计
- 3.1 主要状态定义
- 3.2 状态转换流程
- 4. 传输协议分析
- 4.1 CMDT 连接模式
- 4.2 BAM 广播模式
- 5. 配置结构
- 5.1 配置类层次关系
- 5.2 主要配置参数
- 6. 总结
1. SAE J1939 传输层概述
1.1 模块定位与功能
SAE J1939 传输层(简称 J1939TP)是 AUTOSAR 通信栈中的一个关键组件,专门负责实现基于 SAE J1939 标准的传输协议功能。SAE J1939 是广泛应用于商用车辆和工业设备的通信协议,特别适合于复杂的车辆和机械系统。
J1939TP 模块的主要功能包括:
- 支持大于 8 字节数据消息的分段与重组
- 实现两种传输模式:广播公告模式(BAM)和连接模式数据传输(CMDT)
- 处理传输协议控制消息,如 RTS(请求发送)、CTS(清除发送)和 ACK(确认)
- 管理传输超时和错误处理
- 提供标准化的 API 接口,方便上层应用调用
J1939TP 能够处理的最大数据量为 1785 字节,这远超过 CAN 帧的单包 8 字节限制,从而实现了大量数据的高效传输。
1.2 J1939TP 在 AUTOSAR 中的位置
上图展示了 J1939TP 在 AUTOSAR 分层架构中的位置和与其他模块的交互关系。从架构图中可以看出:
-
层次定位:J1939TP 位于 ECU 抽象层中的通信抽象部分,是连接上层通信服务和底层硬件抽象的桥梁
-
上行接口:
- 与 PDU 路由器(PduR)模块交互,接收上层应用的传输请求
- 提供传输协议服务给诊断通信管理器(DCM)和 COM 模块
-
下行接口:
- 通过 CAN 接口(CanIf)发送和接收 CAN 消息
- 不直接与 CAN 驱动交互,保持硬件抽象性
-
服务交互:
- 与开发错误跟踪器(Det)接口用于错误报告
- 与诊断事件管理器(Dem)接口用于诊断事件处理
这种分层设计遵循 AUTOSAR 的模块化原则,使 J1939TP 能够独立于具体硬件实现,便于在不同平台间移植。
2. J1939TP 模块架构
2.1 架构概览
J1939TP 模块架构遵循 AUTOSAR 基础软件的标准结构,包含明确定义的组件、接口和行为。从架构上看,J1939TP 主要包括以下几个核心部分:
- 初始化组件:负责模块的初始化和反初始化
- 传输管理组件:处理数据传输请求和流程控制
- 接收管理组件:处理数据接收和重组
- 状态管理组件:维护各通道的状态机
- 调度组件:通过主函数周期性执行,处理超时监控
这些组件共同协作,确保 J1939 网络通信的可靠性和高效性。
2.2 接口说明
J1939TP 模块通过以下关键接口与其他模块交互:
-
与 PDU 路由器交互的上行接口:
J1939Tp_Transmit
:接收上层传输请求PduR_J1939TpRxIndication
:向上层指示接收完成PduR_J1939TpTxConfirmation
:向上层确认传输完成PduR_J1939TpStartOfReception
:通知上层开始接收PduR_J1939TpCopyRxData
:从 TP 复制接收数据到上层PduR_J1939TpCopyTxData
:从上层复制发送数据到 TP
-
与 CAN 接口交互的下行接口:
CanIf_Transmit
:向 CAN 接口发送数据J1939Tp_RxIndication
:接收 CAN 接口的数据指示J1939Tp_TxConfirmation
:接收 CAN 接口的传输确认
-
调度和管理接口:
J1939Tp_MainFunction
:周期性执行的主函数,由 OS 或 SchM 调用J1939Tp_CancelTransmit
:取消正在进行的传输J1939Tp_CancelReceive
:取消正在进行的接收J1939Tp_ChangeParameter
:动态更改连接参数
这些接口的设计遵循 AUTOSAR 的标准接口规范,确保了模块间的无缝集成和交互。
3. J1939TP 状态机设计
3.1 主要状态定义
J1939TP 模块实现了一个复杂的状态机来管理传输和接收过程。上图展示了 J1939TP 的状态转换图,主要包括以下状态:
-
未初始化状态 (J1939TP_UNINIT):
- 模块未初始化,所有服务不可用
- 这是模块启动时的初始状态
-
空闲状态 (J1939TP_IDLE):
- 模块已初始化,可以处理传输和接收请求
- 此状态下没有活动的传输或接收操作
-
传输状态:包含多个子状态,用于处理发送过程中的各个阶段
- 等待 RTS 确认 (J1939TP_TX_WAIT_RTS_CONF):等待 RTS 消息的发送确认
- 等待 CTS 接收 (J1939TP_TX_WAIT_CTS_RX):等待接收方发送的 CTS 消息
- 等待数据确认 (J1939TP_TX_WAIT_DT_CONF):等待数据包的发送确认
- 等待 ACK 接收 (J1939TP_TX_WAIT_ACK_RX):等待接收方的最终确认
- 等待 BAM 确认 (J1939TP_TX_WAIT_BAM_CONF):等待 BAM 消息的发送确认
- 等待 BAM 数据确认 (J1939TP_TX_WAIT_BAM_DT_CONF):等待 BAM 数据包的发送确认
-
接收状态:包含多个子状态,用于处理接收过程中的各个阶段
- 等待数据包 (J1939TP_RX_WAIT_DT):等待数据包的接收
- 等待 CTS 确认 (J1939TP_RX_WAIT_CTS_CONF):等待 CTS 消息的发送确认
- 等待接收完成 (J1939TP_RX_PROCESSING):正在处理接收的数据
3.2 状态转换流程
状态机的转换由以下事件触发:
-
初始化触发的转换:
J1939Tp_Init()
函数调用将状态从 UNINIT 转换到 IDLE
-
传输请求触发的转换:
J1939Tp_Transmit()
函数调用根据传输模式(CMDT 或 BAM)将状态从 IDLE 转换到相应的传输等待状态
-
消息接收触发的转换:
J1939Tp_RxIndication()
函数在接收到 RTS 或 BAM 消息时,将状态从 IDLE 转换到相应的接收状态
-
确认触发的转换:
J1939Tp_TxConfirmation()
函数在消息发送确认后触发状态转换- 收到 CTS 消息后状态转换到数据发送状态
- 收到 EndOfMsgACK 后转换回 IDLE 状态
-
超时或取消引起的转换:
- 通过
J1939Tp_MainFunction()
检测到超时 - 通过
J1939Tp_CancelTransmit()
或J1939Tp_CancelReceive()
主动取消操作
- 通过
这种状态机设计确保了 J1939TP 能够正确处理复杂的传输场景,包括正常流程和异常情况处理。
4. 传输协议分析
J1939TP 支持两种不同的传输模式:连接模式数据传输 (CMDT) 和广播公告模式 (BAM)。这两种模式针对不同的通信需求和场景。
4.1 CMDT 连接模式
CMDT 模式是一种点对点通信模式,建立发送方和接收方之间的连接,并包含确认机制。从上面的序列图中可以看出,CMDT 模式具有以下特点:
-
握手过程:
- 发送方发送 RTS (Request To Send) 消息,包含总消息大小、总包数和最大包数量
- 接收方回复 CTS (Clear To Send) 消息,指示可接收的包数量和下一个包序号
- 这种握手确保接收方已准备好接收数据
-
数据传输:
- 发送方根据 CTS 消息指示的数量发送数据包
- 每个数据包都经过 CAN 接口传输到接收方
- 每次发送的包数量由接收方通过 CTS 控制,实现流量控制
-
确认机制:
- 接收方在接收到所有数据包后发送 EndOfMsgACK (End of Message Acknowledgement) 消息
- EndOfMsgACK 包含总消息大小、总包数和成功接收标志
- 发送方收到 ACK 后向上层指示传输成功完成
-
缓冲区管理:
- 接收方通过
PduR_J1939TpStartOfReception
申请缓冲区 - 接收方通过
PduR_J1939TpCopyRxData
复制接收到的数据 - 发送方通过
PduR_J1939TpCopyTxData
获取待发送的数据
- 接收方通过
CMDT 模式适用于需要可靠传输的场景,特别是对数据完整性有高要求的应用,如诊断服务和参数配置。
4.2 BAM 广播模式
BAM 模式是一种广播通信模式,发送方向网络广播数据,不需要接收方确认。从上面的序列图中可以看出,BAM 模式具有以下特点:
-
无握手过程:
- 发送方直接发送 BAM (Broadcast Announce Message) 消息,包含总消息大小、总包数
- 目标地址为全局广播 (0xFF),所有节点都可接收
- 不需要接收方回复确认
-
单向数据流:
- 发送方按固定顺序依次发送所有数据包
- 接收方只负责接收,不发送任何确认或控制消息
- 发送方无法知道哪些节点接收了数据
-
固定时序:
- 数据包按顺序严格发送,不能改变顺序
- 发送间隔由 J1939Tp 配置参数控制
- 没有流控制机制,接收方必须能够接收所有数据包
-
传输完成:
- 发送完最后一个数据包即认为传输完成
- 发送方向上层指示传输成功完成
- 接收方向上层指示接收完成
BAM 模式适用于一对多通信场景,如状态广播、多节点参数更新等,其优势在于简化的通信流程和较高的传输效率,但代价是丧失了传输可靠性保证。
两种传输模式的选择取决于应用需求,AUTOSAR 允许根据配置参数选择合适的传输模式。
5. 配置结构
5.1 配置类层次关系
J1939TP 模块的配置采用 AUTOSAR 标准的层次化结构。上图展示了 J1939TP 的配置类图,包括以下核心配置类:
-
J1939Tp:顶层配置容器,包含通用配置和特定配置集
- 包含一个 J1939TpGeneral 类型的实例
- 包含一个或多个 J1939TpConfig 类型的实例
-
J1939TpGeneral:通用参数配置类,定义全局参数
- 超时参数 (Timeout_N_As, Timeout_N_Bs, Timeout_N_Cr, Timeout_T1-T4)
- 主函数周期 (J1939TpMainFunctionPeriod)
- 开发错误检测开关 (J1939TpDevErrorDetect)
- 最大通道和 PDU 数量限制
-
J1939TpConfig:特定配置集合,定义一组完整的通道配置
- 包含一个或多个 J1939TpRxPdu 和 J1939TpTxPdu 实例
- 包含一个或多个 J1939TpRxChannel 和 J1939TpTxChannel 实例
- 可选的节点地址配置
-
通道配置类:
- J1939TpRxChannel:接收通道配置,定义源地址、目标地址、PGN 等
- J1939TpTxChannel:发送通道配置,定义源地址、目标地址、PGN 等
-
PDU 配置类:
- J1939TpRxPdu:接收 PDU 配置,定义 PDU ID、引用和类型
- J1939TpTxPdu:发送 PDU 配置,定义 PDU ID、引用、类型和寻址格式
-
枚举类型:
- J1939TpProtocolEnum:协议类型枚举,包括 BAM 和 CMDT 模式
- J1939TpPduTypeEnum:PDU 类型枚举,包括 REVERSE、CM、DT 和 DIRECT
- J1939TpAddressingFormatType:寻址格式枚举,包括标准、扩展和混合寻址
5.2 主要配置参数
J1939TP 的关键配置参数包括:
-
超时参数:
J1939TpTimeout_N_As
:CTS 等待超时J1939TpTimeout_N_Bs
:数据包等待超时J1939TpTimeout_N_Cr
:接收资源分配超时J1939TpTimeout_T1
:RTS 控制消息到 CTS 响应超时J1939TpTimeout_T2
:发送到接收确认超时J1939TpTimeout_T3
:包间隔超时J1939TpTimeout_T4
:最后一包到 EndOfMsgACK 超时
-
通道参数:
J1939TpRxDa
/J1939TpTxDa
:目标地址J1939TpRxSa
/J1939TpTxSa
:源地址J1939TpRxPgn
/J1939TpTxPgn
:参数组号J1939TpRxProtocolType
/J1939TpTxProtocolType
:协议类型(BAM 或 CMDT)J1939TpRxBufferSize
:接收缓冲区大小J1939TpTxMaxPackets
:最大包数量J1939TpTxPacketSize
:包大小
-
功能开关:
J1939TpDevErrorDetect
:开发错误检测开关J1939TpVersionInfoApi
:版本信息 API 开关J1939TpDynamicBlockCalculation
:动态块计算开关
这些配置参数通常通过 AUTOSAR 配置工具(如 ECU 配置工具)生成,并保存在配置头文件中供 J1939TP 模块初始化时使用。
6. 总结
AUTOSAR SAE J1939 传输层(J1939TP)是 AUTOSAR 通信栈中的一个重要组件,它实现了基于 SAE J1939 标准的传输协议功能。通过本文的分析,我们可以得出以下结论:
-
架构设计优势:
- 清晰的分层结构,符合 AUTOSAR 标准
- 明确定义的接口,实现了模块间的松耦合
- 状态机设计保证了传输过程的可靠性和正确性
-
功能特点:
- 支持多种传输模式(CMDT 和 BAM),适应不同通信需求
- 有效处理大于 8 字节的数据传输(最多 1785 字节)
- 提供完整的流控制和错误处理机制
-
配置灵活性:
- 完善的配置结构,支持丰富的参数调整
- 通过配置可以适应不同的应用场景和硬件平台
- 支持动态参数调整,提高运行时灵活性
-
主要应用场景:
- 商用车辆通信网络
- 工程机械和农业设备通信
- 需要可靠传输大量数据的分布式控制系统
J1939TP 模块充分利用了 AUTOSAR 架构的优势,提供了标准化的 J1939 传输协议实现,使应用开发人员能够专注于功能实现,而不必关心底层通信细节。在以 CAN 总线为基础的车辆网络中,J1939TP 为大数据量传输提供了可靠的解决方案。