【小猫爪】AUTOSAR学习笔记07-Communication Stack之PduR,IpduM模块
创始人
2025-05-31 02:33:34
0

【小猫爪】AUTOSAR学习笔记07-Communication Stack之PduR,IpduM模块

  • 前言
  • 1 PduR简介
  • 2 PduR功能介绍
    • 2.1 I-PDU的传输
    • 2.2 路由路径
    • 2.3 Zero Cost Operation
  • 3 IpduM模块简介
    • 1 I-PDU Multiplexing
    • 2 Multiple PDU to Container Mapping
  • END

前言

  因为一个偶然的机会让我接触到了AUTOSAR,所以就花一点小小的时间来记录一下学习它的坎坷大道。这其中复制粘贴了很多,也包括了我的一些个人的小小见解和废话连篇,不爱看忽略即可,这其中如果有什么错误,欢迎大家来指正哦,嘿嘿。AUTOSAR参考版本:4.3.1

  前面对Communication Stack的通信管理理部分介绍清楚了,接下来就来看看Communication Stack中负责通信数据的部分了,第一就不得不说一个最核心的模块,那就是负责消息分发的PduR模块。

1 PduR简介

  首先介绍一个在Communication Stack中出现频率很高的词I-PDU, 全称为Interaction Layer Protocol Data Unit, 意思就是交互PDU,可以理解成是软件协议层面上的一个完整性消息。

  PduR即为PDU Router,看一看它在Communication Stack架构中的位置:
在这里插入图片描述
  PduR 模块位于 AUTOSAR 的通信服务的核心位置, 作为上层模块与下层接口模块或传输层模块传输 I-PDU 的桥梁。说的简单一点就是个内部消息路由器,当PduR 收到底层传输层或者interface抽象层传输的 I-PDU后,将其传输到对应的服务模块,而上层服务模块需要发送 I-PDU时,PduR模块则会将消息传输到相应的传输层或者interface抽象层。

  通信模块根据其在 AUTOSAR 架构中的位置和传输 I-PDU时的角色,可以分为三类:上层模块、下层接口模块和下层传输层模块。
  上层模块位于 PduR 上层,一般包括 Com、 Dcm 和 Cdd。
  下层接口模块位于 PduR 下层,一般包括 CanIf、 LinIf、 SoAdIf、 FrIf、 CddIf 等。
  下层传输层模块同样位于 PduR 下层,一般包括 CanTp、 LinTp、 SoAdTp、 DoIPTp、FrTp 和 CddTp 等。
  而PduR模块则是连接这些模块的枢纽,位于上层模块和下层模块之间,充当一个终极消息中转站。

2 PduR功能介绍

  如下图所示:
在这里插入图片描述
  PduR模块主要包含两部分,分别是路由表和路由引擎,其中路由表非常好理解,就是它会给上层服务的所有 I-PDU编号,静态确定消息路径,里面会包含各种总线特征,比如CAN ID,这样PduR模块就可以根据路由表来进行消息路由,路由引擎则就是用来传输消息的搬运工,负责把 I-PDU从源方路由到目标方。

  PduR 模块主要功能如下:
  1. 初始化
  2. 接收下层模块(接口模块、传输层模块) I-PDU并传递给上层模块
  3. 发送上层模块 I-PDU到低层模块
  4. 接收接口层 I-PDU并传递给其他接口层模块
  5. 接收传输层 I-PDU并传递给其他传输层模块

2.1 I-PDU的传输

  下面举一个最简单的例子,如果PduR的下层模块为接口模块,以CAN为例子,那下层接口模块即为CanIf模块。如果Com模块需要通过CAN总线发送一条消息,那么这条消息的流向应该如下:

