在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

CAN、LIN報文的發送過程詳解

832065824 ? 來源:汽車電子嵌入式 ? 作者:汽車電子嵌入式 ? 2022-11-14 10:02 ? 次閱讀

前言

最近在研究AUTOSAR通信協議棧的時候發現對IPDU的Trigger Transmit很是疑惑,產生了以下幾個問題:

(1)Com模塊的IPDU的trigger發送和CanIf或者Can模塊的Trigger發送一樣嗎?

(2)怎么通過CanIf模塊發送trigger IPDU?

(3)哪個模塊完成Can trigger IPDU的判斷?

(4)請說明Can IPDR的Trigger Transmit的整個過程?

(5)Lin IPUD和Can IPDU的trigger transmit有何異同?

本文先梳理一遍CAN、LIN報文的發送過程,然后回答這些問題。

AUTOSAR 通信服務-Com模塊概念詳解

AUTOSAR 通信服務-PDU Router

AUTOSAR CAN通信協議棧分析(3)-CanIf

Can通信協議棧分析(1)-Can Driver

73bed7f6-63a7-11ed-8abf-dac502259ad0.png

正文

1.CAN報文IPDU的發送過程

1.1 COM模塊發送IPDU

73ed8394-63a7-11ed-8abf-dac502259ad0.png

在COM模塊中,周期報文通過Com_MainFunctionTx周期調度函數發送,事件觸發型報文通過Com_TriggerIPDUSend通信服務接口發送。無論是Com_MainFunctionTx還是Com_TriggerIPDUSend最后都是調用PDUR模塊的PduR_ComTransmit來發送報文,且傳入到PduR模塊的PduInfo->SDU數據buffer指針不為NULL。

740b9f1e-63a7-11ed-8abf-dac502259ad0.png

74573bea-63a7-11ed-8abf-dac502259ad0.png

1.2 PDUR模塊發送IPDU

747d2cf6-63a7-11ed-8abf-dac502259ad0.png

強調Com模塊過來的Can IPDU->SDU一定不為NULL是因為它會影響報文的發送方式(1.3章節詳解)。PduR模塊對于Com模塊的CAN IPDU直接調用CanIf_Transmit發送,CanIf收到IPDU發送請求后直接調用CanDriver的接口發送報文,Copy Data到CanController發送。

74ac4220-63a7-11ed-8abf-dac502259ad0.png

PduR模塊的PduRestPdu配置容器提供了PduRDestPduDatProvision配置參數來配置每一個發送報文是直接發送還是觸發式發送。

Note: 在ETAS的集成配置環境ISOLAR中這個參數無論配置成啥都不影響PduR模塊的配置代碼。個人認為這個PduR模塊對于Can報文的發送都是直接調用CanIf_Transmit,確實不需要這個參數,所以到底是ISOLAR有問題還是確實這個參數不影響代碼的生成還有待研究。

1.3 CanIf模塊發送IPDU

74df1128-63a7-11ed-8abf-dac502259ad0.png

CanIf模塊提供CanIfTrggerTransmitSupport配置參數來配置CanIf模塊是否支持Trigger方式發送報文。

7510126e-63a7-11ed-8abf-dac502259ad0.png

CanIf為每一Tx IPDU提供了CanIfTxPduTriggerTransmit的配置參數。如果該報文的上層發送模塊是PduR模塊且配置了該參數為True,這在PduR模塊就是生成PduR_CanIfTriggerTransmit的函數。

1.3.1 DIRECT發送

75a1dc80-63a7-11ed-8abf-dac502259ad0.png

CanIf模塊的CanIf_Transmit接口函數本身并不會判斷傳入的IPDU是否是需要Trigger發送(僅僅會做一些Det的檢測),而是直接調用Can_Write來發送IPDU,由Can模塊通過傳入的IpduInfo->Sdu是否為NULL來確定是DIRECT發送還是TRIGGER發送IPDU。

