Vector AutoSAR解读:PDUR

PDUR 与其他模块的接口如:

Features

PDUR模块支持的features:

  • 编译前和编译后配置变量

  • I-PDU传输和接收

  • 取消接收/传输支持

  • 更改参数支持

  • 上层和下层通信接口模块之间的1:1路由

  • 上层和下层传输协议模块之间的1:1路由

  • 1:1接口网关路由

  • 1:N接口网关路由

  • 1:1传输协议网关路由

  • 1:N传输协议网关路由(单帧和多帧Tp消息)

  • 复杂设备驱动程序(CDD)支持

  • 路由路径组

  • 调试支持(可选功能)

  • 1:N从同一上层PDU扇出(如果)

PDUR模块不支持的features:

  • 链路时间配置

  • 1:N从同一上层PDU扇出(Tp)

  • 零成本运营

  • 最小路由(精简状态)

Data Provision - Direct data provision

对于Direct data provision路由路径,数据将由PDUR复制到TxBuffer中,然后再传输API调用中将其转发到目的模块。如果配置了FIFO队列,则数据可能会排队,然后再Tx Confirmation上下文中传输。

Data Provision - Trigger transmit data provision

对于Trigger transmit data provision路由路径,数据将由触发器传输API调用中的目标模块复制。如果目标模块总是想获取可用的最新数据(单换车区配置),或者它由特定的需要提供数据时的时序要求。

Data Provision - FIFO Queue

如果I-PDU实例的丢失是关键的,则使用FIFO。在几个并行传输FIFO队列的情况下,传输顺序取决于下层的总线访问,而不是基于I-PDU接收的相对顺序。因此,一个FIFO队列只关心对其自己排队的I-PDU的实例进行基于FIFO的排序。

可以为每个路由路径独立地配置队列深度。

如果I-PDU传输失败(接口层传输的负返回值请求),则PDU路由器从队列中删除I-PDU实例,并重试与下一个实例进行传输–直到队列为空或传输请求被接受。在缓冲区溢出的情况下,将删除受影响队列的所有排队的I-PDU实例并且发送新接收的I-PDU。

Buffer Configurations - No Buffer

如果PduRDestPduQueueDepth没有配置,no buffer将被使用。

Buffer Configurations - Direct DataProvision FIFO

如果data provision设置为direct data provision,并且PduRDestPduQueueDepth大于0,FIFO 队列将会被使用。

Buffer Configurations - Trigger TransmitData Provision FIFO

如果data provision设置为triggerdata provision,并且PduRDestPduQueueDepth大于0,FIFO 队列将会被使用。

Buffer Configurations - TriggerTransmit Data Provision Single Buffer

如果数据提供设置为触发传输,并且PduRDestPduQueueDepth为1,则将使用单个缓冲区。

适用于“最后的值是最好的值”的场景。缓冲区中的值将被覆盖,因此触发器传输调用总是从缓冲区获取最新数据。有必要为缓冲区指定默认值,因为可以在将任何新数据写入缓冲区之前调用触发器传输API。

Buffer Configurations - Shared Tx Buffer Pool support

接口层网关支持共享的Tx缓冲区。Tx缓冲器可以同时被分配给多个路由路径。这对于路由同时不活动的路径非常有用。因此,可以减少RAM的消耗。

Buffer Configurations - Timing aspects

PDU路由器触发要尽快路由的I-PDU实例的传输。如果队列为空,则接收将直接导致对接口层的传输请求。如果队列被占用,则I-PDU实例将被添加到队列中。

排队的I-PDU实例在前面的Tx确认中传输,这种排队行为可能会导致目标信道上的突发(尤其是CAN),如果多个队列实例排队并且如果驱动程序层没有释放硬件队列。

PDU路由器不提供实现速率转换的机制(例如。改变从源信道到目的地信道的循环时间)。速率转换可以通过使用COM信号的信号路由路径来实现(以额外的运行时成本)网关。

Buffer Configurations - Dynamic DLC Routing

