AUTOSAR通信篇—PduR模块

2021年12月7日汽车技术评论8,6271阅读模式

今天介绍COM的下层模块:PduR—协议数据单元路由。

1   PduR的位置和作用

PDU Router(下文简称“PduR”)模块位于AUTOSAR通讯架构的中间位置,其上层主要包括DLT、DCM、COM和IpduM,下层主要包括CANTp、CanIf、FrIf、LinTp、IpduM、CanNm、FrNm。由于IpduM具有两个不同的角色,所以它分为上下两个模块:

上层:COM模块与I-PDU多路复用器(IpduM)模块之间的通信;

下层:IpduM模块与通信接口模块(CanIf、FrIf)之间的通信。

AUTOSAR通信篇—PduR模块

                    图1   PduR在BSW通讯模块中的位置

PduR模块同级的I-PDU多路复用器 (IpduM) 模块,它提供对多路复用I-PDU的支持。当IpduM调用PduR模块来传输复用的I-PDU时,或当PduR模块调用它来接收或传输复用的I-PDU确认时,或者当它通过触发器传输来提供数据时,IpduM都被认为是一个上层模块。IpduM调用PduR模块,提出传输确认或接收指示上层例如COM),或当它被称为PduR模块更新I-PDU时,属于多路复用I-PDU,则被视为下层模块。

2   PduR的内容

ECU的角度来看,PduR模块可以执行三种不同的功能类操作:
  • PDU接收到本地模块:从底层模块接收I-PDU并将其传递到一个或多个上层模块;

  • 从本地模块传输PDU:根据上层模块的请求,将I-PDU传递到一个或多个底层模块;

  • PDU网关:

  • 从接口模块接收I-PDU,并立即通过相同或其他通信接口模块传输I-PDU
  • 从传输协议模块接收I-PDU,并通过相同或其他传输协议模块传输I-PDU
当然,PDU接收和PDU网关可以相结合。例如:COM模块在接收I-PDU的同时,它被网关接到另一个较低层的模块。

I-PDU的路由是基于静态定义的I-PDU标识符执行的。在运行时不会动态地路由I-PDU,可能取决于它的有效负载。PduR模块是基于接口模块的通用方法,接口模块在PduR模块配置中配置。可以很容易地配置PduR来支持其他上层和下层模块。当然,这种方法也允许将复杂驱动程序(ComplexDriversCDDs)集成为PduR的上层或下层模块,但一般项目为了复杂驱动模块的独立,会单独解耦处理。

PduR模块的用户列表不是固定的。最常见的上层和下层的组合如下:

  • AUTOSAR DCMTp模块;
  • AUTOSAR COM和通信接口模块、传输协议模块或I-PDU多路复用器;
  • I-PDU多路复用器和通信接口模块;
如图2所示,PduR主要包含两部分:

a)  PduR路由路径:  描述每个I-PDU的静态路由路径。路由路径可以在ECU的编程状态下更新后生成可加载,或者通过可选初始化PduR时选用。

b)  PduR引擎:  根据PduR的路由路径执行路由操作的实际代码。路由器引擎需要处理:

       ·  I-PDU从源方路由到目标方;

       · 将源方的I-PDU ID传递给目标方

 (例如PduR_transmission转换为canif_transmission,PduR_CanIfTxConfirmation转换为Com_TxConfirmation)

AUTOSAR通信篇—PduR模块

                           图2    PduR的组成

I-PDU由静态I-PDU ID标识,因为在编译PduR模块后必须标识I-PDUPduR模块使用静态配置表中的I-PDU ID来确定I-PDU的目标。I-PDU用于PDUR上层模块的数据交换,如COM模块和DCM模块。路由器模块的路由操作并不修改I-PDU,它只是将I-PDU转发给目标模块。在TP路由时,I-PDU的传递可以在收到完整I-PDU之前开始,即“动态网关”。而对于网络管理数据交换,可以绕过PduR模块实现。

