[AutoSar]BSW_Com014 PDUR 模块介绍 目录关键词平台说明一、PDUR 所处架构位置二、PDUR 的主要功能三、Functional Specification3.1 I-PDU handling3.1.1 Transport Protocol3.1.2 I-PDU Transmission from upper module(s)3.1.3 Communication Interface3.1.4 Transport Protocol3.1.4 I-PDU Gateway3.1.4.1 Buffer allocation3.1.4.2 FIFO3.2 Cancel transmission3.3 Cancel reception3.4 State Management3.5 Complex Driver Interaction四、I-PDU Reception4.1 CanTp module reception of I-PDU五、I-PDU transmission5.1 CanTp module transmission of I-PDU六、I-PDU网关6.1 广播模式6.2 网关模式关键词嵌入式、C语言、autosar、OS、BSW平台说明项目ValueOSautosar OSautosar厂商vector EB芯片厂商TI 英飞凌编程语言CC编译器HighTec (GCC)autosar版本4.3.1回到总目录一、PDUR 所处架构位置位于服务层。二、PDUR 的主要功能主要两大类功能①承上启下传递I-PDU。②作为网关将不同总线的I-PDU路由到指定的communicate channel。1.I-PDU 的传输和接收。2.Cancel-Receive /传输支持。3.作为上下级通信接口模块间1:1路由。4.作为上下级传输协议模块间1:1路由。5.作为11网关路由。6.作为1N网关路由。7.作为1:1传输协议网关路由。8.作为1:N传输协议网关路由(单帧和多帧Tp消息)。三、Functional SpecificationPDU Router模块是一个I-PDU传输单元位于接口模块和传输协议模块(下层模块)之上COM和DCM(上层模块)之下。除了PDU Router模块之外还有I-PDU Multiplexer (IpduM)模块它支持I-PDU的多路复用当作为不同角色的时候阔以被当作上层或者下层模块。当IpduM调用PDU Router模块发送多路i -PDU时或被PDU Router模块调用接收或发送多路i -PDU确认时或通过触发发送提供数据时必须将其视为上层模块。如果IpduM调用PDU Router模块向上层(例如COM)转发发送确认或接收指示或者当它被PDU Router模块调用更新属于多路复用I-PDU的I-PDU时它必须被视为下层模块。从ECU的角度来看PduR模块可以执行三种不同的功能类操作:PDU接收到本地模块从底层模块接收I-PDU并将其传递到一个或多个上层模块从本地模块传输PDU根据上层模块的请求将I-PDU传递到一个或多个底层模块PDU网关:从接口模块接收I-PDU并立即通过相同或其他通信接口模块如ETHLIN传输I-PDU从传输协议模块接收I-PDU并通过相同或其他传输协议模块如ETHLIN传输I-PDU。当然PDU接收和PDU网关可以相结合。例如COM模块在接收I-PDU的同时它被网关接到另一个较低层的模块。3.1 I-PDU handling每个I-PDU 通过 identified 去识别即 I-PDU ID。PDUR 通过配置的 source module I-PDU ID 和destination I-PDU IDs来识别上层传到哪COM 还是DCM下层传到哪CAN TP还是FlexRay Tp或者DoIP。例如如下图COM模块调用PduR_ComTransmit(此处PDU Router模块将列出I-PDU ID) PDU Router模块将调用CanIf_Transmit(此处CanIf模块配置将列出I-PDU ID) CanIf将调用PduR_CanIfTxConfirmation(此处PDU Router模块配置将列出I-PDU ID) PDU Router模块将调用Com_TxConfirmation(此处COM模块配置将列出I-PDU ID)。示例如下图3所示(参数只显示I-PDU ID)。3.1.1 Transport Protocol对于传输协议模块PDU路由器模块在接收到第一帧(FF)或单帧(SF)时首先收到开始接收通知。该调用通过调用_StartOfReception被转发到相关的上层模块。每个段的有效载荷(N-PDU)将通过后续的_CopyRxData调用在目标上层模块中复制。在接收到最后一个N-PDU后传输协议模块将通知PDU路由器模块完整的I-PDU已经收到PDU路由器模块将通过调用_TpRxIndication将此指示转发给相关的上层模块。3.1.2 I-PDU Transmission from upper module(s)目的下层模块的传输操作始终是异步的。也就是说当I-PDU由PDU Router模块传递到目的下层模块后传输业务请求立即返回。如果在I-PDU发送成功或失败后目的地下层模块通过PduR_LoTxConfirmation(通信接口)或PduR_ lotTxConfirmation(传输协议)通知PDU - Router模块则PDU - Router模块将通过Up_TxConfirmation(通信接口)或Up_TpTxConfirmation(传输协议)将此指示转发给上层模块。3.1.3 Communication Interfacei - pdu在通信接口上有三种传输方式1.直接提供数据——当上层模块调用PduR_Transmit函数时PDU Router模块将调用转发给Transmit函数数据在调用中由下层通信接口模块复制。2.触发发送数据提供——下层通信接口模块通过PduRTriggerTransmit请求发送I-PDU, PDU Router模块将请求转发给PduR_TriggerTransmit数据由上层模块复制。3.当上层模块调用PduR_Transmit函数时PDU Router模块将调用转发给PduR_Transmit函数下层模块(通信接口模块)不复制数据。数据稍后将由下层使用PduR_TriggerTransmit请求。3.1.4 Transport Protocol使用传输协议传输I-PDU有单播和组播两种方式。单播(1:1)传输由一个上层源传输协议模块和一个下层目的传输协议模块组成。组播(1:n, n1)传输由多个下层目的传输协议模块组成。PDU Router模块不会检查传输请求中是否包含单个N-PDU (SF)或多个N-PDU (FF、CF等)。I-PDU的发送是由上层源模块发出的PduR_ Up 发送请求发起的。PduR根据路由路径使用Transmit将请求转发给一个或多个下层目的传输协议模块。注意 Lo Transmit可能包含数据也可能不包含数据。目标模块将通过调用PduR LoTp CopyTxData请求数据。数据的重传(如果传输协议支持)由RetryInfoType参数进行。在传输结束时目的模块调用PduR LoTp TxConfirmation并将其转发给上层源模块3.1.4 I-PDU GatewayPDU Router模块支持从一个源总线到一个或多个目的总线的i -PDU的网关。从本地模块发送和接收的不同之处在于PDU Router模块必须同时是接收方和发送方在某些情况下还为I-PDU提供缓冲。以下是I-PDU网关的特性概述:I-PDU可以从一个源通信接口模块网关到一个(1:1)或多个目的通信接口模块(1:n I-PDU网关)。1.对于每个目标PDU路由器模块可以以可配置的深度缓冲一个I-PDU的每个目的地(如果有多个I-PDU即FIFO)。2.一个I-PDU可能在上层模块发送到n个目的通信接口的同时被网关接收。使用TP传输的i - pdu可以被网关到一个或多个目的地TP模块其范围如下:1.单帧和多帧都可以被网关到多个目标TP模块或本地模块(例如DCM)。2.在多个n- pdu中传输的I-PDU可以“即时”被网关发送到一个目的地这意味着在目的地TP模块上开始传输之前不需要收到完整的I-PDU.3.在多个n - pdu中传输的I-PDU可能被网关送到另一个TP模块也可能被本地模块接收但不能同时被两个模块接收。4.使用TP模块传输的i - pdu可能被FIFO缓冲。这适用于SF和多帧i- pdu。i - pdu只能在通信 IF 模块或TP模块之间网关不能混合使用。例如不能从CanIf收到I-PDU后将其发送到LinTp。只能 IF – IF TP – TP3.1.4.1 Buffer allocationPduR使用两种不同的缓冲区用于传输协议pdu的网关:通过PduRRoutingPaths配置的大TP缓冲区池和通过PduRDestTxBufferRef配置的专用缓冲区。专用缓冲区用于单帧路由并且必须足够大以包含所涉及的总线系统的最大可能的单帧。较大的PduRTpBuffers用于多帧路由并且必须足够大在动态网关的情况下可以包含一个TP数据块在直接网关的情况下可以包含完整的PDU。为单帧设置专用缓冲区的主要原因是功能性诊断请求特别是OBD请求具有非常高的优先级并且不能被缓冲区分配策略延迟。3.1.4.2 FIFO可以使用FIFO队列行为将I-PDU从一个源发送到多个目的地低层模块。FIFO队列可用于通信接口和传输协议(即使有多个N-PDU消息)3.2 Cancel transmission上层模块可以请求取消I-PDU(通过通信接口模块或传输协议模块传输)。PDU路由器模块将请求转发给一个目的模块(单播)或多个目的模块(组播)。PduR_CancelTransmit用于取消通信接口I-PDU以及在转发的情况下取消传输协议I-PDU。取消传输是可选的在每个模块的配置中启用。转发时上层模块请求取消I-PDU, PDU路由器根据路由路径将请求转发给一个或多个目的模块。在网关的情况下可以由PduR的网关部分使用Cancel transmission来优化资源处理(即如果目的地不再可用)。3.3 Cancel reception上层模块可以请求取消在传输协议模块上传输的I-PDU。PDU路由器模块将通过PduR_CancelReceive接收请求。取消请求的确认是通过CancelReceive的返回值进行的该返回值作为PduRCancelReceive的返回值转发给上层模块.3.4 State ManagementPDUR_ONLINE和PDUR_UNINIT两种状态上电但是未初始化是在PDUR_UNINIT状态初始化后在PDUR_ONLINE状态。只有在PDUR_ONLINE才能正常处理PDU。3.5 Complex Driver InteractionPDUR 支持对上下层CDD 的调用和传输。PduR为每个上层Cdd提供唯一的发送功能“PduR_ transmit”。当下层模块对上层CDD发送或接收的Pdu调用PduR的callout函数时PduR会调用CDD对应的目标函数。对于需要通信接口API的底层CDD, PduR提供了一组独特的通信接口API函数PduR_ CDD RxIndication如果配置了PduR_ CDD TxConfirmation和PduR_ CDD TriggerTransmit。对于需要传输协议API的底层CDD, PduR提供了一组独特的传输协议API函数PduR_ CDD CopyRxData、PduR_ CDD CopyTxData、PduR_ CDD RxIndication、PduR_ CDD StartOfReception和PduR_ CDD TxConfirmation。四、I-PDU Reception从通信接口模块或传输协议模块接收并转发到COM模块的I-PDU。需要注意的是PDU路由器并不是通信接口模块和i -PDU的唯一用户。其他模块如NM、TP等直接从通信接口模块接收pdu。4.1 CanTp module reception of I-PDU接收从CanTp模块到DCM模块的I-PDU。使用传输协议api进行接收。五、I-PDU transmission5.1 CanTp module transmission of I-PDU传输I-PDU从DCM模块到CanTp模块使用传输协议API。六、I-PDU网关如3.1.4所描述PDUR可以作为网关来使用。这里注意网关的两种形式6.1 广播模式将PDU 同时分发到LIN 和CAN6.2 网关模式将CAN PDU 转发到LIN 。回到总目录