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

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

3天內不再提示

CanTrcv_SetOpMode被哪個模塊調用?在什么場景下調用?

832065824 ? 來源:汽車電子嵌入式 ? 作者:Tomas Li ? 2022-10-31 10:58 ? 次閱讀

前言

汽車工程師CAN收發器應該都比較熟悉,但是最近在復盤AUTOSAR架構下的CanTrcv模塊的時發現對CAN收發器及CanTrcv模塊還有幾個疑問:

(1)CanTrcv_SetOpMode被哪個模塊調用,在什么場景下調用?

(2)CanTrcv和EcuM的關系,在什么場景下CanTrcv會調用?

(3)不同類型的Can收發器主要使用場景是?

本文我們來一起探索并回答這些問題。

正文

1.CanTrcv_SetOpMode被哪個模塊調用,在什么場景下調用?

1.1 CanSM模塊切換CanTrcv模塊狀態

CanTrcv模塊在上電后的初始狀態配置,一般配置初始狀態為SLEEP狀態。而后,CanTrcv模塊的狀態通過其他模塊調用CanTrcv_SetOpMode來切換。如果沒有BswM的參與(Action中切換CanTrcv狀態),一般都是CanSM模塊調用CanIf_SetTrcvMode --> CanTrcv_SetOpMode來切換CanTrcv模塊的狀態。

8e5ec5b0-5788-11ed-a3b6-dac502259ad0.png

CanSM的CANSM_BSM_S_PRE_NOCOM和CANSM_BSM_S_PRE_FULLCOM兩個狀態會調用

CanIf_SetTrcvMode切換CanTrcv模塊的狀態。

8eaf3aea-5788-11ed-a3b6-dac502259ad0.png

CANSM_BSM_S_PRE_NOCOM的子狀態CANSM_BSM_DeInitPnNotSupported會調用CanIf_SetTrcvMode將CanTrcv切換到Normal狀態后又立馬切換到StandBy狀態(Note: 不知道為啥有這個操作?)。

8ecc29d4-5788-11ed-a3b6-dac502259ad0.png

8eeea630-5788-11ed-a3b6-dac502259ad0.png

在CANSM_BSM_S_NOCOM狀態下如果檢查到有來自COM模塊的通信請求(T_FULL_COM_MODE_REQUEST)后會切換到CANSM_BSM_PRE_FULLCOM狀態,然后調用CanIf_SetTrcvMode將CanTrcv模塊狀態切換到NORMAL狀態。

8f12fcd8-5788-11ed-a3b6-dac502259ad0.png

1.2 BswM的Action切換CanTrcv模塊的狀態

如果CanSM對CanTrcv的模式狀態管理不能滿足項目實際的需求,我們可以通過BswM設計在滿足特定條件下調用CanTrcv_SetOpMode來快速切換CanTcv模式狀態。

8f311cd6-5788-11ed-a3b6-dac502259ad0.png

1.3 EcuM的Callout函數中切換CanTrcv模塊的狀態

EcuM通過中斷或輪詢檢測到來自CAN收發器或控制器的喚醒事件后,就可以對該喚醒事件進行驗證。EcuM通過打開相應的CAN收發器和控制器來實現喚醒事件驗證。EcuM模塊調用集成代碼EcuM_StartWakeupSource來打開相應的CAN收發器和控制器。

注意:雖然控制器和收發器已打開,但CAN接口模塊(CanIf)不會將CAN消息轉發到任何上層模塊。只有當CanIf對應的PDU通道模式設置為“在線”時,才會轉發CAN消息。

ECU狀態管理器模塊將通過通信管理器模塊ComM繼續正常啟動CAN網絡。否則,它將調用EcuM_StopWakeupSources關閉CAN控制器和收發器。

8f4d892a-5788-11ed-a3b6-dac502259ad0.png

2.CanTrcv和EcuM的關系,在什么場景下CanTrcv會調用EcuM_SetWakeupEvent?

在回答這個問題前,先介紹一下ECU系統設計相關的一些知識。

ECU在設計時根據具體需求可以在硬件上添加SBC或無SBC。如果ECU有SBC,ECU就是一個斷電系統。那么ECU在系統下電(Shutdown)流程的最后一步會調用SBC的服務接口斷掉MCU的電,整個MCU在休眠中是處于斷電狀態的。在外部信號(Can Transceiver/Lin Transceiver的INH引腳,Dio喚醒引腳 )喚醒MCU時,SBC重新給MCU供電,MCU重新冷啟動。