在这里插入图片描述
  Com调用PduR_ComTransmit发起消息发送, PduR模块接收到消息查表后确认消息目的方为CAN,然后调用CanIf_Transmit触发CAN消息的发送,消息发送成功后,最终由CanIf模块传来发送确认。

  当PduR的下层模块为传输层模块的时候,则当传输层接收到 FF 或 SF 时,传输层将调用 PduR_StartOfReception 通知 PduR模块接收开始, PduR 模块通过调用_StartOfReception 传递给相应的上层模块,例如StartOfIReception。传输层通过调用函数 PduR_CopyRxData 将数据传递给 PduR, PduR 模块通过调用CopyRxData 将数据传递给上层模块。当接收完成时传输层模块将调用 PduRRxIndication 通知 PduR 模块, PduR 将此指示传递给上层模块通过_TpRxIndication 函数。

2.2 路由路径

  PduR 通过路由路径实现路由。一个路由路径由一个源 Id 和一个(或多个)目的 Id组成。当路由路径只包含一个目的 Id 时,称为单播,当路由路径包含多个目的 Id 时,称为多播。路由路径全部静态配置,不支持动态路由。

  某个路由路径的目的可能同时包含多个接口,如 CanIf 接口和 LinIf 接口,为了能够支持整体关闭某种接口, PduR 具有路由路径组的概念。一个路由路径组包含多个目的 Id,它们可以属于同一个路由路径,也可以属于不同路由路径。反过来一个路由路径的不同目的 Id 可以属于不同的路由路径组。

  路由路径组也是静态配置的。路由路径组可以单独使能或关闭。每个路由路径组的初始状态由配置决定。 PduR 提供了两个接口函数来动态使能或关闭某个路由路径组,分别为 PduR_EnableRouting()和PduR_DisableRouting(),它们主要由 BswM 模块调用。

2.3 Zero Cost Operation

  Zero Cost Operation是指当 PduR 只充当简单的路由功能时,为了优化性能而将各主要函数实现为宏的形式。该功能通过配置项 ZeroCostOperation 使能。要使用该功能,必须同时满足如下条件:
1)用户配置的 PduRRoutingTable 路径中仅包含 Com-CanIf, CanIf-Com, Dcm-CanTp,CanTp-Dcm , CanNm-Com , Com-CanNm时;
2) PduRGeneral 里 PduRVersionInfoApi 为 FALSE 时;
3)不包含 Routing Group 时。

3 IpduM模块简介

  仔细看上面的结构图,可以看到在PduR的旁边有一个IpduM(Interaction PDU multiplexer)模块,该模块看上去比较独立,它在AUTOSAR架构中,只和PduR模块和Com模块有交互。PDU多路复用即PDU的PCI相同而SDU布局不同,简单的来说就是使用相同的 IpduM I-PDU 发送或接收不同的 Com I-PDU,再简单一点说就是使用同一个PDU ID来发送不同的报文内容。对于多路复用的I-PDU来说,它的数据流向则变成了Com->PduR->IpduM->PduR->CanIf。

  那么IpduM模块是怎么实现PDU复用的呢?IpduM 提供了两种模式来实现多路复用,分别是I-PDU Multiplexing和Multiple PDU to Container Mapping这两种形式。

1 I-PDU Multiplexing

   其实现方式则为将一个多路复用的I-PDU分为一个静态部分和一个动态部分,其中静态部分由零个或多个信号或信号组组成,静态部分信号或者信号组的位置大小都是固定的,不会随着PDU多路复用而变化; 动态部分由Selector Field和一个或多个信号或信号组组成,这一部分除了Selector Field的位置不会变动外,信号和信号组的位置是可以随意发生变化的。如下图所示:
在这里插入图片描述

  静态部分和动态部分的位置可根据I-PDU进行配置,静态部分和动态部分可以被细分为不同的段。对于每个多路复用的I-PDU,只能定义一个Selector Field,所以IpduM模块就是通过Selector Field的值来进行PD路由,根据其不同的值来解包I-PDU的动态部分的内容。Selector Field大小可以配置为1到16个连续位,其位置也可以通过配置来定义。

2 Multiple PDU to Container Mapping

  这种方式就更好理解了,即创建一个容器,然后将多路复用的每一种PDU layout都分配一个Header,当Com层出发信号发送时,则会根据该信号的I-PDU layout的所对应的Header在容器中来进行查找,然后进行数据组装最好进行发送,接收同理。