I-PDU ID配置时,需要同时配置实现的API。如此,可以在每个接收I-PDU ID的模块中高效地实现查找表(例如,PduR模块的配置包含PduR_CanIfTxConfirmationI-PDU ID)

AUTOSAR通信篇—PduR模块

PduR模块可以实现:

  • 从本地模块到通信接口模块I-PDU的单播(1:1)
  • 从本地模块到通信接口模块I-PDU组播(1:n)
  • 从本地模块到传输协议模块I-PDU的单播 (1:1) (单帧(SF)或多帧(FFCFs))
  • 从本地模块到传输协议模块I-PDU的组播(1:n) (单帧(SF))
  • 从通信接口模块到本地模块I-PDU的单播(1:1)
  • 从通信接口模块到本地模块I-PDU的组播(1:n)
  • 从传输协议模块到本地模块I-PDU的单播(1:1) (单帧(SF))
  • 从传输协议模块到本地模块I-PDU的组播(1:n) (单帧(SF))
  • 从通信接口模块到使用缓冲区通信接口模块I-PDU的网关(1:1)
  • 从通信接口模块到使用缓冲区通信接口模块I-PDU的网关(1:n)
  • 从通信接口模块到通信接口模块I-PDU使用FIFO的网关(1:1)
  • 从通信接口模块到通信接口模块I-PDU使用FIFO的网关(1:n)
  • 从通信接口模块到通信接口模块I-PDU使用FIFO的网关(n:1)
  • 从传输协议模块到传输协议模块I-PDU使用FIFO的网关(1:1)
  • 从传输协议模块到传输协议模块I-PDU使用FIFO的网关(1:n)
  • 从传输协议模块到传输协议模块I-PDU使用FIFO的网关(n:1)

PduR模块不支持以下内容:

  • 信号提取或转换。

  • 数据完整性检查 (如校验和)。

  • 更改或修改I-PDU。

  • 制定任何依赖于PDU负载的路由决策。

  • 支持TP模块和If模块之间的路由。

  • 支持I-PDU在If模块之间的速率转换。(此功能在COM模块中实现)。

#  关注【汽车控制与人工智能】,后台回复“PduR”,获取相关材料。

3   API函数

PduR模块依赖所使用的通信硬件抽象层模块、所使用的通信API和功能服务层模块。PduR模块需要的API函数主要包括:

下层Com IF模块:

  • _Transmit (e.g.CanIf_Transmit, FrIf_Transmit, LinIf_Transmit) 

  • _CancelTransmit (e.g.FrIf_CancelTransmit)

下层Tp模块:

  • _Transmit (e.g.CanTp_Transmit, FrTp_Transmit, LinTp_Transmit)
  • _CancelTransmit(e.g. CanTp_CancelTransmit, FrTp_CancelTransmit)
  • _CancelReceive(e.g. CanTp_CancelReceive, FrTp_CancelReceive)

上层COM模块:

  • _RxIndication (e.g.Com_RxIndication)
  • _TxConfirmation (e.g.Com_TxConfirmation)
  • _TriggerTransmit(e.g. Com_TriggerTransmit)

上层Dcm模块:

  • _StartOfReception(e.g. Dcm_StartOfReception)

  • _CopyRxData (e.g.Dcm_CopyRxData)

  • _CopyTxData (e.g.Dcm_CopyTxData)

  • _TpRxIndication (e.g.Dcm_TpRxIndication)

  • _TpTxConfirmation(e.g. Dcm_TpTxConfirmation)

每个处理I-PDU并为I-PDU提供APIBSW模块必须包含I-PDU ID列表,这意味着每个被调用的模块将有标识I-PDU的查询表。

举个例子:

