协议数据单元I-PDU Multiplexer深入理解

PDU的全称是Protocol Data Unit,也就是协议数据单元的意思,而在Autosar的规范中描述的是自动共享服务器基本软件模块I-PDU多路复用器I-PDU M的功能、api和配置。

PDU多路复用意味着使用PDU(协议数据单元)的相同PCI(协议控制信息),其SDU(服务数据单元)的多个唯一布局。选择器字段是多路PDU的SDU的一部分。它用于区分多路pdu之间的内容。

pdu的多路复用是目前已知的来自CAN的方法,但并不局限于此通信系统。(而对于CAN通信不懂的同学,可以在网上查一查看看,关于CAN的资料再网上还是蛮多的)。

在发送方端,I-PDU多路复用器模块负责将适当的I-PDU从COM组合到新的、多路复用的I-PDU,并将它们发送回PDU Router。

在接收端,它负责解释多路I-PDU的内容,并考虑到选择器字段的值,为COM提供适当的分离I-PDU。 

对于多路i-pdu的传输,则是不能考虑最小的观测数值的。而对于具有静态布局的容器PDU的传输,如果两个或多个包含的PDU每个都具有MDT配置,则不能保证最小的观测数值。

而对于各个模块的依赖性,因为博主是做跟Autosar相关的技术研究,所以以下只列出跟Autosar相关的Dependencies to modules,如果如果其他人做的不属于这个方面的技术,就仅当了解好了,下面我们看一下这个图,是来自Autosar的SWS里的I-PDU Multiplexer文档。

 IPDU-M被AUTOSAR中的PDU Router旁边;而IPDU-M则不能直接访问AUTOSAR OS,有的同学可能不太理解AUTOSAR OS到底是什么,在这里可以把它暂时理解成一个系统,后面我会进行一个详细的讲解。

而RTE又包含着BSW-Scheduler,这里有可能大家又不理解了,我直接上个图吧,看着图可能会好理解一些,这是AUTOSAR的基本架构,后面我有可能会说,看看时间的安排了。

IpduM模块依赖于BSW调度器,分别在IpduMRx时间库或MTx时间库中配置的时间点调用IpduM_MainFunctionRx和IpduM_MainFunctionTx。

下面总结了IpduM所需要的来自PDU Router的功能:指示输入的多路复用或包含的i-pdu;输出i-pdu的发送接口;在外部去证实来自I-PDU的发送的报文。

以下列表总结了IpduM模块为PDU Router提供的功能:可进行多路复用的输入I-pdu和待拆卸的输入容器-pdu的指示接口;发送接口为多路复用的i-pdu和i-pdu相结合,它们将被组装成一个容器PDU;对已传输的IPDU的接口进行确认。

而PDU Router模块的配置必须来自IPDU,它属于多路复用的I-pdu,通常表示为多路复用的I-PDU的静态或动态部分,都被Router到IPDUM模块。

PDU-Router(例如查找表)的配置必须能够使相关的I-PDU被Router到IPDUM。

而COM的话由于IpduM模块的配置依赖于自动共享COM模块的相应配置。对于每个多路复用的I-PDU,静态部分和动态部分的每个布局都需要有不同的i-pdu。对COM不了解的同学网上的资料也挺全的,可以去自行了解。IpduM进一步假设正确的字段选择器的值已经包含在表示动态部分的COM的模块I-PDU中。而所包含的i-pdu则不依赖于COM配置。

IPDUM 的定义和布局

多路复用的I-PDU由静态部分和一个动态部分组成,其中静态部分由零个或多个信号或信号组组成。而动态部分由选择字段和一个或多个信号或信号组组成; I-PDU的动态部分可与C语言的集合相媲美。根据I-PDU内的选择器字段的值,系统会选择I-PDU的实际布局。

静态部件和动态部件的位置可根据I-PDU进行配置。静态部分和动态部分可以被细分为不同的部分。对于每个多路复用的I-PDU,只能定义一个选择器字段。选择器字段具有1到16个连续位之间的可配置大小,其位置可以通过配置来定义,选择器字段的值解释了如何去定义I-PDU的动态部分的内容。

静态部分有一个COMI-PDU,一个复用IpduMI-PDU的动态部分的每个布局有一个COMI-PDU,因此IpduM最多组合两个COM的I-PDU。对于通过IpduM模块的I-PDU数据传输路径,在IpduM模块内分配了一个缓冲区。这个缓冲区需要初始化,因为它可能在COM模块完全填充数据之前传输。此缓冲区的初始化数据来自COM模块配置的初始值。为了进行优化,缓冲区可以在配置时计算出初始位模式,然后在运行时进行复制。

在COM内部,静态部分有独立的i-pdu,多路的I-PDU每个动态部分都有一个。静态部分和动态部分在COM中被视为单独的i-pdu,并且它们有属于自己的I-PDU ID。

 IpduM模块提供了一个IpduM_Transmit功能,使PDU路由器能够启动一个I-PDU的传输;每个输出的I-PDU都有一个初始值,因此,在静态和动态部件从COM发送到IpduM之前,IpduM模块传输I-PDU,则传输由配置定义的值。如果多路I-PDU仅通过更新动态或静态部分来触发发送,那么如果在两次传输之间进行多次更新,非触发部分可能会被覆盖。

IpduM模块通过分离的两个来自PDU Router模块的两个传输请求来接收多路I-PDU的静态和动态部分。

有时,IpduM模块可能不只是发送本地存储的部分,因为这些部分可能包含过时的信息,例如update bits。因此,IpduM支持每个部分都有一个可配置的即时更新机制。

通信硬件抽象(CAN接口、Lin接口、FlexRay接口)接收的每个I-PDU都给PDU Rouer。PDU Router将i-pdu多路router到IpduM模块。IpduM模块分别将多路I-PDU的静态和动态部分路由到其目的地。在配置时就可以知道,传入的I-PDU ID对应于配置了静态部分的多路复用的I-pdu。仅通过I-PDUID就可以确定是否存在静态部件。

没有要求处理或通知配置错误的部件。因此,如果接收到的I-PDU包含未在此ECU上为接收配置的段,则将忽略它们。此外,如果I-PDU配置的PduLength为0,它也将被忽略,因为不能配置有意义的处理。