在这里插入图片描述

END

相关内容

热门资讯

安卓系统和oppo系统哪个流畅... 你有没有想过,手机系统哪个更流畅呢?安卓系统和OPPO系统,这两个名字听起来就让人心动。今天,咱们就...
安卓怎么用微软系统,利用微软系... 你是不是也和我一样,对安卓手机上的微软系统充满了好奇?想象那熟悉的Windows界面在你的安卓手机上...
安卓系统如何安装nfc,安卓系... 你有没有想过,用手机刷公交卡、支付账单,是不是比掏出钱包来得酷炫多了?这就得归功于NFC技术啦!今天...
ios系统可以转安卓,跨平台应... 你有没有想过,你的iPhone手机里的那些宝贝应用,能不能搬到安卓手机上继续使用呢?没错,今天就要来...
iOSapp移植到安卓系统,i... 你有没有想过,那些在iOS上让你爱不释手的app,是不是也能在安卓系统上大放异彩呢?今天,就让我带你...
现在安卓随便换系统,探索个性化... 你知道吗?现在安卓手机换系统简直就像换衣服一样简单!没错,就是那种随时随地、随心所欲的感觉。今天,就...
安卓系统安装按钮灰色,探究原因... 最近发现了一个让人头疼的小问题,那就是安卓手机的安装按钮突然变成了灰色,这可真是让人摸不着头脑。你知...
安卓7.1.1操作系统,系统特... 你知道吗?最近我在手机上发现了一个超级酷的新玩意儿——安卓7.1.1操作系统!这可不是什么小打小闹的...
安卓os系统怎么设置,并使用`... 你有没有发现,你的安卓手机有时候就像一个不听话的小孩子,有时候设置起来真是让人头疼呢?别急,今天就来...
安卓降低系统版本5.1,探索安... 你知道吗?最近安卓系统又来了一次大动作,竟然把系统版本给降到了5.1!这可真是让人有点摸不着头脑,不...
解放安卓系统被保护,解放安卓系... 你有没有想过,你的安卓手机其实可以更加自由地呼吸呢?是的,你没听错,我说的就是解放安卓系统被保护的束...
校务帮安卓系统下载,便捷校园生... 你有没有想过,你的手机里装了一个神奇的助手——校务帮安卓系统下载?没错,就是那个能让你轻松管理学校事...
安卓系统没有拼多多,拼多多崛起... 你知道吗?最近我在手机上发现了一个小小的秘密,那就是安卓系统里竟然没有拼多多这个应用!这可真是让我大...
甜城麻将安卓系统,解锁全新麻将... 你有没有听说过那个超级火的甜城麻将安卓系统?没错,就是那个让无数麻将爱好者为之疯狂的软件!今天,就让...
安卓系统卸载的软件,深度揭秘卸... 手机里的软件越来越多,是不是感觉内存不够用了?别急,今天就来教你怎么在安卓系统里卸载那些不再需要的软...
安卓系统推荐好游戏,畅享指尖乐... 手机里的游戏可是咱们休闲娱乐的好伙伴,尤其是安卓系统的用户,选择面那可是相当广呢!今天,就让我来给你...
王者安卓系统怎么卖,揭秘如何轻... 你有没有听说最近王者安卓系统的火爆程度?没错,就是那个让无数玩家沉迷其中的王者荣耀!今天,我就来给你...
安卓开发系统内置证书,基于安卓... 你有没有想过,你的安卓手机里那些神秘的内置证书,它们到底是个啥玩意儿?别急,今天就来给你揭秘这些隐藏...
荣耀安装安卓原生系统,深度体验... 你知道吗?最近荣耀手机界可是掀起了一股热潮,那就是——荣耀安装安卓原生系统!这可不是什么小打小闹,而...
安卓13小米系统,创新功能与流... 你知道吗?最近安卓13系统可谓是风头无两,各大手机厂商纷纷推出自家的新版系统,其中小米的安卓13系统...