如果是IpduInfo->Sdu不為NULL,則為DIRECT發送方式,Can_Write直接完成Copy Data into controller完成報文的發送。

1.3.2 Trigger發送

75c9977a-63a7-11ed-8abf-dac502259ad0.png

如果是IpduInfo->Sdu為NULL,則為TRIGGER發送方式,Can_Write --> CanIf_TriggerTransmit --> PduR_CanIfTriggerTransmit --> Com_TriggerTransmit完成IpduInfo->Sdu into Controller的數據拷貝,也就是所謂的Trigger數據發送。

1.4 Can模塊發送IPDU

75fa0fd6-63a7-11ed-8abf-dac502259ad0.png

Can模塊提供CanTriggerTransmitEnable配置參數來配置是否使用Trigger Transmit功能。Can模塊完成IPDUD最終的Trigger發送。

2.LIN報文IPUD的發送過程

2.1 COM模塊發送IPDU

COM模塊統一了所有IPUD的處理方式,和1.1節完全一樣。

2.2 PDUR模塊發送IPDU

2.2.1 Lin偶發幀sporadic frame發送

761b5812-63a7-11ed-8abf-dac502259ad0.png

Lin報文的周期發送是通過調度表實現的,而Lin調度表存在于LinIf模塊,LinIf模塊在周期調用調度表的時候通過callback的方式實現IPDU的trigger transmit,也就是向上獲取到sdu數據,然后調用Lin_SendFrame發送報文。調度表中的報文都是需要周期發送處理的報文,對于偶發sporadic frame的發送,COM --> PDUR -->CanIf_Transmit中設置發送flag,實現偶發幀發送。

2.2.2 Lin非偶發幀sporadic frame發送

76501642-63a7-11ed-8abf-dac502259ad0.png

2.3 LinIf模塊發送IPDU

76775be4-63a7-11ed-8abf-dac502259ad0.png

LinIf模塊實現Lin調度表中報文的周期發送,且所有報文都是通過調用pdur模塊的PduR_TriggerTransmit的callback函數完成sdu數據的獲取。

76a35622-63a7-11ed-8abf-dac502259ad0.png

LinIf模塊的LinIfTxPdu配置容器中提供了LinifTxTriggerTransmitUL的配置參數,但是這個參數依賴于LinIfUserTxUL參數,如果LinIfUserTxUL配置為PDUR,則LinifTxTriggerTransmitUL參數不管有無配置,則一定為PduR_TriggerTransmit,也就是PduR模塊一定會生成一個PduR_TriggerTransmit配置callback函數。

2.4 Lin模塊發送IPDU

Lin模塊沒有trigger transmit的判斷,提供Lin_SendFrame的接口即可。

3.問題回答

問題1:Com模塊的IPDU的trigger發送和CanIf或者Can模塊的Trigger發送一樣嗎?

答:Com模塊的IPDU的trigger發送和CanIf或者Can模塊的Trigger發送不一樣。

Com模塊的trigger transmit是某個事件觸發是調用Com_TriggerIPDUSend發送IPDU,但是無論是Com的周期發送Com_MainFunctionTx還是Com_TriggerIPDUSend發送IPDU,都是調用PduR_ComTransmit,而PDUR->CanIf->Can對于Com來的IPDU都是統一以DIRECT的方式直接Copy Data到Can Controller。

CanIf模塊本身不做IPDU是否需要trigger transmit的判斷,而是直接將IpudInfoPtr傳遞給Can模塊,Can模塊中通過IpduInfoPtr->Sdu是否為NULL來絕對是使用DIRECT的方式還是trigger transmit/也就是向上調用callback后set buffer來發送報文。

問題2:怎么通過CanIf模塊發送trigger IPDU?

答:CanIfUser(可以自定義一個模塊,或者是其他模塊)在調用CanIf_Transmti發送報文的時候傳入的IpduInfoPtr->Sdu == NULL同時CAN模塊需要enable trigger transmit就可以實現CAN IPDU使用CanIf模塊trigger transmit。

