一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

AUTOSAR通信之CanIf模塊簡介2

jf_78858299 ? 來源:汽車控制與人工智能 ? 作者:Demu ? 2023-02-13 14:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

發(fā)送請求服務

CanIf的發(fā)送請求函數(shù)CanIf_Transmit()是上層模塊傳輸L-PDU的通用接口。上層通信層模塊需要通過CanIf的服務啟動傳輸,無法直接訪問CanDrv。如果CanDrv能夠?qū)-PDU數(shù)據(jù)寫入CAN硬件傳輸對象中,則發(fā)起的傳輸請求成功完成。上層模塊使用API服務CanIf_Transmit ()來發(fā)起一個傳輸請求。

CanIf在調(diào)用服務CanIf_Transmit()時對L-PDU傳輸執(zhí)行以下操作:

  • 檢查,初始化CanIf的狀態(tài)
  • 當使用多個CanDrv時,識別CanDrv
  • 確定訪問CAN硬件傳輸對象的HTH
  • 調(diào)用CanDrv的Can_Write()

如果傳輸請求服務CanIf_Transmit()返回E_OK,則傳輸成功完成。

如果一個L-PDU被請求通過一個PDU通道模式來傳輸,這個模式等于CANIF_OFFLINE,那么CanIf應該向DET的Det_ReportRuntimeError()服務報告運行時的錯誤代碼CANIF_E_STOPPED,而CanIf_Transmit() 將返回E_NOT_OK。

發(fā)送數(shù)據(jù)流

發(fā)送請求服務CanIf_Transmit ()是基于L-PDU的。對L-SDU特定數(shù)據(jù)的訪問按以下參數(shù)組織:

  • 傳輸L-PDU =>L-SDU ID
  • 引用包含L-SDU相關數(shù)據(jù)的數(shù)據(jù)結構:指向L-SDU的指針,指向元數(shù)據(jù)的指針和L-SDU長度。

對L-SDU數(shù)據(jù)結構的引用被用作幾個CanIf API服務中的一個參數(shù),例如CanIf_Transmit()或回調(diào)服務 ()。如果L-PDU配置為觸發(fā)傳輸,則L-SDU指針為空指針。

圖片

圖3 發(fā)送數(shù)據(jù)流

CanIf會存儲為傳輸而配置的硬件對象信息。函數(shù)CanIf_Transmit()將CanTxPduId映射到對應的HTH,并調(diào)用函數(shù)Can_Write()。

如果總線鏡像是全局啟用的CanIfBusMirroringSupport(),并且通過調(diào)用CAN控制器的CanIf_EnableBusMirroring()來激活,那么CanIf通過Can_Write()在控制器上傳輸每幀內(nèi)容之前將其存儲。只有在實際發(fā)送時,才提供總線鏡像模塊。因此,為了能夠從CanIf_TxConfirmation()將其提供給總線鏡像模塊,必須考慮存儲內(nèi)容。

發(fā)送緩沖

在CanIf的范圍內(nèi),傳輸過程從調(diào)用CanIf_Transmit()開始,到調(diào)用上層模塊的回調(diào)服務()結束。在傳輸過程中,CanIf、CanDrv和CAN Mailbox一起存儲L-PDU,只在一個位置傳輸一次。根據(jù)傳送方式的不同,分為:

  • CAN硬件傳輸對象
  • 如果發(fā)送緩沖使能,發(fā)送L-PDU緩沖區(qū)在CanIf內(nèi)。

對于觸發(fā)傳輸,CanIf只需要存儲給定L-PDU的傳輸請求,而不需要存儲它的數(shù)據(jù)。當HTH空閑時,通過觸發(fā)器傳遞函數(shù)及時獲取數(shù)據(jù)。一個單獨的發(fā)送 L-PDU,請求傳輸,永遠不會被存儲兩次。這種行為對應于CAN網(wǎng)絡上常用的周期性通信方式。