COM模块调用PduR_ComTransmitPDUR模块将列出I-PDU ID), PDUR模块将调用CanIf_Transmit(CanIf模块配置将列出I-PDUID)CanIf将调用PduR_CanIfTxConfirmation(PDUR模块配置将列出I-PDU ID)PDUR模块将调用Com_TxConfirmation(COM模块配置将列出I-PDU ID)。如下图3所示(I-PDU ID为参数):

AUTOSAR通信篇—PduR模块
                       图3     携带I-PDU ID的传递
4   I-PDU的收发

I-PDU接收是指从底层通信接口模块或传输协议模块接收并传递到COM模块。

PduR不是通信接口模块和I-PDU的唯一客户。其他模块如NMTP模块直接从通信接口模块接收PDU

AUTOSAR通信篇—PduR模块

AUTOSAR通信篇—PduR模块

AUTOSAR通信篇—PduR模块

AUTOSAR通信篇—PduR模块

AUTOSAR通信篇—PduR模块

                        图4     PduR的发送序列图

PduR模块通过源模块I-PDU ID(位于PDUR配置中)和目标模块I-PDU ID(位于被调用的目标模块配置中)的组合唯一地标识路由路径。PDUR模块应将I-PDU ID转换为传输路径和确认路径的目标模块。

比如,COM模块将I-PDU传输给CanIfLinIf。调用PduR_comtransmissionPduR模块将源I-PDU ID(PDUR模块配置)转换为I-PDU ID (LinIf模块配置)I-PDU ID(CanIf模块配置)。从COM模块接收到的PduInfoType值被复制到CanIfLinIf模块,而不做任何更改。

LIN通讯类似,Linif将使用I-PDU ID调用PduR_liniftxconfirm,根据传输成功与否,调用结果是E_OK(成功传输)E_NOT_OK(传输失败)。然后,PduR模块将转换I-PDU ID,并使用com_txconfirm将调用转发到COM,使用转换后的I-PDU ID和接收到的结果。

PduR模块只能根据配置中给出的路由路径对I -PDU进行路由。当具有不同元数据类型的I-PDU通过路由路径连接时,PduR生成器将会拒绝配置。PduR模块的接收操作,总是通过底层模块(通信接口模块或传输协议模块)的指示来完成。指示函数由底层轮询通信驱动的循环函数执行,或在中断情况下执行。

源通信接口模块通过调用PduR_RxIndication来指示接收到的I-PDUI-PDU可以有多个目标本地模块,通过路由路径来配置。

对于传输协议模块,当接收第一帧(FF)或单帧(SF)时,首先通知PduR模块并开始接收通知。通过调用_StartOfReception将此调用转发到相关的上层模块。每个段的有效载荷(N-PDU)将由_CopyRxData调用在目标上层模块中复制。在接收到最后一个N-PDU之后,传输协议模块将指示PDU路由器模块已经接收到完整的I-PDU,而PDU路由器模块将通过调用_TpRxIndication将这个指示转发给相关的上层模块。

通过传输协议模块接收I-PDU可以只配置一个由路由路径配置的上层模块。

AUTOSAR通信篇—PduR模块

AUTOSAR通信篇—PduR模块

AUTOSAR通信篇—PduR模块

AUTOSAR通信篇—PduR模块
                         图5      PduR的接收序列图

PduR模块为从源传输协议模块接收并路由到目标上层模块的I-PDU提供1:1的路由。比如,从CanTp模块接收功能性寻址请求(SF)并将其路由到DCM模块。

目标底层模块的传输操作异步实现的,这意味着传输服务请求返回在I-PDUPduR模块传递到目标下层模块之后。如果目标底层通知PduR模块通过PduR_TxConfirmation(通信接口)PduR_TxConfirmation(传输协议)I-PDU传输成功或失败,PDUR模块将通过_TxConfirmation(通信接口)或该指示转发给上层模块_TpTxConfirmation (传输协议)

PduR模块的传输操作由上层源模块的PDU传输请求触发,并将请求转发到目标下层模块。

5   I-PDU网关