問題3:哪個模塊完成Can trigger IPDU的判斷?

答:CanDriver模塊。

問題4:請說明Can IPDR的Trigger Transmit的整個過程?

答:CanDriver模塊通過判斷CanIf模塊傳入的IpduInfoPtr-Sdu為NULL且Can模塊enbale了trigger transmit后調用CanIf_TriggerTransmt -> PduR_TriggerTransmt -> Com_TriggerTransmt完成Copy Data into Controller的數據拷貝操作,之后通過Can發送報文。

問題5:Lin IPDU和Can IPDU的trigger transmit有何異同?

答:

相同點:IPDU的trigger transmit都是最后調用Com_TriggerTransmit函數實現的。

不同點:Lin IPDU如果是非偶發幀(sporadic frame)在通過調度表發送時都是使用trigger transmit分方式發送的且COM -> PDUR對LIN IPDU的發送無影響;而Can IPDU的周期發送主要是通過COM -> PDUR向下傳遞IpduInfoPtr通過DIRECT方式發送的。

審核編輯:郭婷

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

    關注

    57

    文章

    2762

    瀏覽量

    464008
  • LIN
    LIN
    +關注

    關注

    4

    文章

    218

    瀏覽量

    40317

原文標題:Can/Lin報文的觸發發送(Trigger Transmit)