如果CanIf在傳輸請求時被CanDrv拒絕,CanIf將啟用傳輸緩沖,并將在傳輸L-PDU緩沖區(qū)(CanIfBufferCfg)中存儲一個發(fā)送 L-PDU。

基本上,用于緩沖發(fā)送L-PDU的整個CanIf中的緩沖區(qū)包含一個或多個CanIfBufferCfg。而每個CanIfBufferCfg被分配給一個或多個專用的CanIfBufferHthRef,可以配置為緩沖一個或多個發(fā)送I-PDU。但是,在CanIfBufferCfg的總體數(shù)量中,每個發(fā)送 L-PDU只能緩沖一個實例。

在相應的發(fā)送 L-PDU配置中是否啟用傳輸緩沖,CanIf在L-PDU傳輸期間對應的行為是不同的。如果發(fā)送緩沖被禁用,并且發(fā)送到CanDrv的請求失敗,那么L-PDU不會被復制到CAN控制器,CanIf_Transmit()將返回值E_NOT_OK。如果啟用了傳輸緩沖,并且發(fā)送到CanDrv的請求失敗,根據(jù)CanIfTxBuffer配置,L-PDU可以存儲在CanIfTxBuffer中。在這種情況下,盡管無法執(zhí)行傳輸,API CanIf_Transmit()返回E_OK值。在這種情況下,CanIf通過CanIf_TxConfirmation()回調(diào)和處理L-PDU未完成的傳輸,而上層不必重試傳輸請求。

傳輸CanIf 發(fā)送L-PDU緩沖區(qū)的數(shù)量,可以獨立于CAN網(wǎng)絡描述文件中定義的傳輸L-PDU的數(shù)量來配置。

發(fā)送L-PDU通過CanIfBufferCfg配置容器引用HTH,如果不需要傳輸緩沖,也是有效的。在這種情況下,必須將CanIfBufferCfg的緩沖區(qū)大小設置為0,然后CanIfBufferCfg配置容器僅用于引用一個HTH。

發(fā)送確認服務

如果前一個傳輸請求成功完成,CanDrv會通過調(diào)用CanIf_TxConfirmation()將其通知給CanIf。

如果對于CAN控制器,啟用了全局總線鏡像CanIfBusMirroringSupport和激活調(diào)用CanIf_EnableBusMirroring(), CanIf將會調(diào)用Mirror_ReportCanFrame()對每一幀傳輸控制器確認CanIf_TxConfirmation(),提供存儲內(nèi)容和實際的ID。

調(diào)用回調(diào)函數(shù)CanIf_TxConfirmation()時,CanIf標識與成功傳輸L-PDU相連的上層通信層,通過調(diào)用CanIf的傳輸確認服務(E_OK)來通知其傳輸執(zhí)行情況。回調(diào)服務()是由通知的上層模塊實現(xiàn)的。

可以配置上層通信層模塊,通過對不同的I-PDU或I-PDU組使用單個或多個回調(diào)服務來處理發(fā)送確認。所有那些服務在發(fā)送確認L-PDU傳輸請求時,會被CanIf調(diào)用。傳輸L-PDU允許分派與目標上層模塊關聯(lián)的不同確認服務,該分配是在靜態(tài)配置期間完成。

一個發(fā)送L-PDU只能分配給一個發(fā)送確認回調(diào)服務。

如果啟用了CanIfPublicTxConfirmPollingSupport,那么每個CAN控制器的模式處于CAN_CS_STARTED狀態(tài),CanIf將緩沖接收到的TxConfirmation的信息。

接收指示服務

根據(jù)AUTOSAR BSW架構,接收到的數(shù)據(jù)將在上層通信模塊,即AUTOSAR COM、CanNm、CanTp和DCM中進行評估和處理。這意味著,上層模塊既不能使用CanDrv的緩沖區(qū),也不能訪問CanIf的緩沖區(qū)。只有當CanIfPublicReadRxPduDataApi設置為TRUE時,CanIf才會在接收路徑中提供內(nèi)部緩沖。解決了發(fā)送緩沖問題,并考慮動態(tài)I-PDU。

