图解AUTOSAR_CP_PDURouter
目录
- 1. 概述
- 2. PDU Router架构
- 3. PDU Router数据流
- 4. PDU Router接口
- 5. PDU Router路由路径
- 6. PDU Router网关功能
- 7. PDU Router状态机
- 8. 总结
1. 概述
AUTOSAR PDU Router (PDU路由器) 是AUTOSAR通信栈中的核心组件,负责在不同通信模块之间路由协议数据单元(PDU)。它作为通信服务层和通信硬件抽象层之间的中间件,提供了灵活的路由机制,使得上层应用可以与底层通信协议解耦。
PDU Router支持以下主要功能:
- PDU路由:在不同通信接口之间路由PDU
- 多种路由配置:支持1:1、1:N和N:1的路由配置
- 传输协议支持:支持直接PDU路由和传输协议(TP)PDU路由
- 动态路由控制:提供PDU路由的启用和禁用功能
- 配置灵活性:支持PDU路由路径的动态配置
2. PDU Router架构
2.1. 架构总览
PDU Router在AUTOSAR通信栈中处于中间层位置,连接上层通信服务和下层通信硬件抽象层。下图展示了PDU Router的整体架构及其与其他模块的关系。
2.2. 组件层次结构
PDU Router架构图展示了AUTOSAR通信栈的分层结构,主要包含以下几个层次:
-
通信服务层:
- COM:负责应用层数据的打包和解包
- DCM:诊断通信管理器,处理诊断相关的通信
- IPDU多路复用器:管理多个PDU的复用和分离
- DLT:诊断日志和跟踪,用于调试和监控
-
PDU Router层:
- PDU Router引擎:执行路由操作的核心代码,将源I-PDU ID转换为目标ID,并根据路由路径路由I-PDU
- PDU Router路由路径:静态路由路径描述每个I-PDU的路由属性,可以通过后期构建加载或初始化时选择
-
通信硬件抽象层:
- 通信接口模块:包括FlexRay接口、CAN接口和LIN接口
- 传输协议模块:包括FlexRay TP和CAN TP
-
底层组件:
- 模块状态管理器:管理通信模块的状态
- 模块传输协议:实现底层传输协议
- 模块接口:提供与硬件交互的接口
- 模块驱动:直接控制硬件
- 收发器驱动:控制通信收发器
2.3. 数据流向
架构图中的箭头表示数据流向,主要包括:
-
上层到PDU Router的数据流:
- COM、DCM、IPDU多路复用器和DLT向PDU Router发送I-PDU
-
PDU Router到下层的数据流:
- PDU Router向FlexRay接口、CAN接口、LIN接口、FlexRay TP和CAN TP发送I-PDU
-
通信接口到底层组件的数据流:
- 通信接口模块与模块状态管理器和模块接口交互
- 传输协议模块与模块传输协议交互
-
传输协议模块到通信接口的数据流:
- CAN TP向CAN接口发送N-PDU
- FlexRay TP向FlexRay接口发送N-PDU
3. PDU Router数据流
3.1. 基本数据流程
PDU Router处理多种数据流场景,包括直接I-PDU传输和TP I-PDU传输。下图展示了这些数据流的序列。
3.2. I-PDU传输流程
I-PDU传输流程主要包括两个方向:
-
I-PDU传输 (COM到CanIf):
- COM调用
PduR_ComIfTransmit
发送I-PDU - PDU Router查找路由路径
- 如果找到路由路径,PDU Router调用
CanIf_Transmit
发送I-PDU - CanIf完成传输后,通过
PduR_CanIfTxConfirmation
通知PDU Router - PDU Router调用
Com_TxConfirmation
通知COM传输完成
- COM调用
-
I-PDU接收 (CanIf到COM):
- CanIf通过
PduR_CanIfRxIndication
通知PDU Router接收到I-PDU - PDU Router查找路由路径
- 如果找到路由路径,PDU Router调用
Com_RxIndication
将I-PDU传递给COM
- CanIf通过
3.3. TP I-PDU传输流程
TP I-PDU传输流程更为复杂,涉及分段传输和缓冲区管理:
-
TP I-PDU传输 (DCM到CanTp):
- DCM调用
PduR_DcmTpTransmit
发送TP I-PDU - PDU Router查找路由路径
- 如果找到路由路径,PDU Router调用
CanTp_Transmit
发送TP I-PDU - CanTp通过
PduR_CanTpCopyTxData
从PDU Router获取数据 - PDU Router调用
Dcm_CopyTxData
从DCM获取数据 - 传输完成后,CanTp通过
PduR_CanTpTxConfirmation
通知PDU Router - PDU Router调用
Dcm_TxConfirmation
通知DCM传输完成
- DCM调用
-
TP I-PDU接收 (CanTp到DCM):
- CanTp通过
PduR_CanTpStartOfReception
通知PDU Router开始接收TP I-PDU - PDU Router查找路由路径
- 如果找到路由路径,PDU Router调用
Dcm_StartOfReception
通知DCM - CanTp通过
PduR_CanTpCopyRxData
向PDU Router传递数据 - PDU Router调用
Dcm_CopyRxData
向DCM传递数据 - 接收完成后,CanTp通过
PduR_CanTpRxIndication
通知PDU Router - PDU Router调用
Dcm_RxIndication
通知DCM接收完成
- CanTp通过
4. PDU Router接口
4.1. 接口模型
PDU Router提供了多种接口,用于与上层和下层模块交互。下图展示了PDU Router的接口模型。
4.2. 上层接口
PDU Router提供以下上层接口:
-
PduR_If:上层通信接口API
PduR_<Up>IfTransmit
:上层模块调用此函数发送I-PDUPduR_<Up>IfCancelTransmit
:上层模块调用此函数取消I-PDU传输
-
PduR_Tp:上层传输协议API
PduR_<Up>TpTransmit
:上层模块调用此函数发送TP I-PDUPduR_<Up>TpCancelTransmit
:上层模块调用此函数取消TP I-PDU传输
-
PduR_If:下层通信接口回调API
PduR_<Lo>IfRxIndication
:下层模块调用此函数指示接收到I-PDUPduR_<Lo>IfTxConfirmation
:下层模块调用此函数确认I-PDU传输完成PduR_<Lo>TriggerTransmit
:下层模块调用此函数触发I-PDU传输
-
PduR_Tp:下层传输协议回调API
PduR_<Lo>TpRxIndication
:下层模块调用此函数指示接收到TP I-PDUPduR_<Lo>TpTxConfirmation
:下层模块调用此函数确认TP I-PDU传输完成PduR_<Lo>TpStartOfReception
:下层模块调用此函数指示开始接收TP I-PDUPduR_<Lo>TpCopyRxData
:下层模块调用此函数复制接收到的TP I-PDU数据PduR_<Lo>TpCopyTxData
:下层模块调用此函数获取要发送的TP I-PDU数据
4.3. 下层接口
PDU Router调用以下下层接口:
- _Transmit:目标下层模块的传输函数
- _CancelTransmit:目标下层模块的取消传输函数
- _RxIndication:目标上层模块的接收指示函数
- _TxConfirmation:目标上层模块的传输确认函数
- _TriggerTransmit:目标上层模块的触发传输函数
- _RxIndication:目标上层TP模块的接收指示函数
- _TxConfirmation:目标上层TP模块的传输确认函数
- _StartOfReception:目标上层TP模块的开始接收函数
- _CopyRxData:目标上层TP模块的复制接收数据函数
- _CopyTxData:目标下层TP模块的复制发送数据函数
4.4. 通用接口
PDU Router还提供以下通用接口:
- PduR_Init:初始化PDU Router
- PduR_GetVersionInfo:获取PDU Router的版本信息
- PduR_DisableRouting:禁用特定路由路径组
- PduR_EnableRouting:启用特定路由路径组
5. PDU Router路由路径
5.1. 路由路径模型
PDU Router的路由路径定义了I-PDU从源到目标的路由方式。下图展示了PDU Router的路由路径模型。
5.2. 路由配置
PDU Router的路由配置包括以下主要组件:
-
PduR:PDU Router的主要配置结构
- 包含PduRGeneral、PduRBswModules和PduRRoutingPathGroups
-
PduRGeneral:PDU Router的通用配置
- PduRDevErrorDetect:是否启用开发错误检测
- PduRZeroCostOperation:是否启用零成本操作
- PduRVersionInfoApi:是否启用版本信息API
-
PduRBswModules:PDU Router支持的基础软件模块
- PduRCommunicationInterface:通信接口模块
- PduRTransportProtocol:传输协议模块
- PduRUpperLayer:上层模块
-
PduRRoutingPathGroup:路由路径组
- 包含多个PduRRoutingPath
-
PduRRoutingPath:路由路径
- PduRSrcPdu:源PDU
- PduRDestPdu:目标PDU(可以有多个,支持多播)
-
PduRSrcPdu:源PDU配置
- PduRSourcePduHandleId:源PDU句柄ID
- PduRSrcPduRef:源PDU引用
-
PduRDestPdu:目标PDU配置
- PduRDestPduHandleId:目标PDU句柄ID
- PduRDestPduRef:目标PDU引用
- PduRTransmissionConfirmation:是否需要传输确认
PDU Router支持以下路由类型:
- 单播 (1:1):一个源PDU路由到一个目标PDU
- 多播 (1:n):一个源PDU路由到多个目标PDU
- 网关 (n:1):多个源PDU路由到一个目标PDU
6. PDU Router网关功能
6.1. 网关类型
PDU Router提供了强大的网关功能,支持不同通信模块之间的数据转发。下图展示了PDU Router的网关功能。
6.2. 通信接口模块间网关
PDU Router支持以下通信接口模块间网关:
-
CanIf1到CanIf2网关:
- CanIf1通过
PduR_CanIfRxIndication
通知PDU Router接收到I-PDU - PDU Router查找路由路径
- 如果找到网关路由路径,PDU Router调用
CanIf_Transmit
将I-PDU发送到CanIf2 - CanIf2完成传输后,通过
PduR_CanIfTxConfirmation
通知PDU Router
- CanIf1通过
-
CanIf到FrIf网关:
- CanIf通过
PduR_CanIfRxIndication
通知PDU Router接收到I-PDU - PDU Router查找路由路径
- 如果找到网关路由路径,PDU Router调用
FrIf_Transmit
将I-PDU发送到FrIf - FrIf完成传输后,通过
PduR_FrIfTxConfirmation
通知PDU Router
- CanIf通过
-
多播网关 (CanIf到CanIf2和COM):
- CanIf通过
PduR_CanIfRxIndication
通知PDU Router接收到I-PDU - PDU Router查找路由路径
- 如果找到多播网关路由路径,PDU Router调用
CanIf_Transmit
将I-PDU发送到CanIf2,并调用Com_RxIndication
将I-PDU传递给COM - CanIf2完成传输后,通过
PduR_CanIfTxConfirmation
通知PDU Router
- CanIf通过
6.3. TP模块间网关
PDU Router还支持以下TP模块间网关:
-
CanTp1到CanTp2网关:
- CanTp1通过
PduR_CanTpStartOfReception
通知PDU Router开始接收TP I-PDU - PDU Router分配缓冲区
- CanTp1通过
PduR_CanTpCopyRxData
向PDU Router传递数据 - PDU Router将数据存储到缓冲区
- 接收完成后,CanTp1通过
PduR_CanTpRxIndication
通知PDU Router - PDU Router调用
CanTp_Transmit
将TP I-PDU发送到CanTp2 - CanTp2通过
PduR_CanTpCopyTxData
从PDU Router获取数据 - PDU Router从缓冲区获取数据
- 传输完成后,CanTp2通过
PduR_CanTpTxConfirmation
通知PDU Router - PDU Router释放缓冲区
- CanTp1通过
-
TP多播网关 (CanTp1到DCM和CanTp2):
- CanTp1通过
PduR_CanTpStartOfReception
通知PDU Router开始接收TP I-PDU - PDU Router调用
Dcm_StartOfReception
通知DCM,并为CanTp2分配缓冲区 - CanTp1通过
PduR_CanTpCopyRxData
向PDU Router传递数据 - PDU Router调用
Dcm_CopyRxData
向DCM传递数据,并将数据存储到缓冲区 - 接收完成后,CanTp1通过
PduR_CanTpRxIndication
通知PDU Router - PDU Router调用
Dcm_RxIndication
通知DCM,并调用CanTp_Transmit
将TP I-PDU发送到CanTp2 - CanTp2通过
PduR_CanTpCopyTxData
从PDU Router获取数据 - PDU Router从缓冲区获取数据
- 传输完成后,CanTp2通过
PduR_CanTpTxConfirmation
通知PDU Router - PDU Router释放缓冲区
- CanTp1通过
7. PDU Router状态机
7.1. 状态转换
PDU Router的状态机定义了模块的不同状态及其转换。下图展示了PDU Router的状态机。
7.2. 运行状态
PDU Router的状态机包括以下主要状态:
-
未初始化状态:
- 模块尚未初始化
- 所有API调用将返回错误
- 通过调用
PduR_Init
进入初始化状态
-
初始化状态:
- 加载配置数据
- 初始化路由表和缓冲区
- 准备路由功能
- 初始化完成后进入运行状态
-
运行状态:
- 空闲:等待I-PDU路由请求
- 处理请求:处理I-PDU路由请求
- 路由禁用:特定路由路径组被禁用
- 可以通过
PduR_DisableRouting
禁用特定路由路径组 - 可以通过
PduR_EnableRouting
启用特定路由路径组
8. 总结
AUTOSAR PDU Router是AUTOSAR通信栈中的核心组件,提供了灵活的PDU路由机制,使得上层应用可以与底层通信协议解耦。它支持多种路由配置和网关功能,为汽车电子系统提供了强大的通信能力。
PDU Router的主要优势包括:
- 灵活的路由配置:支持1:1、1:N和N:1的路由配置
- 多种网关功能:支持通信接口模块间网关和TP模块间网关
- 动态路由控制:提供PDU路由的启用和禁用功能
- 标准化接口:提供标准化的接口,便于与其他AUTOSAR模块集成
通过PDU Router,汽车电子系统可以实现灵活、高效的通信,满足现代汽车电子系统的复杂需求。