对于PduR 9.00.00及更高版本,动态长度路由没有限制用于网关路由路径。0和配置的PDU长度之间的所有长度可以是路由。长度可以在运行时动态调整。如果路由路径大部分时间接收较小的I-PDU,则可以分配较小的缓冲区到PduRDestPdu。如果较小的缓冲区足够大实际接收到的消息。用例可以是经典CAN消息的路由经由CAN-FD路由路径。此功能可节省内存资源,从而使8字节的I-PDU不占用64字节的缓冲区。

Buffer Configurations - Transport protocol low levelrouting

如果源网络和目标网络上的TP段(N-PDU)相同,则为可以使用接口层网关路由TPI-PDU(“低级”路由)。如果使用低级别路由,则TP层不再可访问(以前的)N-PDU,并且因此被PDU路由器模块视为I-PDU。低级路由的优点是它是在接口层的上下文中执行的RxIndication,因此引入了最小的路由延迟。然而,低级别路由有几个缺点,这些缺点可能会导致高级别TP路由更合适:

  • TP协议转换不可能,因为帧布局和流控制在源网络和目标网络上的处理必须相同。

  • 不可能将路由的TP I-PDU转发到本地DCM,因为可能需要用于功能请求。

  • 由于在目的地总线上爆发。突发是排队的I-PDU的结果在先前的I-PDU的TxConfirmation中发送。

  • FiFo队列中的缓冲区溢出导致队列被刷新,因此破坏TP通信。如果接收TP连接支持动态块大小自适应。

Transport Protocol Gateway

TP层网关允许TP I-PDU的高级路由。

为了减少运行时和内存消耗,网关支持所谓的动态路由(对于1:1、1:N和N:1的单帧和多帧路由路径)。取决于每个路由路径的“阈值”配置,网关从在源上完成接收之前在目的地网络上进行传输网络。

由于AUTOSAR 4,PduR在PduR_<LoTp>_CopyRxData()调用中复制数据。因此,PduR模块总是知道还有多少缓冲区可用,并提供Tp模块的完整尺寸。PduR不限于线性缓冲区边界,如AUTOSAR 3,因此PduR数据速率非常有效。

Tp模块永远不会在一个PduR_<LoTp>_CopyRxData()调用中获得更多缓冲区而不是PduR提供给Tp模块。因此,Tp模块不应试图复制比所提供的缓冲区长度更多的数据。

多路由

PduR支持用于单帧和多帧的N:1和1:N路由路径。这些路由路径中的每一个在运行时将仅占用单个Tx缓冲区(如果不需要FIFO行为)。有关排队行为的详细信息,请参阅第3.7.4章。

TP阈值

阈值用于…

„ … 定义在目的地总线上触发传输的缓冲器的填充水平。

„ … 在运行时从选择中排除缓冲区。这可能有助于确保为单个帧配置的小缓冲区不会被考虑用于长的多消息。如果阈值大于缓冲区大小,则确保PduR不会使用该缓冲区来执行路由

配置实例:Communication interface range gateway

PduR路由路径配置通常侧重于专用Pdu的路由以及它们的总线特定表示(例如,具体的CAN ID、DLC…)。对一些人网络和通信体系来说,避免专用所有可能的和需要的PduR路由路径的配置是有利的。尤其是如果大负荷的Pdu应在网络之间路由,PduR路由路径配置并且需要大量的硬件资源(ROM/RAM)。

为了克服这种情况,可以使用所谓的测距路由。对于完整的路由两个网络之间的Pdu范围仅需要配置单个PduR路由路径。从技术上讲,范围路由是基于附加到Pdu数据字段。在接收Pdu期间,相关的总线接口模块存储所有Pdu数据字段的元数据部分中所需的Pdu元信息(CAN ID)。PduR本身执行完整Pdu数据字段的路由,包括元数据。在传输过程中,相关的总线接口模块使用元数据信息。所传输的总线Pdu的动态自适应(CAN ID)。路由的范围Pdus由总线接口特定的Rx-Pdu范围定义。如果是CanIf,则CAN ID Rx滤波器用于定义范围。下图显示了测距路由技术。

猜你喜欢

转载自blog.csdn.net/NMR0574/article/details/129667768