如果接收到CanDrv L-PDU,則調(diào)用CanIf的CanIf_RxIndication ()。對L-PDU特定數(shù)據(jù)的訪問由以下參數(shù)組織:

  • 硬件接收句柄(HRH)
  • 接收CAN標識符(CanId)
  • 接收數(shù)據(jù)長度
  • 參考已收到的L-PDU

接收到的L-PDU依賴于硬件,并分配給通信系統(tǒng)的最低層CanDrv。HRH是CanDrv和使用L-PDU的上層模塊之間的鏈接。HRH標識CAN硬件接收句柄,接收新的CAN L-PDU。

在CanDrv調(diào)用CanIf_RxIndication(),指示接收到的L-PDU后,CanIf將按照接收指示進行處理。CanIf無法識別CanDrv是使用臨時緩沖還是直接訪問硬件。它期望在調(diào)用CanIf_RxIndication()時得到標準化的L-PDU數(shù)據(jù)。

CAN硬件接收句柄被鎖定,直到復制到臨時或上層模塊緩沖區(qū)的過程結束。硬件對象將在CanIf的CanIf_RxIndication()返回后立即釋放,以避免數(shù)據(jù)丟失。

CanDrv、CanIf和屬于接收到L-PDU的上層模塊訪問相同的臨時緩沖區(qū),該臨時緩沖區(qū)可以位于CAN控制器的硬件接收對象中,也可以位于CanDrv中的臨時緩沖區(qū)中。

圖片

圖4 接收的信號

調(diào)用CanIf_RxIndication()引用新接收到的L-PDU的參數(shù),如果調(diào)用了函數(shù)CanIf_RxIndication(),CanIf將對CAN L-PDU進行評估接收,并準備L-SDU供上層通信層訪問。CanIf使用()通知上層模塊這個異步事件,如果配置成功,并且檢測到L-PDU進行處理。

如果總線鏡像是全局啟用的,并且通過調(diào)用CAN控制器的CanIf_EnableBusMirroring()激活,那么CanIf應該為該控制器上用CanIf_RxIndication()來表示的每一幀接收調(diào)用Mirror_ReportCanFrame()。

如果調(diào)用函數(shù)CanIf_RxIndication(),CanIf會按照指定的方式處理接收到的L-PDU。如果軟件過濾拒絕接收到的L-PDU,CanIf會結束對canif_rxindicator()調(diào)用的接收指示。

如果CanIf在軟件過濾過程中接受通過CanIf_RxIndication()接收到的L-PDU, CanIf隨后會處理數(shù)據(jù)長度檢查。如果CanIf在數(shù)據(jù)長度檢查期間使用CanIf_RxIndication()接收L-PDU, CanIf將根據(jù)配置的數(shù)據(jù)長度的字節(jié)數(shù)復制到靜態(tài)接收緩沖區(qū)。

如果為接收的L-SDU配置了元數(shù)據(jù),CanIf將PDU有效負載復制到靜態(tài)接收緩沖區(qū),并將CANID復制到類型為CAN_ID_32的MetaDataItem。

在數(shù)據(jù)長度檢查期間,如果CanIf接受通過CanIf_RxIndication()接收到的L-PDU,CanIf會識別是否配置了目標上層模塊(CanIfRxPduUserRxIndicationUL,CanIfRxPduUserRxIndicationName),并為接收到的L-SDU提供接收指示服務。

如果目標上層模塊被配置為提供接收指示服務,CanIf稱之為配置接收指示回調(diào)服務CanIfRxPduUserRxIndicationName,提供所需的參數(shù)上層通知回調(diào)函數(shù)的參數(shù)CanIf_RxIndication ()。

CanIf在調(diào)用CanIf_RxIndication()時執(zhí)行以下步驟:

  • 軟件過濾(只有BasicCAN)
  • 數(shù)據(jù)長度檢查
  • 緩沖接收L-SDU
  • 調(diào)用上層接收指示回調(diào)服務