PduR模块支持I-PDU从源总线到一个或多个目标总线的网关交换。本地模块的传输和接收的区别在于,PDUR模块必须同时是接收器和发送器,在某些情况下还为I-PDU提供缓冲。

为了在不需要网关的情况下有效地实现PduR模块,网关需求被有意地分开。如果PDUR模块允许I-PDU的网关交换,则这些要求被视为附加要求,而不是取代以前的要求。

AUTOSAR通信篇—PduR模块

                       图6       PduR的广播(multicast)形式

AUTOSAR通信篇—PduR模块

                   图7       PduR的网关(gateway)形式
以下概述了I-PDU网关的功能:
  • PDUs可以从源通信接口模块网关到一个(1:1)或多个目标通信接口模块I-PDU网关(1:n)
  • 对于每个目的地,PDU路由器模块可以在可配置的深度内缓冲I-PDU的每个目的地(例如,如果多于一个I-PDU,则FIFO)。
  • 一个I-PDU可以被一个上层模块在与n个目标通信接口同时接收。
  • 使用TP传输的I-PDU可以被网关到一个或多个目标TP模块,范围如下:
  • 单帧和多帧都可以被网关到多个目标TP模块或本地模块(如DCM)。
  • 在多个N-PDUs中传输的I-PDU可以被“动态地”传送到一个目的地,这意味着在目标TP模块上开始传输之前,不需要接收完整的I-PDU。
  • 在多个N-PDUs中传输的I-PDU可以通过网关传送到另一个TP模块,也可以由一个本地模块接收,但不能同时接收两个模块。
  • 使用TP模块传输的I-PDU可以采用FIFO缓冲。这适用于SF和多帧I-PDU。
  • I-PDU只能在通信接口模块或TP模块之间进行网关,不能混合使用。例如,I-PDU不能从CanIf和网关到LinTp接收。

如果不支持I-PDU在不同周期或速率的通信接口模块之间路由,则可以通过使用信号网关的COM模块来完成。在这种情况下,I-PDU必须被路由到COM模块。

举例说明一下。

基于信号的通信路径如图8所示,发送路径由Com模块启动,经过PduR进行路由,派发到对应总线的接口模块,最后由对应的总线驱动模块把信号发送到总线上;接收路径反之。

AUTOSAR通信篇—PduR模块

                  图8    COM模块经路由的通信路径

Dcm的诊断信息通信路径如图9所示。发送路径由Dcm模块启动,经过PduR进行路由,派发到对应总线的TP模块,经过Tp的拆包功能经对应总线的接口层发送到驱动模块,最后由对应的总线驱动模块把信号发送到总线上;接收路径反之。

AUTOSAR通信篇—PduR模块

                  图9     DCM模块经路由的通信路径

PDU的网关路径如图10所示。第一种网关路径是不同总线的接口层之间的,先由驱动接收到帧,经接口层提交给PduR模块,然后PduR模块根据之前配置的网关路径转发给另一种总线的接口层,接口层提交给目标总线的驱动层,最后由驱动层把PDU发布到总线上。另外一种网关路径是不同总线的TP层之间的,和第一种相比是在路径中增加了TP节点,同时也多了拆包组包的消耗。

AUTOSAR通信篇—PduR模块

                       图10    不同总线的网关路径

PDU广播路径如图11所示。广播路径由Com模块启动,根据PduR对这个PDU的配置,使用多条路径进行路由,之后派发到对应总线的接口模块,最后由对应的总线驱动模块把信号发送到总线上,从而达到广播效果。

AUTOSAR通信篇—PduR模块               图11    COM触发的广播路径

6   PDU ID的映射机制

在每一层,PDU都有一个全局的识别号(简称全局ID)和一个本地的识别号(简称本地ID)。其中全局IDECU配置(简称EcuC)全局分配,一条通信路径上的PDU 的全局ID相同。为了方便本层管理PDU,会使用本地ID连续的机制,为每个PDU分配一个本地ID

