图解AUTOSAR_CP_PDURouter

图解AUTOSAR_CP_PDURouter

基于AUTOSAR标准的PDU Router模块深度解析

目录


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通信栈的分层结构,主要包含以下几个层次:

  1. 通信服务层

    • COM:负责应用层数据的打包和解包
    • DCM:诊断通信管理器,处理诊断相关的通信
    • IPDU多路复用器:管理多个PDU的复用和分离
    • DLT:诊断日志和跟踪,用于调试和监控
  2. PDU Router层

    • PDU Router引擎:执行路由操作的核心代码,将源I-PDU ID转换为目标ID,并根据路由路径路由I-PDU
    • PDU Router路由路径:静态路由路径描述每个I-PDU的路由属性,可以通过后期构建加载或初始化时选择
  3. 通信硬件抽象层

    • 通信接口模块:包括FlexRay接口、CAN接口和LIN接口
    • 传输协议模块:包括FlexRay TP和CAN TP
  4. 底层组件

    • 模块状态管理器:管理通信模块的状态
    • 模块传输协议:实现底层传输协议
    • 模块接口:提供与硬件交互的接口
    • 模块驱动:直接控制硬件
    • 收发器驱动:控制通信收发器

2.3. 数据流向

架构图中的箭头表示数据流向,主要包括:

  1. 上层到PDU Router的数据流

    • COM、DCM、IPDU多路复用器和DLT向PDU Router发送I-PDU
  2. PDU Router到下层的数据流

    • PDU Router向FlexRay接口、CAN接口、LIN接口、FlexRay TP和CAN TP发送I-PDU
  3. 通信接口到底层组件的数据流

    • 通信接口模块与模块状态管理器和模块接口交互
    • 传输协议模块与模块传输协议交互
  4. 传输协议模块到通信接口的数据流

    • 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传输流程主要包括两个方向:

  1. 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传输完成
  2. I-PDU接收 (CanIf到COM)

    • CanIf通过PduR_CanIfRxIndication通知PDU Router接收到I-PDU
    • PDU Router查找路由路径
    • 如果找到路由路径,PDU Router调用Com_RxIndication将I-PDU传递给COM

3.3. TP I-PDU传输流程

TP I-PDU传输流程更为复杂,涉及分段传输和缓冲区管理:

  1. 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传输完成
  2. 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接收完成

4. PDU Router接口

4.1. 接口模型

PDU Router提供了多种接口,用于与上层和下层模块交互。下图展示了PDU Router的接口模型。
在这里插入图片描述

4.2. 上层接口

PDU Router提供以下上层接口:

  1. PduR_If:上层通信接口API

    • PduR_<Up>IfTransmit:上层模块调用此函数发送I-PDU
    • PduR_<Up>IfCancelTransmit:上层模块调用此函数取消I-PDU传输
  2. PduR_Tp:上层传输协议API

    • PduR_<Up>TpTransmit:上层模块调用此函数发送TP I-PDU
    • PduR_<Up>TpCancelTransmit:上层模块调用此函数取消TP I-PDU传输
  3. PduR_If:下层通信接口回调API

    • PduR_<Lo>IfRxIndication:下层模块调用此函数指示接收到I-PDU
    • PduR_<Lo>IfTxConfirmation:下层模块调用此函数确认I-PDU传输完成
    • PduR_<Lo>TriggerTransmit:下层模块调用此函数触发I-PDU传输
  4. PduR_Tp:下层传输协议回调API

    • PduR_<Lo>TpRxIndication:下层模块调用此函数指示接收到TP I-PDU
    • PduR_<Lo>TpTxConfirmation:下层模块调用此函数确认TP I-PDU传输完成
    • PduR_<Lo>TpStartOfReception:下层模块调用此函数指示开始接收TP I-PDU
    • PduR_<Lo>TpCopyRxData:下层模块调用此函数复制接收到的TP I-PDU数据
    • PduR_<Lo>TpCopyTxData:下层模块调用此函数获取要发送的TP I-PDU数据

4.3. 下层接口