讀取接收到的數(shù)據(jù)APICanIf_ReadRxPduData()是上層模塊讀取CANL-SDU最近從CAN網(wǎng)絡接收到的公共接口。上層模塊只通過CanIf服務發(fā)起接收請求,而不直接訪問CanDrv。發(fā)起的接收請求成功完成,CanIf將接收到的L-SDU寫入上層模塊I-PDU緩沖區(qū)。

函數(shù)CanIf_ReadRxPduData()使得在不依賴接收事件的情況下讀取數(shù)據(jù)成為可能。在配置時啟用它,不一定為相同L-SDU配置接收指示服務。如果需要,可以啟用接收指示服務。

通過這種方式的類型機制獲得L-SDU,可以選擇由參數(shù)CanIfRxPduUserRxIndicationUL和CanIfRxPduReadData,在配置時根據(jù)上層模塊的需求,相應的接收L-SDU。

如果配置參數(shù)CanIfPublicReadRxPduDataApi設置為TRUE,則CanIf將接收到的L-SDU(在此情況下CanIfRxPduReadData是啟用的)存儲到接收到的L-SDU緩沖區(qū)。這意味著,如果配置參數(shù)CanIfRxPduReadData設置為TRUE,CanIf必須為這個接收L-SDU分配接收L-SDU緩沖區(qū)。

在調(diào)用CanIf_RxIndication()并通過軟件過濾和數(shù)據(jù)長度檢查后,CanIf將接收到的L-SDU存儲在這個接收到的L-SDU緩沖區(qū)中。在調(diào)用CanIf_ReadRxPduData()指定的接收L-SDU緩沖區(qū)時,CanIf應避免搶占接收L-SDU緩沖區(qū)的訪問事件。

控制器模式控制服務

CanIf提供用于控制由CanDrv支持的CAN控制器通信模式的服務。這意味著所有CAN控制器都由相應的API服務來控制,以請求和讀取當前控制器模式。

可以通過調(diào)用CanIf_SetControllerMode()服務,來根據(jù)上層的請求更改CAN控制器狀態(tài)。請求通過CanIf經(jīng)過CanDrv API傳遞到指定的CAN控制器。在CAN網(wǎng)絡上對所有CAN控制器的一致性管理是CanSm的任務。通過這種方式,CanSm負責將CAN網(wǎng)絡的所有CAN控制器按順序設置為睡眠模式或喚醒。

CanIf通過調(diào)用函數(shù)CanIf_SetControllerMode()或CanIf_ControllerBusOff()接受每個狀態(tài)轉(zhuǎn)換請求。CanIf不決定CAN控制器請求的模式轉(zhuǎn)換是否有效。CanIf僅通過獲取當前模式和執(zhí)行請求的模式轉(zhuǎn)換來與CanDrv交互。

該網(wǎng)絡相關狀態(tài)機在CanSm中實現(xiàn)。CanIf只存儲請求的模式并執(zhí)行請求的轉(zhuǎn)換。

為了避免頻繁請求CanDrv,可以對每個控制器存儲CanIf_ControllerModeIndication()和Can_GetControllerMode()所指示的最后狀態(tài)。需要注意的是,不僅CanSm能夠請求CAN控制器模式的改變。根據(jù)CanSm請求的操作模式,CanIf轉(zhuǎn)發(fā)請求CanDrvs。

如果ControllerId引用的控制器模式處于CAN_CS_STOPPED狀態(tài),并且如果CanIf_Transmit()調(diào)用中的PduIdType參數(shù)被分配給該CAN控制器,那么CanIf_Transmit()調(diào)用不會導致Can_Write()調(diào)用,而是返回E_NOT_OK。如果ControllerId引用的控制器模式進入CAN_CS_STOPPED狀態(tài),CanIf會清除分配給CAN控制器相應的CanIf傳輸緩沖區(qū)。