如果ECU無SBC,ECU就是一個深度休眠系統。那么ECU在系統下電(Shutdown)流程的最后一步會調用MCU的服務進入到Deep Sleep深度休眠狀態(MCU陷入深度休眠狀態,程序不在運行,但是MCU還有電存在)。在外部信號(Can Transceiver/Lin Transceiver的INH引腳,Dio喚醒引腳 )通過中斷喚醒MCU,MCU被喚醒后,程序可以選擇軟件復位,整個軟件重新運行,也可以選擇從上次停止的地方接著運行。

8f897fc0-5788-11ed-a3b6-dac502259ad0.png

如果是深度休眠系統且ECU被喚醒后接著跑的話,我們可以通過配置(EcuM中enable sleep support,EcuM實現EcuM_EnbaleWakeupSource集成代碼,中斷函數中調用EcuM_CheckWakeup)最后在CanTrcv_CheckWakeup函數中調用EcuM_SetWakeupEvent來實現喚醒源檢測。

8fb5646e-5788-11ed-a3b6-dac502259ad0.png

如果是斷電系統或者深度休眠系統被喚醒后軟件復位,那么上圖的整個交互過程就不存在了。程序重啟后需要在其他設計的模塊(CDD_WKSM)開啟喚醒源檢測,如果檢測到喚醒源就需要調用EcuM_SetWakeupEvent來設置喚醒源事件。

問題:CanTrcv和EcuM的關系,在什么場景下CanTrcv會調用EcuM_SetWakeupEvent?

答:如果是休眠系統且ECU被喚醒后繼續跑,則CanTrcv需要進行喚醒源檢測并調用EcuM_SetWakeupEvent設置喚醒源事件。如果是斷電系統,或者休眠系統且ECU被喚醒后軟件復位,則CanTrcv不用做喚醒源檢測,也不會調用EcuM_SetWakeupEvent設置喚醒源事件,需要自定義起碼模塊是西安喚醒源檢測。

3.不同類型的Can收發器主要使用場景是?

生產CAN收發器的廠商比較有名是NXP,Infineon,TI等,類型很多,收發器支持的功能也不近一樣。這里介紹NXP的三種比較有代表性的收發器,TJA1044,TJA1043,TJA1145。

是否有STB引腳 是否有EN引腳 是否有INH引腳 是否有SPI引腳 是否支持PN局部網絡管理 使用場景
TJA1044 Y N N N N 休眠系統,任意CAN報文在CAN_RX引腳上產生中斷喚醒
TJA1043 Y Y Y N N 斷電系統,任意報文喚醒收發器,INH接到SBC
JTA1145 N N N Y Y 局部網絡管管理,特定報文喚醒收發器,INH引腳接到SBC

TJA1044收發器相比基礎版本增加了standby的低功耗模式,此模式的功耗在10uA左右。同時CAN收發器處在standby模式時會開啟CAN總線喚醒功能,當CAN總線上有數據時,RXD會產生從高到低的跳變沿,此跳變沿可以被MCU用來做喚醒源。此種收發器一般用在KL30(長電)和KL15同時供電的產品上,如儀表,中控,導航等產品。

Standby模式下的功耗已經很低了,如果車廠要求功耗做的更低,或者要求支持本地喚醒,此時就需要使用帶sleep模式,INH引腳和wake引腳的收發器了。以TJA1043為例,當MCU配置TJA1043進入sleep模式之后,INH引腳拉低,LDO關閉輸出,MCU關閉不消耗電流。當CAN總線有喚醒信號,或者wake引腳有跳變沿,INH引腳被拉高,LDO打開輸出,MCU啟動并配置TJA1043進入Normal模式接收CAN報文。傳統的VCU,BMS等產品就使用了此收發器。

像T-BOX這類應用,一般對低功耗的要求更嚴格,如果使用TJA1043這類收發器,一旦被和自己不相關的CAN報文喚醒之后,需要軟件進行判斷處理,盡快的再次進入休眠模式。此時就對CAN收發器提出了新的功能需求,既局部網絡喚醒功能,相關標準為11898-6:2013。NXP支持該功能的收發器為TJA1145,可以通過SPI接口配置喚醒報文的速率,ID和數據,不滿足條件的CAN報文無法喚醒TJA1145。

需要提醒的是,TJA1145不支持CAN FD的局部網絡喚醒功能,如果TJA1145被用于CAN FD總線中,需要選用TJA1145T/FD and TJA1145TK/FD,其他型號接收到CAN FD的喚醒信號會識別為錯誤信號。






審核編輯:劉清

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

    關注

    112

    文章

    15439

    瀏覽量

    173098
  • PDU
    PDU
    +關注

    關注

    0

    文章

    92

    瀏覽量

    16841
  • CAN收發器
    +關注

    關注

    2

    文章

    153

    瀏覽量

    25404

原文標題:關于CanTrcv模塊的幾點思考

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