通信协议栈中上层在使用下层服务时,先根据PDU在自己层的本地ID,查找到这个PDU的全局ID,然后根据这个全局ID,查找这个PDU在下层对应的本地ID,最后根据得到的本地ID使用下层服务。

通信协议栈的下层在使用上层服务时,先根据PDU在自己层的本地ID,查找到这个PDU的全局ID,然后根据这个全局ID,查找这个PDU在上层对应的本地ID,最后根据得到的本地ID回调上层。

总结:

PduR模块主要提供两方面的服务:

一是承上启下衔接上层和下层:发送时派发从高层模块的PDU到低层模块;接收时派发从底层模块如If或者TP接收的PDU给高层模块(COMPduR)。

二是通信网络中的网关功能。其中网关功能有两种:从一个接口层到另外一个相同或者不同总线类型的接口层;从一个TP到另外一个相同或者不同总线类型的TP层。其中路由协议是基于一个静态的路由表和PDU ID的概念。

  

缩略词:

CAN Communication MatrixCAN通信矩阵,用来描述完整的CAN网络,包括:涉及的CAN节点;CAN PDU的定义(ID和数据长度DLC);PDU的发送和接收信息。

Physical Channel物理通道。代表CAN网络的接口,不同CAN硬件单元的不同物理通道可以访问不同的网络。

DCM: Diagnostic Communication Manager,诊断通信管理

COM IFcommunicationinterface modules,通讯接口模块

COM Tp:Communication Transport,通讯传输

IpduM:I-PDU MultiplexerI-PDU多路复用

DLCData LengthCode,描述SDU长度的CAN信息。

I-PDU: Interaction Layer Protocol Data Units,交互层协议数据单元。

L-PDUData LinkLayer Protocol Data Unit,数据链接层的协议数据单元,包含标识符(ID, 数据长度(DLC)和数据(L-PDU

L-SDUData LinkLayer Service Data Unit数据链接层服务数据单元,它其中的数据传输到L-PDU中。

gatewaying-on-the-fly: 网关功能。在两个TP模块之间的路由,在所有数据被接收之前,数据的转发就开始了(当达到指定的阈值时)。如果在两个接口之间传输数据量较大,最好能够在从源网络接收所有数据之前在目标网络上开始传输,可以节省内存和时间。

multicast operation组播模式。同时传递PDU给众多接收组群。(1n

data provision数据条款。包含两种数据条款接口模式:直接数据条款和触发型数据条款。

last-is-best bufferingfirst in first out缓冲策略,用最新值覆盖最后一个值。

FIFO buffering缓冲概念,使用先进先出策略。

SFSingle Frame,单帧

FFFirst Frame,首帧

CFConsecutiveFrame,连续帧

N-PDUCAN传输层的网络协议数据单元。

N-SDUCAN传输层的服务数据单元。其中的数据传输到N-PDU中。

PDU Router协议数据单元路由。将I-PDU从一个模块传递到另外一个模块,PDU Router可以用于网关运行或内部路由。

weinxin
扫码关注公众号
关注公众号领精彩彩蛋!
AUTOSAR通信篇—AUTOSAR COM模块 汽车技术

AUTOSAR通信篇—AUTOSAR COM模块

AUTOSAR COM是AUTOSAR通讯的重要组成部分,它是从OSEK COM标准的基础上发展而来的。它提出了一个不同速率的总线网络之间进行数据交换的方法,为汽车控制单元应用软件提供了统一的通信环境...
AutoSar之方法论Methodology 汽车技术

AutoSar之方法论Methodology

AUTOSAR为汽车电子软件系统开发定义了通用的技术方法,即AUTOSAR方法论。该方法论描述了从系统底层配置到ECU可执行代码产生过程的设计步骤。AUTOSAR开发方法是基于虚拟功能总线的开发方法。...

发表评论