如果ControllerId引用的控制器模式進入CAN_CS_STOPPED狀態(tài),那么CanIf通過調(diào)用(id, E_NOT_OK)為分配給CAN控制器的每個未完成的TxConfirmation,通知相應的上層模塊傳輸失敗。如果啟用了CanIfPublicTxConfirmPollingSupport,那么CanIf還會清除關于TxConfirmation的信息。

這確保了對于每個PDU,都會調(diào)用一個正的或負的()。當調(diào)用回調(diào)CanIf_ControllerBusOff(ControllerId)時,CanIf調(diào)用CanSm或CDD的CanSM_ControllerBusOff(ControllerId)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 收發(fā)器
    +關注

    關注

    10

    文章

    3664

    瀏覽量

    107743
  • CAN
    CAN
    +關注

    關注

    57

    文章

    2907

    瀏覽量

    467345
  • 路由器
    +關注

    關注

    22

    文章

    3834

    瀏覽量

    116419
  • PDU
    PDU
    +關注

    關注

    0

    文章

    96

    瀏覽量

    17290
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    AUTOSAR MCAL MCU模塊的相關資料分享

    簡介MCU驅(qū)動程序提供微控制器初始化,掉電功能,復位和微控制器其他MCAL軟件模塊所需的特定功能的服務(這里主要指那些公共寄存器的設置)。需要注意的是,啟動代碼和用于升級的Bootloader是不在AUTOSAR負責范圍內(nèi)的,
    發(fā)表于 11-03 08:18

    AUTOSAR的相關資料推薦

    AUTOSAR基礎篇EcuM_wto9109的博客-CSDN博客【AutoSAR】【EcuM】ECU狀態(tài)管理專注汽車軟件開發(fā)、AutoSAR、車載以太網(wǎng)、SOA、EE架構。07-08
    發(fā)表于 01-27 08:25

    AUTOSAR_MCAL_CAN_IM.pdf提示找不到 config/CanIf.xdm怎么解決?

    AUTOSAR_MCAL_CAN_IM.pdf 文件中聲明還需要 CanIf 插件來實現(xiàn) CAN 插件。但是,當我嘗試在 Tresos 上添加 CanIf 模塊時,它給出了一個錯誤
    發(fā)表于 03-30 08:48

    AUTOSAR通信CanIf模塊簡介1

    CAN接口模塊(下文簡“CanIf”)位于底層CAN驅(qū)動(CanDrv)、CAN收發(fā)器(CanTrcv)和上層通信服務層(CanSm、CanNm)、CAN傳輸協(xié)議(CanTp)、PDU路由器(PduR)之間。它表示上層
    的頭像 發(fā)表于 02-13 14:29 ?4874次閱讀
    <b class='flag-5'>AUTOSAR</b><b class='flag-5'>通信</b><b class='flag-5'>之</b><b class='flag-5'>CanIf</b><b class='flag-5'>模塊</b><b class='flag-5'>簡介</b>1

    AUTOSAR通信CanIf模塊簡介3

    CAN接口模塊(下文簡“CanIf”)位于底層CAN驅(qū)動(CanDrv)、CAN收發(fā)器(CanTrcv)和上層通信服務層(CanSm、CanNm)、CAN傳輸協(xié)議(CanTp)、PDU路由器(PduR)之間。它表示上層
    的頭像 發(fā)表于 02-13 14:29 ?4346次閱讀
    <b class='flag-5'>AUTOSAR</b><b class='flag-5'>通信</b><b class='flag-5'>之</b><b class='flag-5'>CanIf</b><b class='flag-5'>模塊</b><b class='flag-5'>簡介</b>3

    AutosarBSWM配置簡介

    AUTOSAR基礎軟件層主要用于提供基礎軟件服務,包括標準化的系統(tǒng)功能以及功能接口,并且由一系列的基礎服務軟件組件構成,包括系統(tǒng)服務、內(nèi)存服務、通信服務等。
    的頭像 發(fā)表于 05-26 11:15 ?2006次閱讀
    <b class='flag-5'>Autosar</b><b class='flag-5'>之</b>BSWM配置<b class='flag-5'>簡介</b>

    AUTOSAR通信協(xié)議棧配置詳解

    通訊協(xié)議棧幾乎是CP AUTOSAR中最龐雜的一塊。由于其涉及的模塊比較多(僅實現(xiàn)CAN信號的收發(fā)就需要ECUC/CAN/CANIF/CANTP/PDUR/COM/XCP這么多模塊的協(xié)
    的頭像 發(fā)表于 09-21 10:02 ?7953次閱讀
    <b class='flag-5'>AUTOSAR</b>中<b class='flag-5'>通信</b>協(xié)議棧配置詳解

    AUTOSAR軟件開發(fā)流程簡介

    軟件功能和性能要求。這包括確定軟件組件、接口和模塊的功能和規(guī)格要求。 架構設計:在這個階段,根據(jù)需求分析的結果,設計AUTOSAR軟件的整體架構。這包括定義軟件組件的功能和接口,以及確定軟件模塊的分層結構和
    的頭像 發(fā)表于 10-27 15:55 ?3736次閱讀
    <b class='flag-5'>AUTOSAR</b>軟件開發(fā)流程<b class='flag-5'>簡介</b>

    AUTOSAR通信協(xié)議解析 如何實現(xiàn)AUTOSAR通信

    AUTOSAR(Automotive Open System Architecture)即汽車開放系統(tǒng)架構,該架構支持汽車電子控制單元(ECU)之間的通信,實現(xiàn)了高度模塊化和可重用性。AUTO
    的頭像 發(fā)表于 12-17 14:54 ?2696次閱讀

    AUTOSAR通信組件介紹 AUTOSAR通信層功能分析

    AUTOSAR通信組件介紹 AUTOSAR(AUTomotive Open System ARchitecture)是一個全球性的汽車軟件架構合作伙伴計劃,旨在創(chuàng)建和建立一個開放的標準化軟件架構,以
    的頭像 發(fā)表于 12-17 14:55 ?1434次閱讀

    AUTOSAR通信與CAN協(xié)議的關系

    的概念,允許應用層組件(如軟件組件和ECU抽象層)通過定義良好的接口進行通信。 1. 通信服務: AUTOSAR提供了一系列通信服務,包括復雜驅(qū)動
    的頭像 發(fā)表于 12-17 14:57 ?949次閱讀

    AUTOSAR通信框架的優(yōu)勢 AUTOSAR通信實例與應用場景

    AUTOSAR通信框架的優(yōu)勢 AUTOSAR(AUTomotive Open System ARchitecture)是一個全球性的汽車軟件架構合作伙伴計劃,旨在創(chuàng)建并建立一個開放的標準化軟件架構
    的頭像 發(fā)表于 12-17 14:58 ?953次閱讀

    AUTOSAR通信堆棧的配置 AUTOSAR通信模塊測試方法

    )的開發(fā)和生產(chǎn)。通信堆棧是AUTOSAR架構中的關鍵組成部分,負責處理ECU之間的通信。 AUTOSAR通信堆棧的配置
    的頭像 發(fā)表于 12-17 15:01 ?902次閱讀

    AUTOSAR通信實現(xiàn)中的常見問題

    配置與使用問題 通信協(xié)議棧模塊理解不足 問題 :開發(fā)者可能對AUTOSAR通信協(xié)議棧的組成模塊(如Com、Dcm、PduR、IpduM、TP
    的頭像 發(fā)表于 12-17 15:03 ?1071次閱讀

    AUTOSAR通信與網(wǎng)絡安全 AUTOSAR通信在車輛中的應用

    隨著汽車行業(yè)的發(fā)展,車輛的電子化和智能化水平不斷提高,這使得車輛的通信系統(tǒng)變得日益復雜。AUTOSAR(AUTomotive Open System ARchitecture)是一個全球性的汽車軟件
    的頭像 發(fā)表于 12-17 15:06 ?877次閱讀