收藏 人收藏

    評論

    相關推薦

    labview wince下調用DLL 如何編譯

    labview wince下調用DLL 如何編譯。
    發表于 11-08 13:33

    很贊的labview下調用地圖

    ://url.elecfans.com/u/78643b3008labview下調用地圖源代碼,有地圖,有三微,可以看到你家里哦,趕緊試試 不要錯過了 覺得好就支持我@@@?。。?!labview下調用地圖源代碼:[hide] [/hide]
    發表于 11-21 11:24

    求Labview 下調用Fortran dll的詳細教程

    各位好,我現在用到LabVIEW下調用Fortran dll的問題,調用老是出問題,請問有用過的嗎?能不能給個詳細的教程
    發表于 09-28 16:52

    Zigbee場景調用設備沒響應?

    Zigbee 寫了個開關的程序,采用的協議為HA 1.2.2,當程序設為router的時候,場景建立和調用均正常,當程序設為enddevice的時候,場景創建沒有問題,但是調用場景的時
    發表于 04-26 10:46

    通過調用HID.dll編寫USB HID的數據讀寫,請大神們幫忙提示一下調用哪些HID的原型函數及函數調用順序!

    通過調用HID.dll編寫USB HID的數據讀寫,請大神們幫忙提示一下調用哪些HID的原型函數及函數調用順序!
    發表于 07-01 16:30

    通過調用HID.dll編寫USB HID的數據讀寫,請大神們幫忙提示一下調用哪些HID的原型函數及函數調用順序!

    通過調用HID.dll編寫USB HID的數據讀寫,請大神們幫忙提示一下調用哪些HID的原型函數及函數調用順序!
    發表于 07-06 10:02

    頂層調用模塊的VHDL例程

    本站提供的頂層調用模塊的VHDL例程,希望對你的學習有所幫助!
    發表于 05-27 15:38 ?0次下載

    通過模塊之間的調用實現自頂向下的設計

    通過模塊之間的調用實現自頂向下的設計目的:學習狀態機的嵌套使用實現層次化、結構化設計。
    發表于 02-11 05:53 ?2356次閱讀
    通過<b class='flag-5'>模塊</b>之間的<b class='flag-5'>調用</b>實現自頂向下的設計

    什么是系統調用?為什么要用系統調用?

    實際上,很多已經被我們習以為常的C語言標準函數,在Linux平臺上的實現都是靠系統調用完成的,所以如果想對系統底層的原理作深入的了解,掌握各種系統調用是初步的要求。進一步,若想成為一名Linux下編程高手,也就是我們常說的Hacker,其標志之一也是能對各種系統
    的頭像 發表于 06-01 08:44 ?1.5w次閱讀
    什么是系統<b class='flag-5'>調用</b>?為什么要用系統<b class='flag-5'>調用</b>?

    Linux下系統調用的技巧

    。N取0~5之間的整數?! 祩€數為N的系統調用由_syscallN()負責格式轉換和參數傳遞。系統調用號放入EAX寄存器,啟動INT 0x80  后,規定返回值送EAX寄存器?! ?3)系統調用功能模塊
    發表于 04-02 14:36 ?314次閱讀

    探討VHDL和Verilog模塊互相調用的問題

    1、 關于如何在VHDL模塊調用一個Verilog模塊 在VHDL模塊聲明一個要與調用的Verilog
    的頭像 發表于 04-30 14:06 ?9269次閱讀
    探討VHDL和Verilog<b class='flag-5'>模塊</b>互相<b class='flag-5'>調用</b>的問題

    多重復性功能模塊情況下如何下調用已有模塊

    在層次原理圖中,怎么去調用已經創建好的模塊呢?
    的頭像 發表于 01-04 15:24 ?1421次閱讀

    仿真測試2:全加器(模塊調用

    做任何模塊前,要確定輸入輸出端口有哪些,有一個整體的概念;方便以后模塊調用;
    的頭像 發表于 10-10 14:10 ?436次閱讀
    仿真測試2:全加器(<b class='flag-5'>模塊</b><b class='flag-5'>調用</b>)

    malloc在Linux上執行的是哪個系統調用

    malloc底層為什么是內存池 malloc大家都用過,其是庫函數。我們都知道庫函數在不同的操作系統中其實執行的是系統調用,那么malloc在Linux上執行的是哪個系統調用呢? brk
    的頭像 發表于 11-13 10:36 ?600次閱讀
    malloc在Linux上執行的是<b class='flag-5'>哪個</b>系統<b class='flag-5'>調用</b>

    verilog如何調用其他module

    。 1.2 為什么要調用其他模塊? 在復雜的設計中,我們通常需要實現各種不同的功能,并且這些功能往往可以通過不同的模塊來實現。通過調用其他模塊
    的頭像 發表于 02-22 15:56 ?2473次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>