AUTOSAR的通信協(xié)議棧是由BSW通信服務(wù),通信硬件抽象和通信驅(qū)動程序組成。AUTOSAR COM是位于RTE和PduR之間的服務(wù)層模塊,主要用于與RTE之間的信號交互,對信號進行打包和解包。另外在該模塊中還可以配置IPDU的通信周期、通信周期偏移量、IPDU Group等。 PduR的作用是為通信協(xié)議棧中的不同總線的IPDU提供路由路徑。例如它將接收的IPDU路由至COM、Dcm等模塊,或者將COM模塊需要發(fā)送的IPDU路由至CanIf模塊,最后傳送至芯片的CAN Driver,將信號發(fā)送至總線。 Tp表示傳輸協(xié)議。該模塊是特定于總線,其配置取決于基礎(chǔ)總線協(xié)議,可以是CAN、LIN、CANFD等總線。該模塊主要用于長報文的分段發(fā)送,以及對分段報文進行重組。 總線狀態(tài)管理模塊負(fù)責(zé)相應(yīng)總線狀態(tài)機的管理和總線故障的處理。它可以基于CAN總線的CanSM,或者是基于LIN總線的LinSM等。 它是ECU抽象層的一部分。它可以是用于CAN收發(fā)器的CanTrcv,用于以太網(wǎng)收發(fā)器的EthTrcv,用于Flexray收發(fā)器的FrTrcv等。此模塊用于對收發(fā)器進行初始化配置,它提供獨立于控制器硬件的用于啟動傳輸?shù)姆?wù)和用于通知接收事件的回調(diào)函數(shù)。 該模塊是AUTOSAR MCAL層的一部分(例如:CanDrv,LinDrv,F(xiàn)rDrv),它實際上與ECU的底層硬件進行交互,并為其上層提供獨立于硬件的接口。此模塊取決于硬件,并且驅(qū)動程序代碼可能會根據(jù)基礎(chǔ)硬件而有所不同。BusIf是唯一可以訪問此總線驅(qū)動程序的模塊。CAN總線的COM配置實施下面我們來看看CAN通信協(xié)議棧,如下圖2所示,包括Com、PduR、CanTp、CanSm、CanIf、CAN Driver等模塊,其中COM與PduR模塊是通用的,其功能與總線銅線協(xié)議無關(guān)。 配置的COM模塊基本目的是在上層RTE層和下層PDU路由器之間建立系統(tǒng)通信,而不考慮通信協(xié)議。這可以通過定義和配置四個不同的對象來完成。I-PDU包含從通信棧中某一模塊接收到的消息或需要發(fā)送給某一模塊的消息。如果我們有大量的I-PDU,則可以將它們分為不同的組,通常至少分為兩個組,一個為TxGroup,一個為RxGroup。I-DPU可以包含一個或多個信號,可以理解為一個I-PDU為一幀CAN消息,信號就是dbc中定義的。 如果需要將多個信號發(fā)送到同一I-PDU,則信號可以進一步形成信號組。COM模塊包含兩個主要的部分,分別為ComGeneral和ComConfig。1、ComConfigurationUseDet:如果此布爾參數(shù)設(shè)置為ON,則任何當(dāng)COM模塊出現(xiàn)錯誤時,會調(diào)用Det_ReportError函數(shù),記錄在DET模塊中(多重性:0.1)。2、ComCancellationSupport:這是一個布爾參數(shù),用于啟用/禁用用于取消PDU傳輸請求的取消功能。(多重性:0.1)。3、ComEnableSignalGroupArrayApi:這是一個布爾參數(shù),用于激活/禁用信號組陣列訪問API。(多重性:1)。4、ComSupportedIPduGroups:它是一個整數(shù)參數(shù),用于說明所支持的IPDU組的最大數(shù)量。(多重性:1)。5、ComVersionInfoApi:布爾參數(shù),用于激活/禁用版本信息API Com_GetVersionInfo。(多重性:1)。6、ComRetryFailedTransmitRequests:如果此參數(shù)設(shè)置為true,則啟用重試失敗的傳輸請求。(多重性:0.1)。7、ComEnableMDTForCyclicTransmission:如果啟用此選項,則它將在I-PDU的循環(huán)傳輸和重復(fù)傳輸之間提供最小延遲時間監(jiān)視。(多重性:0.1)。它包含四個容器,分別為ComSignals、ComIPdus、ComIPduGroups、ComSignalGroups。它還具有用于傳輸模式配置,信號網(wǎng)關(guān)配置,時基配置和過濾器參數(shù)配置的配置參數(shù)。該容器用于為不同的IPDU參數(shù)提供定義,如果沒有該參數(shù),則無法通過COM模塊進行通信。ComIPdu也通過ComPduIdRef鏈接到PDU。I-PDU包含一個或多個信號和/或信號組。以下是ComIpdu的一些基本屬性。1、ComIPduHandleId:這是分配為該IPDU的ID的數(shù)字值。此ID用于在各種發(fā)送和接收API調(diào)用以及相應(yīng)的回調(diào)API中引用此IPDU。(多重性:0.1)。2、ComPduIdRef:它提供對COM棧的全局PDU結(jié)構(gòu)的引用。(多重性:1)。3、ComIPduGroupRef:它是指IPDU所屬的IPDU組。(多重性:0 ... *)。4、ComIPduSignalRef:提供對該IPDU中包含的所有信號的引用。一個IPDU可以包含一個或多個單獨的信號。(多重性:0 ... *)。、5、ComIPduSignalGroupRef:提供對此IPDU中包含的所有信號組的引用(多重性:0 ... *)6、ComIPduCallout:此參數(shù)可定義相應(yīng)I-PDU的callout函數(shù)的名稱,該函數(shù)在接收IPDU時或在發(fā)送PDU之前調(diào)用。(多重性:0 ... 1)。7、ComIPduDirection:定義I-PDU是為發(fā)送(SEND)PDU還是為接收(RECEIVE)PDU。(多重性:1)。8、ComIPduSignalProcessing: 用于配置信號是立即處理還是周期性處理,分別對應(yīng)immediate或DEFERRED模式。(多重性:1)。如果將ComIPduDirection設(shè)置為SEND,則需要設(shè)置其他參數(shù),例如傳輸是周期的還是混合型的等等。這是通過添加ComTxIPdu對象來添加的。它包含COM模塊的IPDU組的配置參數(shù)。如果不包含ComIPduGroup容器,則未定義IPDU組。在這種情況下,無法通過COM模塊進行通信。(多重性:1)1、ComIPduGroupHandleId:用作此IPDU組ID的數(shù)值。API調(diào)用需要它來啟動和停止IPDU組。(多重性:1)2、ComIPduGroupGroupRef:它提供對包括該IPDU組的所有IPDU組的引用。(多重性:0 ... *)IPDU可以由一個或多個信號組成。來自RTE不同應(yīng)用程序的這些信號在被傳輸?shù)絇duR之前被打包到PDU中。該容器提供各種參數(shù)來配置PDU中的信號位位置,信號位大小和其他屬性。1、ComHandleId:這是分配給每個信號ID的數(shù)字值。與信號操作有關(guān)的不同API調(diào)用需要它。(多重性:0 ... 1)。2、ComTimeoutFactor:它定義了監(jiān)視的超時時間。(多重性:0..1)3、ComTransferProperty:以下選項定義此信號是否可以觸發(fā)相應(yīng)IPDU的傳輸;(多重性:0 ... 1)我們可以設(shè)置以下五個選項之一: TRIGGERED PENDING TRIGGERED_ON_CHANGE, TRIGGERED_WITHOUT_REPETITION TRIGGERED_ON_CHANGE_WITHOUT_REPETITION4、ComBitPosition:指出信號在IPDU中的開始位置,(多重性:1)。 5、ComBitSize:它定義信號的大小(以位為單位)。(多重性:0 ... 1)6、ComSignalEndianess:定義信號網(wǎng)絡(luò)表示的字節(jié)排序??梢允荁IG_ENDIAN,LITTLE_ENDIAN,OPAQUE。(多重性:0 ... 1)7、ComSignalInitValue:用于設(shè)置信號的初始值。(多重性:0 ... 1)8、ComSignalLength:它指定UINT8 [n]類型的n(以字節(jié)為單位:1 ... 8)。對于其他類型,它將被忽略。(多重性:0 ... 1)9、ComSignalType:它指定符合BOOTEAN,SINT8,UINT8等。(多重性:1) 10、ComTimeoutNotification:定義發(fā)生超時時在發(fā)送方或接收方要調(diào)用的函數(shù)的名稱(多重性:0 ... 1)然后,當(dāng)我們需要向同一IPDu發(fā)送或接收多個信號時,可以將這些信號組合在一起以形成一個信號組。此容器包含名稱與ComSignal容器相似的參數(shù),并且對信號組具有完全相同的作用。因此,在本節(jié)中,我僅提及參數(shù)名稱,要了解其行為,請參閱ComSignal部分。- ComTimeoutFactor(多重性:0 ... 1)
- ComFirstTimeoutFactor(多重性:0 ... 1)
- ComTransferProperty(多重性:0 ... 1)
- ComNotification(多重性:0 ... 1)
- ComInvalidNotification(多重性:0 ... 1)
- ComErrorNotification(多重性:0 ... 1)
- ComTimeoutNotification(多重性:0 ... 1)
PduR負(fù)責(zé)將PDU路由到特定的總線接口。在PduR之上的所有層中,所有PDU都是獨立于協(xié)議的。在PduR之下的所有PDU都屬于特定的協(xié)議接口模塊,PduR模塊為主要容器提供以下參數(shù)配置。PduRBswModules(多重性:0 ... *)每個容器都描述了PDU路由器必須連接的特定BSW模塊。添加PduRBswModule時,容器的簡稱必須與Bsw模塊的名稱匹配,例如CanIf。這是PduR模塊的子容器,它指定PDU路由器的常規(guī)配置參數(shù)。以下是一些基本配置參數(shù)。1、PduRDevErrorDetect:如果啟用,它將默認(rèn)錯誤跟蹤器(Det)檢測和通知打開。(多重性:1)2、PduRVersionInfoApi:如果設(shè)置為true,則PduR_GetVersionInfo API可用。(多重性:1)它表示路由路徑表。此路由表允許使用多個配置,這些配置用于在同一配置中創(chuàng)建多個路由表。1、PduRConfigurationId:它提供了使用PduR API讀取的PduR配置的配置的標(biāo)識。(多重性:1)2、PduRMaxRoutingPathCnt:給出所有路由表中最大路由路徑數(shù)。(多重性:1)3、PduRMaxRoutingTableCnt:它給出了路由表的最大數(shù)量。(多重性:1)這是PduRRoutingPath容器的子容器,它指定要路由的PDU的源。1、PduRSourcePduHandleId:這是PDU路由器分配的PDU標(biāo)識符。(多重性:1)2、PduRSrcPduRef:此參數(shù)提供對唯一PDU標(biāo)識符的引用,該標(biāo)識符表示PDU的源地址。(多重性:1)這是PduRRoutingPath容器的子容器,并為要路由的PDU指定一個目的地。1、PduRDestPduHandleId:由PDU路由器分配的PDU標(biāo)識符,通信接口和傳輸協(xié)議模塊使用該PDU標(biāo)識符進行確認(rèn)。(多重性:0 ... 1)2、PduRDestPduDataProvision:此參數(shù)指定如何以 PDU_DIRECT或PDUR_TRIGGERTRANSMIT提供數(shù)據(jù)。(多重性:0 ... 1)3、PduRDestPduRef:它提供參考唯一的PDU標(biāo)識符,表示PDU路由的目的地(多重性:1)4、PduRDestTxBufferRef:提供對用于單幀路由的通信接口網(wǎng)關(guān)和傳輸協(xié)議網(wǎng)關(guān)所需的緩沖區(qū)的引用。(多重性:0 ... 1)CAN狀態(tài)管理器(CanSM)是通信服務(wù)層的成員,該層與通信硬件抽象層和系統(tǒng)服務(wù)層進行交互。CanSM模塊負(fù)責(zé)CAN狀態(tài)機的管理,包括CanTrcv、CanIf、CAN Driver的狀態(tài)機切換。CanSM模塊具有以下容器用于其配置。它包含CanSM模塊的通用預(yù)配置參數(shù)。1、CanSMDevErrorDetect:用于打開或關(guān)閉開發(fā)錯誤檢測API是否可以調(diào)用。(多重性:1)2、CanSMMainFunctionTimePeriod:它定義MainFunction的循環(huán)周期(單位為秒)(多重性:1)3、CanSMVersionInfoApi:用于打開或關(guān)閉版本信息API CanSM_GetVersionInfo。(多重性:1)CanSMManagerNetwork(多重性:1 ... *)該容器包含用于確定底層CanController(即每個CAN網(wǎng)絡(luò))處理方式的CAN網(wǎng)絡(luò)特定參數(shù)。1、CanSMModeRequestRepetitionTime:它確定CanSM模塊將使用CanIf模塊的API重復(fù)模式更改請求的持續(xù)時間。(多重性:1)2、CanSMModeRequestRepetitionMax:它確定模式請求重復(fù)的最大次數(shù),如果超過次數(shù)CanSM模塊向Det報告開發(fā)錯誤。(多重性:1)每個CAN網(wǎng)絡(luò)的CanSMConfiguration容器都有一個CanSMManagerNetwork。它包含每個CAN網(wǎng)絡(luò)的CAN網(wǎng)絡(luò)特定參數(shù)。1、CanSMBorCounterL1ToL2:它定義總線斷開錯誤的計數(shù),從快恢復(fù)切換到慢恢復(fù)的門檻值。(多重性:1)2、CanSMBorTimeL1:以秒為單位,定義快恢復(fù)的持續(xù)時間。(多重性:1)2、CanSMBorTimeL2:以秒為單位,定義慢恢復(fù)的持續(xù)時間。(多重性:1)CanSMController(多重性:1 ... *)1、CanSMControllerId:引用一個特定CAN控制器的唯一標(biāo)識符。(多重性:1)CANIf模塊位于通信棧中的通信服務(wù)層和通信驅(qū)動程序?qū)又g。它負(fù)責(zé)控制CAN驅(qū)動程序模塊的初始化,并在消息的接收(CanIf_RxIndication)或傳輸(CanIf_TxConfirmation)時為CAN驅(qū)動程序模塊提供通知服務(wù)。CANIf模塊獨立于硬件。1、CanIfDevErrorDetect:如果設(shè)置為true,它將打開開發(fā)錯誤檢測和通知功能。如果設(shè)置為false,則關(guān)閉。(多重性:1)2、CanIfPublicVersionInfoApi:啟用或禁用用于讀取版本信息的API。(多重性:1)1、CanIfPrivateDlcCheck:選擇是否支持DLC檢查。如果啟用,則如果該幀的DLC小于配置的DLC,則該幀將不會轉(zhuǎn)發(fā)到上層。如果接收到的幀的DLC大于或等于配置的DLC,則將幀轉(zhuǎn)發(fā)到上層。CanIfCtrlDrvCfg(多重性:1 ... *)1、它提供了基礎(chǔ)CAN驅(qū)動程序模塊的配置參數(shù)。一個CanIfDrvCfg引用一個Can Driver模塊。它包含CanIf的所有初始化參數(shù)。此容器至少有一個實例。它定義了所有與PDU相關(guān)的配置。CanIfBufferCfg(多重性:0 ... *)它是CanIfInitCfg的子容器。此容器包含傳輸緩沖區(qū)配置。必須為將用于傳輸幀的每個CanController添加此容器的一個實例。CanIfTxPduCfg(多重性:0 ... *)它是CanIfInitCfg的子容器。它包含發(fā)送CAN L-PDU的配置參數(shù)。每次需要發(fā)送CAN L-PDU時都要對其進行配置。1、CanIfTxPduCanId:定義發(fā)送CAN標(biāo)識符,11位標(biāo)準(zhǔn)幀或29位擴展幀。(多重性:1)2、CanIfTxPduCanIdType:定義發(fā)送CAN標(biāo)識符的類型,是標(biāo)準(zhǔn)格式(11位)還是擴展格式(29位)。(多重性:1)3、CanIfTxPduDlc:定義發(fā)送L-PDU的數(shù)據(jù)長度(以字節(jié)為單位)。范圍是0到8個字節(jié)。(多重性:1)CanIfRxPduCfg(多重性:0 ... *)它是CanIfInitCfg的子容器。它包含每個接收到的CAN L PDU的配置參數(shù)。- CanIfRxPduCanId:定義接收CAN標(biāo)識符,11位標(biāo)準(zhǔn)幀或29位擴展幀。(多重性:1)
- CanIfRxPduCanIdType:定義接收CAN標(biāo)識符的類型,是標(biāo)準(zhǔn)格式(11位)還是擴展格式(29位)。(多重性:1)
- CanIfRxPduDlc:定義接收L-PDU的數(shù)據(jù)長度(以字節(jié)為單位)。范圍是0到8個字節(jié)。(多重性:1)
該容器保存單個CAN驅(qū)動程序的配置參數(shù)。提供模塊范圍的配置,其中包含常規(guī)的CanDevErrorDetection和CanVersionInfoApi。1、CanDevErrorDetectio:啟用/禁用開發(fā)錯誤檢測和通知。(多重性:1)2、CanVersionInfoApi:啟用/禁用版本信息的API。(多重性:1)它包含CAN控制器和CAN硬件對象的配置。它是CAN驅(qū)動程序的多配置集容器。- CanBusoffProcessing:設(shè)置busoff的處理方式,是中斷還是輪詢。=。(多重性:1)
- CanControllerActivation:定義CAN控制器是否處于激活狀態(tài)以進行配置。(多重性:1)
- CanControllerId:它提供每個CAN驅(qū)動程序唯一的控制器ID。(多重性:1)
- CanRxProcessing:設(shè)置接收的處理方式,是中斷還是輪詢。(多重性:1)
- CanTxProcessing:設(shè)置發(fā)送的處理方式,是中斷還是輪詢。(多重性:1)
- CanWakeupProcessing:設(shè)置喚醒的處理方式,是中斷還是輪詢。(多重性:1)
- CanControllerDefaultBaudrate:提供對Can Controller的波特率配置容器的引用。
CanControllerBaudrateConfig(多重性:1 ... *)該容器包含每個CAN控制器與位時序相關(guān)的配置參數(shù)。- CanControllerBaudRate:設(shè)置控制器的波特率,以kbps為單位。(多重性:1)
- CanControllerPropSeg:它定義時間量中的傳播延遲。(多重性:1)
- CanControllerSeg1:它定義時間段中的相位段1。(多重性:1)
- CanControllerSeg2:定義時間段中的相位段2。(多重性:1)
- CanControllerSyncJumpWidth:它定義控制器在時間量上的同步跳轉(zhuǎn)寬度。(多重性:1)。
CanFilterMask(多重性:0 ... *)此容器包含CANFilterMask的配置參數(shù)。為CAN控制器設(shè)置了ID掩碼,以基于CAN id字段過濾出接收到的CAN消息。總線上的所有ECU都接收總線上傳輸?shù)乃蠧AN數(shù)據(jù)包,但是它會根據(jù)其過濾器掩碼過濾掉無關(guān)的數(shù)據(jù)包。1、CanFilterMaskValue:它描述用于基于硬件的CAN標(biāo)識符過濾的掩碼值。如果EXTENDED或MIXED類型的CAN幀,則使用29位掩碼,而對于STANDARD CAN幀類型,則使用11位掩碼。(多重性:1)
|