文章出處:【微信號:汽車電子嵌入式,微信公眾號:汽車電子嵌入式】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    CAN總線與LIN總線的區別

    隨著汽車電子系統的復雜性增加,車輛內部通信的需求也在不斷增長。CAN總線和LIN總線作為兩種主要的車載通信協議,各自扮演著重要的角色。 1. 設計原理 CAN總線: 數據傳輸速率: CAN
    的頭像 發表于 11-12 10:13 ?2181次閱讀

    如何在CANtest上通過報文發送實現CCP指令的發送

    如題,我在CANtest上通過CAN報文發送了CCP指令\'CONNECT\'、\'SET-MTA\'和‘Upload’。前兩個指令的返回均沒有報錯,可\'Upload\'的返回直接
    發表于 08-13 10:46

    基于VB6.0 實現 CAN信號收發 Demo

    本文主要講的是,基于TSMaster實現TOSUN系列CAN/CANFD,LIN設備的操作。主要給大家介紹在TSMaster軟件里如何實現CAN信號收發Demo工程。本文關鍵詞:CAN
    的頭像 發表于 07-27 08:21 ?799次閱讀
    基于VB6.0 實現 <b class='flag-5'>CAN</b>信號收發 Demo

    CYT2BL和SDL v8.0.0是否有可能實現以相同ID發送和接收CAN報文(RxID、TxID)的功能?

    我使用的是 CYT2BL 和 SDL v8.0.0。 我想發送和接收具有相同 ID 的 CAN 報文。 1.是否有可能實現以相同 ID 發送和接收
    發表于 07-23 06:12

    TC3XX can發送報文,周期上下波動嚴重怎么解決?

    使用FULL CAN發送,周期調用Can_17_McmCan_lWriteMsgObj發送報文,查看周期是穩定的,但到發出來和中斷觸發的時間會上下波動,而且波動越來越大。
    發表于 07-11 08:00

    試圖從CAN卡向TC375發送報文時,TC375始終收不到,為什么?

    我試圖在TC375上進行CAN收發測試,測試目的是完成TC375和CAN卡的通訊,現在我已經成功地將CAN報文從TC375發送到了
    發表于 07-04 06:04

    TSMaster 中不同總線報文消息過濾的操作方式

    TSMaster軟件平臺支持對不同總線(CAN、LIN、FlexRay)報文和信號的過濾,包括全局接收過濾、數據流過濾、窗口過濾、字符串過濾、可編程過濾,針對不同的總線信號過濾器的使用方法基本相
    的頭像 發表于 06-22 08:21 ?1609次閱讀
    TSMaster 中不同總線<b class='flag-5'>報文</b>消息過濾的操作方式

    如何通過CAN報文TC375傳輸數據?

    從示例 MCMCAN_1_KIT_TC375_LK 和 ADC_Single_Channel_1_TC375_LK 開始,我必須用 CAN 報文發送從模擬通道獲取的數值。 我就是這么做的: void
    發表于 05-28 08:30

    TC387從App跳回PBL在下載SBL,進入SBL后上位機發送CAN報文響應超時,怎么解決?

    你好,我目前實現了 PBL SBL 但目前的問題是:將SBL下載到RAM區域后,通過SBL下載App正常;但從App跳回PBL在下載SBL,進入SBL后上位機發送CAN 報文響應超時。我在SBL中
    發表于 05-24 08:12

    CAN報文為什么會發送失???

    CAN總線調試過程中出現報文發送失敗。很多工程師都對此只知其一不知其二,今天我們就以CAN報文
    的頭像 發表于 04-12 08:25 ?2219次閱讀
    <b class='flag-5'>CAN</b><b class='flag-5'>報文</b>為什么會<b class='flag-5'>發送</b>失敗?

    CAN報文格式和發送總流程

    在標準格式中,報文的起始位稱為幀起始(SOF),然后是由11位標識符和遠程發送請求位(RTR)組成的仲裁場。RTR位標明是數據幀還是請求幀,在請求幀中沒有數據字節。
    發表于 04-11 10:07 ?9794次閱讀
    <b class='flag-5'>CAN</b>的<b class='flag-5'>報文</b>格式和<b class='flag-5'>發送</b>總流程

    TC387模塊CAN0的節點2作為CANA使用,CANA既收不到報文也發不出報文如何解決?

    TC387模塊CAN0的節點2作為CANA使用,CAN1的節點0作為CANB使用,配置基本相同。但CANB的通信正常,而在TJA1145正常情形下,CANA既收不到報文,也發不出報文
    發表于 02-19 06:43

    MCU怎樣判斷CAN發送狀態?

    (); } 如此配置發現在一幀報文發送完了后,不能進入can發送中斷, 2、能有別的標志位來判斷can
    發表于 02-18 08:33

    CAN FD在發送報文時會有發不出去的現象怎么解決?

    現象描述: 在發送多幀報文數據時,出現了較為嚴重的報文丟失現象。編寫測試程序,在for循環中循環發送id為0-7ff的報文,對返回值進行了判
    發表于 02-02 07:48

    TC364&amp;TJA1145特定CAN報文丟失怎么解決?

    客戶現場進行急加速和急減速過程中,出現了特定ID的報文丟失,其它報文發送正常,CAN這一塊用的工具配置生成,家里進行測試Busoff后能正常
    發表于 01-23 06:03
    主站蜘蛛池模板: 国产情侣草莓视频在线| 草草影院私人免费入口| 亚洲国产精品热久久2022| 夜间视频在线观看| 天天操夜夜草| 精品一区二区三区18| 亚洲一区二区影院| 91操视频| 天天操夜夜操视频| 人日人操| 操天天操| 性夜黄a爽影免费看| 在线激情网址| 四虎永久免费影院| 中文字幕亚洲区| 亚洲第一中文字幕| 黄色三级视频在线观看| 色多多在线观看视频| 日本特级黄色大片| 四虎中文| 欧美精品video| 高清性色生活片欧美在线| 天天色天天操天天射| 福利视频999| 污色网站| 天堂中文在线资源| 久久婷婷激情综合色综合也去| 男人的天堂一区二区视频在线观看| 毛片多多| 亚洲国产精品热久久2022| 国产精品久久久久影视不卡| 中文字幕精品一区二区2021年 | 久久婷婷色一区二区三区| 成人区精品一区二区毛片不卡| 色婷婷狠狠干| 人人爽天天爽夜夜爽曰| 中国性猛交xxxx乱大交| www日本免费| 欧美成人久久| 午夜影院观看| 91夫妻视频|