做网站 附加信息国外产品推广平台

最近碰到之前文章引用的内容被其作者联系的情况,与其说明本系列是出于分享知识为出发点, @小兵大将 非常感谢支持。不过,后续文章尽量不引用非官方的资料,以防版权侵犯。
在这也推荐下 @小兵大将 的CAN系列:CAN总线_小兵大将0221-CSDN博客
PDU Router(路由器)在本文将简称为PduR,考虑到个人对PduR模块认识深度有限,且接触的CAN通讯功能运用PduR模块功能也较简单,所以本文仅对PduR模块做简单介绍。
10 PduR
10.1 基本概念
首先了解下路由的概念,路由是指路由器从一个接口上收到数据包,根据数据包的目的地址进行定向并转发到另一个接口的过程(引自百度百科)。
接着了解下PduR更多的作用,引自[1]:PduR模块提供路由I-PDU(Interaction Layer Protocol Data Units)服务,使用在通讯接口模块(比如CanIf,CanNM,FrIf)和传输协议模块(比如CanTp,COM和DCM),如下图1所示。常用的PDU路由使用模块有:与UDS服务相关的AUTOSAR 诊断通讯管理模块(Diagnostic Communication Manager,DCM)和传输协议模块,与CAN通讯相关的AUTOSAR COM,通讯协议模块等。

PduR主要由2部分组成:
- PduR路由表:静态路由表描述每个被路由的I-PDU的路由属性;I-PDU路由的执行是基于静态定义的I-PDU ID。
- PduR引擎:根据PduR路由表执行路由动作的实际代码,该引擎不得不路由I-PDU从源头到目的地,以及根据I-PDU ID的源头翻译其目的地。

通过以上知识对应到CAN通讯,就是PduR模块从CAN接口模块/COM模块接收到了PDU,然后根据PDU ID查找已定义好的静态路由表,获得其目标地址,定向并转发到COM模块/CAN接口模块,即路由PDU,故称为PDU Router。
10.2 发送与接收操作
从CAN通讯的发送与接收来看,再来理解下PduR模块的作用,即:
- 发送时,PduR模块将来自COM模块的发送请求路由到Can接口模块,将来自Can接口模块的确认路由到COM模块,如下图3。
- 接收时,PduR模块将来自Can接口模块的通知路由到COM模块,如下图4。


下面借助文档了解下上述函数的定义,发送请求函数如下图5所示:

注意User:Up与当前的功能有关,CAN通讯的话,User:Up为Com,即发送时,COM模块调用PduR_ComTransmit函数。当然作为PduR模块的函数,会根据不同功能路由到其他模块,自然需要采用这种定义方式。同样地发送确认函数和接收通知函数也一样。

发送确认函数的定义如下图6,其中User:Lo的定义如下表,发送时,Can接口模块调用PduR_CanIfTxConformation函数向上确认。


接收通知函数的定义如下图7,其中User:Lo的定义如上表,即Can接口模块调用PduR_CanIfRxIndication函数。在此就发现图4用PduR_RxIndication函数就不够准确咯。

10.3 路由表
目前觉得PduR模块最关键还是路由表的定义,一是路由路径的确定,二是由源头ID到目的地ID的确定。特此再引用两例说明,如下图8、9。


以上就是简单介绍了PduR模块在CAN通讯的发送与接收所起的作用,当向上进入COM层后,简单地说就是:接收时,将PDU解包成一个一个的信号,供ASW使用;发送时,将一个一个的信号打包成PDU,向下发送。那么具体怎么实现?请看下篇文章。
Reference:
[1] Specification of PDU Router.
[2] 基于AUTOSAR标准的汽车通讯及网络管理技术的设计及实现[M],杨永亮,山东大学。