01.CP 与 PDU Router
PDU(Protocol Data Unit)是 AutoSAR 通信模型中的一个核心概念,它是在通信网络中传输的数据单元。PDU 负责封装和传递应用层数据,使得不同的模块和设备能够互相交换信息。PDU 可以包含各种类型的数据,如信号、报文、消息等。
根据功能和通信模式的不同,PDU 可以分为以下几种类型:
I-PDU(Interaction Layer Protocol Data Unit):交互层数据单元,用于在不同模块之间传递数据。
N-PDU(Network Protocol Data Unit):用于网络层协议之间的数据传输,包括网络管理、路由和转发等功能。
此外,在 CAN 网络中,PDU 还可以根据其在不同层次的作用被分为 L-PDU(数据链路层 PDU)、N-PDU(网络层 PDU)和 I-PDU(交互层 PDU)。其中,L-PDU 包含 SDU(Service Data Unit,服务数据单元)和 PCI(Protocol Control Information,协议控制信息)。SDU 是由上层传递的数据,带有传输数据的请求;PCI 是将 SDU 从特定协议层的一个实例传递到另一个实例时所需的信息,它包含源和目标信息等。
那什么是 PduR(PDU Router)呢?PduR 是将 I-PDU 从一个模块传输到另一个模块的模块。PduR 模块可用于网关操作和内部路由。
02.功能架构
PduR 模块根据不同的模块类型,使用不同的通信 API 来提供路由 I-PDU 的服务:
- 使用或 API 的通信接口模块,例如 Com、IPduM、LinIf、CanIf、CanNm、FrIf 和 FrNm;
- 使用< Provider:UpTp>或< Provider:LoTp>API 的传输协议模块,例如 J1939Tp、LinTp(LinIf 的一部分)、CanTp、FrTp、Com、Dcm。
在 AUTOSAR 系统中,每个 I-PDU 都有一个唯一的标识符,并且这个 I-PDU 的路由信息(即它应该被发送到哪个 ECU 或哪个接口)在系统设计和配置阶段就已经被静态定义好了。在运行时,这些路由信息是不会改变的,也就是说,I-PDU 的传输路径是固定的,没有动态路由的可能性。这种设计保证了 AUTOSAR 系统的稳定性和可预测性。
相关模块的位置可以是“upper”(例如 Dlt、Dcm、Com、IpduM)或者“lower”(CanIf、FrIf、LinTp、IpduM、CanNm、FrNm)。请注意,IpduM 被列为 upper& lower 模块,因为它有两个不同的角色(下层:Com 模块和 IpduM 模块之间的通信,上层:IpduM 模块和下层通信接口模块之间的通信)。
接口的模块在 PduR 模块配置中配置。上一段括号中列出的模块只是示例,不是详尽的列举。PduR 可以进行配置以支持其他上层和下层模块。这种方法还允许将复杂设备驱动程序(CDD)集成 PduR 的上层或下层模块。
PduR 模块的用户列表不固定。下面列出了最常见的上层和下层组合:
- 诊断通信管理器(DCM)和传输协议(TP)模块
- Com 和通信接口(Communication Interface)模块、传输协议(TP)模块或 IPDU 多路复用器(I-PDU Multiplexer)
- PDU 多路复用器(I-PDU Multiplexer)和通信接口(Communication Interface)模块
I-PDU 通信示例
架构
PDU 路由器模块是 AUTOSAR 通信结构中的一个中心模块;
通信结构
03.功能概览
PduR 模块是 AUTOSAR Basic 软件的一部分,在每个 AUTOSAR ECU 中都必须实例化。
详细的 PduR 模块结构如下:
PduR 模块结构
PDU Router 模块主要由两部分组成:
1. PDU Router routing paths
- 静态路由路径:这些是在系统设计阶段就已经定义好的路由信息,它们描述了每个 I-PDU 应该被如何路由,即它们应该通过哪些路径从一个 ECU 传输到另一个 ECU。这些路由路径是固定的,并且在系统运行时不会改变,这确保了数据传输的可预测性和稳定性。
- 路由属性的描述:每个路由路径都会包含一些路由属性,这些属性定义了路由的具体细节,比如目标 ECU 的标识符、传输协议、通信接口等。
- 路由路径的更新:虽然路由路径通常是静态定义的,但在某些 AUTOSAR 实现中,这些路径可能支持在 ECU 的编程状态中被更新。这意味着在 ECU 的软件被加载或初始化时,可以通过构建后的配置来更新路由路径。然而,这种更新通常是在系统启动或配置阶段进行的,而不是在运行时动态进行的。
2. PDU Router Engine
- 执行路由动作的实际代码:PDU Router Engine 是负责根据 PDU Router 路由路径执行实际路由动作的软件组件。它接收来自不同 ECU 或通信接口的 I-PDU,然后根据预先定义的路由路径将它们发送到正确的目标 ECU 或接口。
- 处理的任务:
- 解析路由路径:PDU Router Engine 需要能够解析存储在路由路径中的信息,以确定每个 I-PDU 的目标位置。
- 数据传输:根据解析后的路由路径,PDU Router Engine 负责将 I-PDU 从源 ECU 传输到目标 ECU。这可能涉及到使用不同的通信协议和接口。(例如 PduR_Com 传输到 CanIf_Transmit,PduR_CanIfTxConfirmation 传输到 Com_ TxConfirmation)
- 错误处理:在数据传输过程中,PDU Router Engine 还需要能够处理可能出现的错误情况,比如通信失败、数据丢失等。
04.PduR 对 I-PDU 的转发和网关路由
在 AUTOSAR 中,每个 I-PDU 都有一个独特的静态 ID,这个 ID 就像 I-PDU 的“身份证”,用来区分不同的数据单元。
当 I-PDU 需要在不同的模块之间传递时,它会遇到 PduR 模块。它通过一个预先设定好的静态配置表,来查看 I-PDU 的 ID,并决定 I-PDU 应该前往哪个目的地。
I-PDU 经常用于 PduR 模块上方的模块之间的数据交换,比如通信模块(Com 模块)和诊断通信模块(Dcm 模块)就需要通过 I-PDU 来传递信息。
PDU 路由器模块在“指路”的过程中,并不会对 I-PDU 的内容进行任何修改,它只是一个“传话筒”,负责把 I-PDU 准确无误地送到目标模块手中。
不过,在一种特殊的情况——TP(传输协议)网关下,PDU 路由器模块可能会在收到完整的 I-PDU 之前就开始转发,这种方式被称为“动态网关”。这就像是在高速公路上,车辆(I-PDU)还在收费站外排队等待完全进入时,就已经有引导车(PduR 模块)在前方为其指引方向了。
而 I-PDU 的这个“身份证”——ID,是在实现相应 API 的配置时就已经设定好的。这样,每个需要接收 I-PDU 的模块都可以通过查找表来快速找到对应的 I-PDU。比如,PDU 路由器模块的配置里会有指向 CanIf(CAN 接口)模块传输确认的 I-PDU ID,而 CanIf 模块的配置里也会有指向其传输功能的 I-PDU ID。
以下列表总结了 PduR 的路由功能:
1. I-PDU 转发
1)从上层传输,指的是从上层本地模块传输 I-PDU 到下层模块的过程。
通信接口模块(If)(参考下图中的过程 1)
I-PDU 通信接口转发中,Singlecast(1:1)是一种基本的传输模式,它指的是将一个 I-PDU(单帧或者多帧都可)从一个本地模块直接传输到一个通信接口模块的过程。也支持组播,Multicast (1:n) 指的是将一个 I-PDU 从一个本地模块直接传输到多个通信接口模块的过程。
传输协议模块(Tp)(参考下图中的过程 2)
I-PDU 传输协议从上层转发中,Singlecast(1:1)是一种基本的传输模式,它指的是将一个 I-PDU(单帧或者多帧都可)从一个本地模块直接传输到一个传输协议模块的过程。也支持组播,Multicast (1:n) 指的是将一个 I-PDU 从一个本地模块直接传输到多个通信接口模块的过程。
I-PDU 转发-从本地模块对外传输路径示意
2)对上层响应,指的是 I-PDU 从通信接口模块/传输协议模块接收后,被转发到上层(或本地)模块的过程
- 通信接口模块(If)(参考下图中的过程 3)
I-PDU 可以通过单播(Singlecast)或者组播 Multicast 方式,从一个通信接口模块(比如 LIN、CAN、FlexRay 等通信控制器)传输到一个或者多个本地模块(通常是应用层或某个特定的软件组件);
当多个通信接口模块需要将数据发送到同一个本地模块时,就会采用 Fan-in (n:1)的通信模式。指的是多个发送方(n 个通信接口模块)将 I-PDU 发送到同一个接收方(一个本地模块)的过程。这种通信模式允许数据从多个来源汇聚到一个中心节点,便于集中处理。
- 传输协议模块(Tp)(参考下图中的过程 4)
I-PDU 传输协议对上层转发中,Singlecast(1:1)是一种基本的传输模式,它指的是将一个 I-PDU(单帧或者多帧都可)从一个传输协议模块直接传输到一个本地模块的过程。也支持组播,Multicast (1:n) 指的是将一个 I-PDU 从一个本地模块直接传输到多个通信接口模块的过程。
I-PDU 转发-从下层 If/Tp 模块对本地模块传输路径示意
2. I-PDU Gateway 路由
- 通信接口模块(If)(参考下图中的过程 5、6)
将 I-PDU 从一个通信接口模块(如 CAN If 或 LIN If)路由到另一个(或者多个)通信接口模块(如 FlexRay If 或以太网 If)的机制,其中这种路由是 1:1(或者 1:n)的,即一个输入 I-PDU 对应一个(或者多个)输出 I-PDU。在这个过程中,可以使用不同的缓冲策略,包括 last-is-best buffer(最新优先缓冲)、FIFO buffer(先进先出缓冲)或无缓冲;
也能够将来自多个(n 个)通信接口模块的 I-PDU(输入 PDU)路由到一个(1 个)通信接口模块的功能,不过,在一个给定的时间点,只有一个源(即一个通信接口模块)应该被允许发送 I-PDU 到 IPDU Gateway 的特定输出。这是为了确保数据的一致性和避免冲突。
I-PDU 网关路由-If 之间
- 传输协议模块(Tp)(参考下图中的过程 7、8)
在传输协议模块中,存在不同类型的网关用于在传输协议模块之间传递中间协议数据单元(I-PDU)。具体包括:(1:1)网关,它使用缓冲区将一个传输协议模块的 I-PDU 传递给另一个传输协议模块;(1:n)网关,它使用缓冲区将一个传输协议模块的 I-PDU 传递给多个传输协议模块;(n:1)网关,它使用缓冲区将来自多个传输协议模块的 I-PDU 传递给一个传输协议模块,但一次只允许一个源启用。
I-PDU 网关路由-Tp 之间
3. I-PDU 的转发与网关混合
- 通信接口模块(If)(参考下图中的过程 9、a、b)
来自 If 模块的 I-PDU 可能会被一个或多个上层模块接收,同时使用 last-is-best buffer/FIFO/no buffer 模式被网关连接到一个或多个通信接口模块。
对 If 模块的 I-PDU 的网关路由与转发
- 传输协议模块(Tp)(参考下图中的过程 c、d、e)
来自 Tp 模块的 I-PDU(仅单帧)可能会被一个或多个上层模块接收,同时使用 buffer 被网关连接到一个或更多个下层传输协议模块。
对 Tp 模块的 I-PDU 的网关路由与转发
05.小 结
AUTOSAR 的 PduR 模块通过接收、查找路由表、转发 I-PDU 以及处理传输请求等步骤,实现了在 AUTOSAR 系统中对 I-PDU 的有效处理,确保了不同软件组件之间能够高效、可靠地进行数据通信。通过 PduR,AUTOSAR 系统能够实现复杂的网络通信需求,支持汽车内部各种电子控制单元之间的协同工作。
END
作者:不可说
来源:汽车电子与软件
推荐阅读:
更多汽车电子干货请关注汽车电子与软件专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。)