本文主要是介绍[AutoSar]BSW_Com014 PDUR 模块介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- 关键词
- 平台说明
- 一、PDUR 所处架构位置
- 二、PDUR 的主要功能
- 三、Functional Specification
- 3.1 I-PDU handling
- 3.1.1 Transport Protocol
- 3.1.2 I-PDU Transmission from upper module(s)
- 3.1.3 Communication Interface
- 3.1.4 Transport Protocol
- 3.1.4 I-PDU Gateway
- 3.1.4.1 Buffer allocation
- 3.1.4.2 FIFO
- 3.2 Cancel transmission
- 3.3 Cancel reception
- 3.4 State Management
- 3.5 Complex Driver Interaction
- 四、I-PDU Reception
- 4.1 CanTp module reception of I-PDU
- 五、I-PDU transmission
- 5.1 CanTp module transmission of I-PDU
- 六、I-PDU网关
- 6.1 广播模式
- 6.2 网关模式
关键词
嵌入式、C语言、autosar、OS、BSW
平台说明
项目 | Value |
---|---|
OS | autosar OS |
autosar厂商 | vector , EB |
芯片厂商 | TI 英飞凌 |
编程语言 | C,C++ |
编译器 | 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.作为1:1网关路由。
6.作为1:N网关路由。
7.作为1:1传输协议网关路由。
8.作为1:N传输协议网关路由(单帧和多帧Tp消息)。
三、Functional Specification
PDU 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,并立即通过相同或其他通信接口模块(如ETH,LIN)传输I-PDU;
从传输协议模块接收I-PDU,并通过相同或其他传输协议模块(如ETH,LIN)传输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_<Lo>TxConfirmation(通信接口)或PduR_< lot>TxConfirmation(传输协议)通知PDU - Router模块,则PDU - Router模块将通过<Up>_TxConfirmation(通信接口)或<Up>_TpTxConfirmation(传输协议)将此指示转发给上层模块。
3.1.3 Communication Interface
i - 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, n>1)传输由多个下层目的传输协议模块组成。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 Gateway
PDU 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 <–> TP
3.1.4.1 Buffer allocation
PduR使用两种不同的缓冲区用于传输协议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 Management
PDUR_ONLINE和PDUR_UNINIT两种状态,上电但是未初始化是在PDUR_UNINIT状态,初始化后在PDUR_ONLINE状态。只有在PDUR_ONLINE才能正常处理PDU。
3.5 Complex Driver Interaction
PDUR 支持对上下层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 transmission
5.1 CanTp module transmission of I-PDU
传输I-PDU从DCM模块到CanTp模块使用传输协议API。
六、I-PDU网关
如3.1.4所描述,PDUR可以作为网关来使用。这里注意网关的两种形式:
6.1 广播模式
将PDU 同时分发到LIN 和CAN
6.2 网关模式
将CAN PDU 转发到LIN 。
>>>>>回到总目录<<<<<<
这篇关于[AutoSar]BSW_Com014 PDUR 模块介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!