基础概念
以can报文发送作为例子。can报文的发送,数据流是从com-PduR-CANInterface-CanDriver。
这里我只是简单的介绍一下,配置can模块的时候,模块和模块之间的联系。
声明和引用的概念
在配置BSW模块的时候,经常是在某个地方声明,然后会到某个地方引用。举个例子
Com/ComIPDU建立了两个组Tx和Rx。
我们需要在IPDU的里面去引用。表明这个IPDU是发送还是接收的.
在ETAS中CAN配置流程
按照声明和引用的思路整理一下Can配置模块和模块之间的关系
EcuC/pduCollection
PduLength数据的长度。这里是CANFD 所以配置了64字节。
首先在EcuC模块里面有对PDU的定义。这里的PDU我理解的是,每一层之间交互的IPDU。就是我图片上面圆圈,画的这些。英文解释就是One Pdu flowing through the COM-Stack。其实看自动产生的名字就可以知道。
我们可以把这个理解成小车,每个模块之间的Pdu需要一个小车来帮忙运输。在这边声明了,后面需要在各个模块之间引用,来表明这个模块的PDU从哪里来,到哪里去。
Com模块
选择一个PDU(IDU_1_ETAS_CAN_Com2PduR),右击点击Find References。来查找一下,哪一些的地方引用了这个PDU
出现了两个引用,一个引用在Com模块,一个引用在PduR模块。其实从名字就可以看出来,从Com2pduR。
先看第一个COM模块
点击过后,就到了COM模块。
COM/ComIPdus这里面定义了COM的IPDU,这些IPDU就是DBC导入的ECU收发的报文,signal就是用意义的数据。比如,硬件温度,引脚电流。这些都是信号
在References栏目下面有几个关键的引用
ComPduIdRef:这里引用的就是EcuC/pduCollection。
这表明了,COM层的IPDU是搭载了哪一辆车,把快递装到了小车里面。IDU_1_ETAS_CAN_Com2PduR表示这个IPDU是从COM 发送到 PduR;CCU_PowerOn_ETAS_CAN_PduR2Com,这表明了我这个IPD是从PduR发送到COM。
ComIPduGroupRef: 表明这个IPDU是属于哪个组的
ComIPduSignalRef:这里面包含了,这个IPDU的信号
PduR
PduR模块的功能就是路由。和寄快递一个样子,我们快递单子上面需要写明寄件人的地址和收件人的地址。pduR的路由表中也需要写明PduRSrc和PduRdest 。
可以看到,在PduR/PduRRoutingTables'PduRRoutingTables"/pduRRoutingPaths。PduR维护了一张路由表,表中有路由的路径。
每一个Path里面都需要引用两个东西,
PduRSrcPduRef 表明这个路由的起始地址是哪里
PduRDestPduRef 表明这个路由的目的地是哪里
PduRSrcPduRef:引用源PDU eg:IDU_1_ETAS_CAN_Com2PduR
PduRDestPduRef:引用目的地PDU eg:IDU_1_ETAS_CAN_RduR2CanIf
这引用的是EcuC/pduCollection,表明了这个报文从哪个地方到哪个地方。直接把路由表,理解成快递单。
CanIf
CanIf层是对CanDriver的一层抽象。位于底层CAN驱动(CanDrv)、CAN收发器(CanTrcv)和上层通信服务层(CanSm、CanNm)、CAN传输协议(CanTp)、PDU路由器(PduR)之间。它表示上层通信层的CAN驱动程序服务接口。
CanIfCtrlDevCfgs: 这里面引用了Can Driver
CanIfRxPduCfgs: 包含了接收L-Pdu的配置参数
CanIfTxPduCfgs:包含了发送L-Pdu的配置参数
CanIfTxPduCfgs 配置
CanIfTxPduUserTxConf...ionUL:这里配置发送到CanIf的上层是哪个模块
CanIfTxPduRef:这里引用PDU。引用来自EcuC/pduCollection,表明这个IPDU是哪个模块送到CanIf的。
CanIfRxPduCfgs 配置
CanIfRxPduUserTxConf...ionUL:这里配置接收LPdu后把IPDU给到上层的哪个模块
CanIfTxPduRef:这里引用PDU。引用来自EcuC/pduCollection,表明这个接收LPdu后把IPDU给到上层的哪个模块。
Autosar 配置can,模块和模块之间的联系,就是通过声明和引用联系起来的,核心就是PDU的声明。