PDU Router调用以下下层接口:

  1. _Transmit:目标下层模块的传输函数
  2. _CancelTransmit:目标下层模块的取消传输函数
  3. _RxIndication:目标上层模块的接收指示函数
  4. _TxConfirmation:目标上层模块的传输确认函数
  5. _TriggerTransmit:目标上层模块的触发传输函数
  6. _RxIndication:目标上层TP模块的接收指示函数
  7. _TxConfirmation:目标上层TP模块的传输确认函数
  8. _StartOfReception:目标上层TP模块的开始接收函数
  9. _CopyRxData:目标上层TP模块的复制接收数据函数
  10. _CopyTxData:目标下层TP模块的复制发送数据函数

4.4. 通用接口

PDU Router还提供以下通用接口:

  1. PduR_Init:初始化PDU Router
  2. PduR_GetVersionInfo:获取PDU Router的版本信息
  3. PduR_DisableRouting:禁用特定路由路径组
  4. PduR_EnableRouting:启用特定路由路径组

5. PDU Router路由路径

5.1. 路由路径模型

PDU Router的路由路径定义了I-PDU从源到目标的路由方式。下图展示了PDU Router的路由路径模型。
在这里插入图片描述

5.2. 路由配置

PDU Router的路由配置包括以下主要组件:

  1. PduR:PDU Router的主要配置结构

    • 包含PduRGeneral、PduRBswModules和PduRRoutingPathGroups
  2. PduRGeneral:PDU Router的通用配置

    • PduRDevErrorDetect:是否启用开发错误检测
    • PduRZeroCostOperation:是否启用零成本操作
    • PduRVersionInfoApi:是否启用版本信息API
  3. PduRBswModules:PDU Router支持的基础软件模块

    • PduRCommunicationInterface:通信接口模块
    • PduRTransportProtocol:传输协议模块
    • PduRUpperLayer:上层模块
  4. PduRRoutingPathGroup:路由路径组

    • 包含多个PduRRoutingPath
  5. PduRRoutingPath:路由路径

    • PduRSrcPdu:源PDU
    • PduRDestPdu:目标PDU(可以有多个,支持多播)
  6. PduRSrcPdu:源PDU配置

    • PduRSourcePduHandleId:源PDU句柄ID
    • PduRSrcPduRef:源PDU引用
  7. 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支持以下通信接口模块间网关:

  1. CanIf1到CanIf2网关

    • CanIf1通过PduR_CanIfRxIndication通知PDU Router接收到I-PDU
    • PDU Router查找路由路径
    • 如果找到网关路由路径,PDU Router调用CanIf_Transmit将I-PDU发送到CanIf2
    • CanIf2完成传输后,通过PduR_CanIfTxConfirmation通知PDU Router
  2. CanIf到FrIf网关

    • CanIf通过PduR_CanIfRxIndication通知PDU Router接收到I-PDU
    • PDU Router查找路由路径
    • 如果找到网关路由路径,PDU Router调用FrIf_Transmit将I-PDU发送到FrIf
    • FrIf完成传输后,通过PduR_FrIfTxConfirmation通知PDU Router
  3. 多播网关 (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

6.3. TP模块间网关

PDU Router还支持以下TP模块间网关:

  1. 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释放缓冲区
  2. 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释放缓冲区

7. PDU Router状态机

7.1. 状态转换

PDU Router的状态机定义了模块的不同状态及其转换。下图展示了PDU Router的状态机。
在这里插入图片描述

7.2. 运行状态

PDU Router的状态机包括以下主要状态:

  1. 未初始化状态

    • 模块尚未初始化
    • 所有API调用将返回错误
    • 通过调用PduR_Init进入初始化状态
  2. 初始化状态

    • 加载配置数据
    • 初始化路由表和缓冲区
    • 准备路由功能
    • 初始化完成后进入运行状态
  3. 运行状态

    • 空闲:等待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,汽车电子系统可以实现灵活、高效的通信,满足现代汽车电子系统的复杂需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KaiGer666

慧眼~施主!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值