AUTOSAR的通信协议栈是由BSW通信做事,通信硬件抽象和通信驱动程序组成。
图1 AUTOSAR 通信协议栈的组件
COM模块

AUTOSAR COM是位于RTE和PduR之间的做事层模块,紧张用于与RTE之间的旗子暗记交互,对旗子暗记进行打包和解包。其余在该模块中还可以配置IPDU的通信周期、通信周期偏移量、IPDU Group等。PduR模块
PduR的浸染是为通信协议栈中的不同总线的IPDU供应路由路径。例如它将吸收的IPDU路由至COM、Dcm等模块,或者将COM模块须要发送的IPDU路由至CanIf模块,末了传送至芯片的CAN Driver,将旗子暗记发送至总线。CanTp模块
Tp表示传输协议。该模块是特定于总线,其配置取决于根本总线协议,可以是CAN、LIN、CANFD等总线。该模块紧张用于长报文的分段发送,以及对分段报文进行重组。Bus SM 模块
总线状态管理模块卖力相应总线状态机的管理和总线故障的处理。它可以基于CAN总线的CanSM,或者是基于LIN总线的LinSM等。Bus Trcv Driver模块
它是ECU抽象层的一部分。它可以是用于CAN收发器的CanTrcv,用于以太网收发器的EthTrcv,用于Flexray收发器的FrTrcv等。此模块用于对收发器进行初始化配置,它供应独立于掌握器硬件的用于启动传输的做事和用于关照吸收事宜的回调函数。Bus Driver
该模块是AUTOSAR MCAL层的一部分(例如:CanDrv,LinDrv,FrDrv),它实际上与ECU的底层硬件进行交互,并为其上层供应独立于硬件的接口。此模块取决于硬件,并且驱动程序代码可能会根据根本硬件而有所不同。BusIf是唯一可以访问此总线驱动程序的模块。
CAN总线的COM配置履行下面我们来看看CAN通信协议栈,如下图2所示,包括Com、PduR、CanTp、CanSm、CanIf、CAN Driver等模块,个中COM与PduR模块是通用的,其功能与总线铜线协议无关。
图2 AUTOSAR CAN通信协议栈
下面来详细聊聊各个模块的配置选项。COM模块
配置的COM模块基本目的是在上层RTE层和下层PDU路由器之间建立系统通信,而不考虑通信协议。这可以通过定义和配置四个不同的工具来完成。
I-PDUI-PDU包含从通信栈中某一模块吸收到的或须要发送给某一模块的。I-PDU组如果我们有大量的I-PDU,则可以将它们分为不同的组,常日至少分为两个组,一个为TxGroup,一个为RxGroup。旗子暗记I-DPU可以包含一个或多个旗子暗记,可以理解为一个I-PDU为一帧CAN,旗子暗记便是dbc中定义的。旗子暗记组如果须要将多个旗子暗记发送到同一I-PDU,则旗子暗记可以进一步形成旗子暗记组。COM模块包含两个紧张的部分,分别为ComGeneral和ComConfig。ComGeneral(多重性:1)ComConfigurationUseDet:如果此布尔参数设置为ON,则任何当COM模块涌现缺点时,会调用Det_ReportError函数,记录在DET模块中(多重性:0.1)。ComCancellationSupport:这是一个布尔参数,用于启用/禁用用于取消PDU传输要求的取消功能。(多重性:0.1)。ComEnableSignalGroupArrayApi:这是一个布尔参数,用于激活/禁用旗子暗记组阵列访问API。(多重性:1)。ComSupportedIPduGroups:它是一个整数参数,用于解释所支持的IPDU组的最大数量。(多重性:1)。ComVersionInfoApi:布尔参数,用于激活/禁用版本信息API Com_GetVersionInfo。(多重性:1)。ComRetryFailedTransmitRequests:如果此参数设置为true,则启用重试失落败的传输要求。(多重性:0.1)。ComEnableMDTForCyclicTransmission:如果启用此选项,则它将在I-PDU的循环传输和重复传输之间供应最小延迟韶光监视。(多重性:0.1)。ComConfig(多重性:0.1)它包含四个容器,分别为ComSignals、ComIPdus、ComIPduGroups、ComSignalGroups。它还具有用于传输模式配置,旗子暗记网关配置,时基配置和过滤器参数配置的配置参数。
ComIpdu(多重性:1)该容器用于为不同的IPDU参数供应定义,如果没有该参数,则无法通过COM模块进行通信。ComIPdu也通过ComPduIdRef链接到PDU。I-PDU包含一个或多个旗子暗记和/或旗子暗记组。以下是ComIpdu的一些基本属性。
ComIPduHandleId:这是分配为该IPDU的ID的数字值。此ID用于在各种发送和吸收API调用以及相应的回调API中引用此IPDU。(多重性:0.1)。ComPduIdRef:它供应对COM栈的全局PDU构造的引用。(多重性:1)。ComIPduGroupRef:它是指IPDU所属的IPDU组。(多重性:0 ... )。ComIPduSignalRef:供应对该IPDU中包含的所有旗子暗记的引用。一个IPDU可以包含一个或多个单独的旗子暗记。(多重性:0 ... )。ComIPduSignalGroupRef:供应对此IPDU中包含的所有旗子暗记组的引用(多重性:0 ... )ComIPduCallout:此参数可定义相应I-PDU的callout函数的名称,该函数在吸收IPDU时或在发送PDU之前调用。(多重性:0 ... 1)。ComIPduDirection:定义I-PDU是为发送(SEND)PDU还是为吸收(RECEIVE)PDU。(多重性:1)。ComIPduSignalProcessing: 用于配置旗子暗记是立即处理还是周期性处理,分别对应immediate或DEFERRED模式。(多重性:1)。如果将ComIPduDirection设置为SEND,则须要设置其他参数,例如传输是周期的还是稠浊型的等等。这是通过添加ComTxIPdu工具来添加的。ComIpduGroup(多重性:1)它包含COM模块的IPDU组的配置参数。如果不包含ComIPduGroup容器,则未定义IPDU组。在这种情形下,无法通过COM模块进行通信。(多重性:1)
ComIPduGroupHandleId:用作此IPDU组ID的数值。API调用须要它来启动和停滞IPDU组。(多重性:1)ComIPduGroupGroupRef:它供应对包括该IPDU组的所有IPDU组的引用。(多重性:0 ... )ComSignal
IPDU可以由一个或多个旗子暗记组成。来自RTE不同运用程序的这些旗子暗记在被传输到PduR之前被打包到PDU中。该容器供应各种参数来配置PDU中的旗子暗记位位置,旗子暗记位大小和其他属性。
1、ComHandleId:这是分配给每个旗子暗记ID的数字值。与旗子暗记操作有关的不同API调用须要它。(多重性:0 ... 1)。
2、ComTimeoutFactor:它定义了监视的超时时间。(多重性:0..1)
3、ComTransferProperty:以下选项定义此旗子暗记是否可以触发相应IPDU的传输;(多重性:0 ... 1)我们可以设置以下五个选项之一:TRIGGEREDPENDINGTRIGGERED_ON_CHANGE,TRIGGERED_WITHOUT_REPETITION TRIGGERED_ON_CHANGE_WITHOUT_REPETITION
4、ComBitPosition:指出旗子暗记在IPDU中的开始位置,(多重性:1)。5、ComBitSize:它定义旗子暗记的大小(以位为单位)。(多重性:0 ... 1)
6、ComSignalEndianess:定义旗子暗记网络表示的字节排序。可以是BIG_ENDIAN,LITTLE_ENDIAN,OPAQUE。(多重性:0 ... 1)
7、ComSignalInitValue:用于设置旗子暗记的初始值。(多重性:0 ... 1)
8、ComSignalLength:它指定UINT8 [n]类型的n(以字节为单位:1 ... 8)。对付其他类型,它将被忽略。(多重性:0 ... 1)
9、ComSignalType:它指定符合BOOTEAN,SINT8,UINT8等。(多重性:1)10、ComTimeoutNotification:定义发生超时时在发送方或吸收方要调用的函数的名称(多重性:0 ... 1)
ComSignalGroup
然后,当我们须要向同一IPDu发送或吸收多个旗子暗记时,可以将这些旗子暗记组合在一起以形成一个旗子暗记组。此容器包含名称与ComSignal容器相似的参数,并且对旗子暗记组具有完备相同的浸染。因此,在本节中,我仅提及参数名称,要理解其行为,请参阅ComSignal部分。
ComHandleId(多重性:0 ... 1)ComTimeoutFactor(多重性:0 ... 1)ComFirstTimeoutFactor(多重性:0 ... 1)ComTransferProperty(多重性:0 ... 1)ComNotification(多重性:0 ... 1)ComInvalidNotification(多重性:0 ... 1)ComErrorNotification(多重性:0 ... 1)ComTimeoutNotification(多重性:0 ... 1)PDU路由器(PduR)PduR卖力将PDU路由到特定的总线接口。在PduR之上的所有层中,所有PDU都是独立于协议的。在PduR之下的所有PDU都属于特定的协议接口模块,PduR模块为紧张容器供应以下参数配置。
PduRBswModules(多重性:0 ... )
每个容器都描述了PDU路由器必须连接的特定BSW模块。添加PduRBswModule时,容器的简称必须与Bsw模块的名称匹配,例如CanIf。
PdurGeneral(多重性:1)
这是PduR模块的子容器,它指定PDU路由器的常规配置参数。以下是一些基本配置参数。
PduRDevErrorDetect:如果启用,它将默认缺点跟踪器(Det)检测和关照打开。(多重性:1)PduRVersionInfoApi:如果设置为true,则PduR_GetVersionInfo API可用。(多重性:1)PduRRoutingTables(多重性:1)
它表示路由路径表。此路由表许可利用多个配置,这些配置用于在同一配置中创建多个路由表。
1、PduRConfigurationId:它供应了利用PduR API读取的PduR配置的配置的标识。(多重性:1)
2、PduRMaxRoutingPathCnt:给出所有路由表中最大路由路径数。(多重性:1)
3、PduRMaxRoutingTableCnt:它给出了路由表的最大数量。(多重性:1)
PduRSrcPdu
这是PduRRoutingPath容器的子容器,它指定要路由的PDU的源。
PduRSourcePduHandleId:这是PDU路由器分配的PDU标识符。(多重性:1)PduRSrcPduRef:此参数供应对唯一PDU标识符的引用,该标识符表示PDU的源地址。(多重性:1)PduRDestPdu这是PduRRoutingPath容器的子容器,并为要路由的PDU指定一个目的地。1、PduRDestPduHandleId:由PDU路由器分配的PDU标识符,通信接口和传输协议模块利用该PDU标识符进行确认。(多重性:0 ... 1)2、PduRDestPduDataProvision:此参数指定如何以PDU_DIRECT或PDUR_TRIGGERTRANSMIT供应数据。(多重性:0 ... 1)3、PduRDestPduRef:它供应参考唯一的PDU标识符,表示PDU路由的目的地(多重性:1)4、PduRDestTxBufferRef:供应对用于单帧路由的通信接口网关和传输协议网关所需的缓冲区的引用。(多重性:0 ... 1)CAN状态管理器(CanSM)
CAN状态管理器(CanSM)是通信做事层的成员,该层与通信硬件抽象层和系统做事层进行交互。CanSM模块卖力CAN状态机的管理,包括CanTrcv、CanIf、CAN Driver的状态机切换。CanSM模块具有以下容器用于其配置。
CanSMGeneral(多重性:1)它包含CanSM模块的通用预配置参数。
CanSMDevErrorDetect:用于打开或关闭开拓缺点检测API是否可以调用。(多重性:1)CanSMMainFunctionTimePeriod:它定义MainFunction的循环周期(单位为秒)(多重性:1)3、CanSMVersionInfoApi:用于打开或关闭版本信息API CanSM_GetVersionInfo。(多重性:1)
CanSMManagerNetwork(多重性:1 ... )
该容器包含用于确定底层CanController(即每个CAN网络)处理办法的CAN网络特定参数。
1、CanSMModeRequestRepetitionTime:它确定CanSM模块将利用CanIf模块的API重复模式变动要求的持续韶光。(多重性:1)
2、CanSMModeRequestRepetitionMax:它确定模式要求重复的最大次数,如果超过次数CanSM模块向Det报告开拓缺点。(多重性:1)
每个CAN网络的CanSMConfiguration容器都有一个CanSMManagerNetwork。它包含每个CAN网络的CAN网络特定参数。
CanSMBorCounterL1ToL2:它定义总线断开缺点的计数,从快规复切换到慢规复的门槛值。(多重性:1)CanSMBorTimeL1:以秒为单位,定义快规复的持续韶光。(多重性:1)CanSMBorTimeL2:以秒为单位,定义慢规复的持续韶光。(多重性:1)CanSMController(多重性:1 ... )每个容器引用一个唯一的CAN掌握器。
CanSMControllerId:引用一个特定CAN掌握器的唯一标识符。(多重性:1)CanIf模块
CANIf模块位于通信栈中的通信做事层和通信驱动程序层之间。它卖力掌握CAN驱动程序模块的初始化,并在的吸收(CanIf_RxIndication)或传输(CanIf_TxConfirmation)时为CAN驱动程序模块供应关照做事。CANIf模块独立于硬件。
CanIfPublicCfg(多重性:1)
该容器包含CanIf的公共配置参数。
1、CanIfDevErrorDetect:如果设置为true,它将打开开拓缺点检测和关照功能。如果设置为false,则关闭。(多重性:1)
2、CanIfPublicVersionInfoApi:启用或禁用用于读取版本信息的API。(多重性:1)
该容器包含CanIf的专用配置参数。
1、CanIfPrivateDlcCheck:选择是否支持DLC检讨。如果启用,则如果该帧的DLC小于配置的DLC,则该帧将不会转发到上层。如果吸收到的帧的DLC大于或即是配置的DLC,则将帧转发到上层。
CanIfCtrlDrvCfg(多重性:1 ... )
它供应了根本CAN驱动程序模块的配置参数。一个CanIfDrvCfg引用一个Can Driver模块。CanIfInitCfg(多重性:)它包含CanIf的所有初始化参数。此容器至少有一个实例。它定义了所有与PDU干系的配置。
CanIfBufferCfg(多重性:0 ... )它是CanIfInitCfg的子容器。此容器包含传输缓冲区配置。必须为将用于传输帧的每个CanController添加此容器的一个实例。
CanIfTxPduCfg(多重性:0 ... )它是CanIfInitCfg的子容器。它包含发送CAN L-PDU的配置参数。每次须要发送CAN L-PDU时都要对其进行配置。
CanIfTxPduCanId:定义发送CAN标识符,11位标准帧或29位扩展帧。(多重性:1)CanIfTxPduCanIdType:定义发送CAN标识符的类型,是标准格式(11位)还是扩展格式(29位)。(多重性:1)3、CanIfTxPduDlc:定义发送L-PDU的数据长度(以字节为单位)。范围是0到8个字节。(多重性:1)
CanIfRxPduCfg(多重性:0 ... )
它是CanIfInitCfg的子容器。它包含每个吸收到的CAN L PDU的配置参数。
CanIfRxPduCanId:定义吸收CAN标识符,11位标准帧或29位扩展帧。(多重性:1)CanIfRxPduCanIdType:定义吸收CAN标识符的类型,是标准格式(11位)还是扩展格式(29位)。(多重性:1)CanIfRxPduDlc:定义吸收L-PDU的数据长度(以字节为单位)。范围是0到8个字节。(多重性:1)CAN驱动
该容器保存单个CAN驱动程序的配置参数。
CanGeneral(多重性:1)
供应模块范围的配置,个中包含常规的CanDevErrorDetection和CanVersionInfoApi。
1、CanDevErrorDetectio:启用/禁用开拓缺点检测和关照。(多重性:1)
2、CanVersionInfoApi:启用/禁用版本信息的API。(多重性:1)
CanConfigSet(多重性:1)
它包含CAN掌握器和CAN硬件工具的配置。它是CAN驱动程序的多配置集容器。CanController(多重性:1)
CanBusoffProcessing:设置busoff的处理办法,是中断还是轮询。=。(多重性:1)CanControllerActivation:定义CAN掌握器是否处于激活状态以进行配置。(多重性:1)CanControllerId:它供应每个CAN驱动程序唯一的掌握器ID。(多重性:1) CanRxProcessing:设置吸收的处理办法,是中断还是轮询。(多重性:1)CanTxProcessing:设置发送的处理办法,是中断还是轮询。(多重性:1)CanWakeupProcessing:设置唤醒的处理办法,是中断还是轮询。(多重性:1)CanControllerDefaultBaudrate:供应对Can Controller的波特率配置容器的引用。CanControllerBaudrateConfig(多重性:1 ... )该容器包含每个CAN掌握器与位时序干系的配置参数。CanControllerBaudRate:设置掌握器的波特率,以kbps为单位。(多重性:1)CanControllerPropSeg:它定义韶光量中的传播延迟。(多重性:1)CanControllerSeg1:它定义韶光段中的相位段1。(多重性:1)CanControllerSeg2:定义韶光段中的相位段2。(多重性:1)CanControllerSyncJumpWidth:它定义掌握器在韶光量上的同步跳转宽度。(多重性:1)。CanFilterMask(多重性:0 ... )
此容器包含CANFilterMask的配置参数。为CAN掌握器设置了ID掩码,以基于CAN id字段过滤出吸收到的CAN。总线上的所有ECU都吸收总线上传输的所有CAN数据包,但是它会根据其过滤器掩码过滤掉无关的数据包。
1、CanFilterMaskValue:它描述用于基于硬件的CAN标识符过滤的掩码值。如果EXTENDED或MIXED类型的CAN帧,则利用29位掩码,而对付STANDARD CAN帧类型,则利用11位掩码。