的确AUTOSAR所介绍PDUR,I-PDU,L-PDU,N-PDU的概念很容易把人弄蒙圈,如果有人突然问我这个问题,我一时也解释不清这些关系,和同事稍微讨论了一下,整理了一下解释一下这个问题。
AUTOSAR在CAN上的处理与我们传统的使用还是有比较大的差异,过去我们写CAN的代码,也就是写了CAN基本的Tx和Rx驱动,收到原始8个bytes的数据后,进行什么处理或者在哪一层处理都由自己随意来定,有的甚至8bytes数直接在APP层用建模进行解析处理,这种情况也不少见,也没有不对。而AUTOSAR出于解耦,隔离及统一接口的因素考虑,将CAN做了多个层次的处理,不再只是一个底层驱动+应用层(或增加一个中间层)。
下面是AUTOSAR常见的介绍:
红框部分是和通讯相关的内容,包含LIN,CAN,Eth等,我们重点介绍CAN。和汽车领域中大家熟知的和CAN相关最重要的三部分就是诊断,标定及COM。
我们结合两张图中来看AUTOSAR中的分层和数据走向:
第一张图中可以看出根据不同的层次,CAN在不同的层次的数据包分为了
* 数据链路层:L-PDU
* 网络层(通常用的是TP层):N-PDU
* 交互层:I-PDU
可以看到CAN Driver和CAN Interface部分COM,XCP,UDS仍然是共用的,再往上就有不同的分支:
* UDS需要通过TP层,再进入PDUR进行分配进入DCM
* XCP相对独立直接由CAN interface进入后独立处理,不经过PDUR
* COM则从CAN Interface进入PDUR然后分配至COM
是否已经被各种PDU弄蒙圈了,下面是PDU和PDUR的官方解释,一起来理解一下:
简单的说,PDU中包含地址信息(当前层和目标层的地址信息)和数据信息,PDUR通过地址信息分配到不同的目标地。下图是PDU的组成,可以加深理解
PDU包含PCI和SDU,PCI包含源地址和目标地址信息,SDU是数据信息。
在我们关注的CAN传输中最关键的信息I-PDU,I-PDU并不是某一层单独所有的信息,也不是CAN单独所有的内容,可以在前一个图中看出I-PDU是进出PDUR的信息。而I-PDU是包含地址信息和数据信息的。
最后拿大家最关注的COM来说明各层的数据走向,以收取报文来举例:由CAN Driver收取报文生成L-PDU,而后进入CAN Interface进行抽象隔离处理,生成I-PDU,进入PDUR进行分配,根据地址信息(PCI)将进入COM模块的I-PDU传入COM,COM对I-PDU的数据信息SDU进行解析,生成signals,signals通过RTE传输给APP层,发送则正好相反。
已完成
数据加载中