前言
汽車(chē)工程師對(duì)CAN收發(fā)器應(yīng)該都比較熟悉,但是最近在復(fù)盤(pán)AUTOSAR架構(gòu)下的CanTrcv模塊的時(shí)發(fā)現(xiàn)對(duì)CAN收發(fā)器及CanTrcv模塊還有幾個(gè)疑問(wèn):
(1)CanTrcv_SetOpMode被哪個(gè)模塊調(diào)用,在什么場(chǎng)景下調(diào)用?
(2)CanTrcv和EcuM的關(guān)系,在什么場(chǎng)景下CanTrcv會(huì)調(diào)用?
(3)不同類(lèi)型的Can收發(fā)器主要使用場(chǎng)景是?
本文我們來(lái)一起探索并回答這些問(wèn)題。
正文
1.CanTrcv_SetOpMode被哪個(gè)模塊調(diào)用,在什么場(chǎng)景下調(diào)用?
1.1 CanSM模塊切換CanTrcv模塊狀態(tài)
CanTrcv模塊在上電后的初始狀態(tài)配置,一般配置初始狀態(tài)為SLEEP狀態(tài)。而后,CanTrcv模塊的狀態(tài)通過(guò)其他模塊調(diào)用CanTrcv_SetOpMode來(lái)切換。如果沒(méi)有BswM的參與(Action中切換CanTrcv狀態(tài)),一般都是CanSM模塊調(diào)用CanIf_SetTrcvMode --> CanTrcv_SetOpMode來(lái)切換CanTrcv模塊的狀態(tài)。
CanSM的CANSM_BSM_S_PRE_NOCOM和CANSM_BSM_S_PRE_FULLCOM兩個(gè)狀態(tài)會(huì)調(diào)用
CanIf_SetTrcvMode切換CanTrcv模塊的狀態(tài)。
CANSM_BSM_S_PRE_NOCOM的子狀態(tài)CANSM_BSM_DeInitPnNotSupported會(huì)調(diào)用CanIf_SetTrcvMode將CanTrcv切換到Normal狀態(tài)后又立馬切換到StandBy狀態(tài)(Note: 不知道為啥有這個(gè)操作?)。
在CANSM_BSM_S_NOCOM狀態(tài)下如果檢查到有來(lái)自COM模塊的通信請(qǐng)求(T_FULL_COM_MODE_REQUEST)后會(huì)切換到CANSM_BSM_PRE_FULLCOM狀態(tài),然后調(diào)用CanIf_SetTrcvMode將CanTrcv模塊狀態(tài)切換到NORMAL狀態(tài)。
1.2 BswM的Action切換CanTrcv模塊的狀態(tài)
如果CanSM對(duì)CanTrcv的模式狀態(tài)管理不能滿(mǎn)足項(xiàng)目實(shí)際的需求,我們可以通過(guò)BswM設(shè)計(jì)在滿(mǎn)足特定條件下調(diào)用CanTrcv_SetOpMode來(lái)快速切換CanTcv模式狀態(tài)。
1.3 EcuM的Callout函數(shù)中切換CanTrcv模塊的狀態(tài)
EcuM通過(guò)中斷或輪詢(xún)檢測(cè)到來(lái)自CAN收發(fā)器或控制器的喚醒事件后,就可以對(duì)該喚醒事件進(jìn)行驗(yàn)證。EcuM通過(guò)打開(kāi)相應(yīng)的CAN收發(fā)器和控制器來(lái)實(shí)現(xiàn)喚醒事件驗(yàn)證。EcuM模塊調(diào)用集成代碼EcuM_StartWakeupSource來(lái)打開(kāi)相應(yīng)的CAN收發(fā)器和控制器。
注意:雖然控制器和收發(fā)器已打開(kāi),但CAN接口模塊(CanIf)不會(huì)將CAN消息轉(zhuǎn)發(fā)到任何上層模塊。只有當(dāng)CanIf對(duì)應(yīng)的PDU通道模式設(shè)置為“在線(xiàn)”時(shí),才會(huì)轉(zhuǎn)發(fā)CAN消息。
ECU狀態(tài)管理器模塊將通過(guò)通信管理器模塊ComM繼續(xù)正常啟動(dòng)CAN網(wǎng)絡(luò)。否則,它將調(diào)用EcuM_StopWakeupSources關(guān)閉CAN控制器和收發(fā)器。
2.CanTrcv和EcuM的關(guān)系,在什么場(chǎng)景下CanTrcv會(huì)調(diào)用EcuM_SetWakeupEvent?
在回答這個(gè)問(wèn)題前,先介紹一下ECU系統(tǒng)設(shè)計(jì)相關(guān)的一些知識(shí)。
ECU在設(shè)計(jì)時(shí)根據(jù)具體需求可以在硬件上添加SBC或無(wú)SBC。如果ECU有SBC,ECU就是一個(gè)斷電系統(tǒng)。那么ECU在系統(tǒng)下電(Shutdown)流程的最后一步會(huì)調(diào)用SBC的服務(wù)接口斷掉MCU的電,整個(gè)MCU在休眠中是處于斷電狀態(tài)的。在外部信號(hào)(Can Transceiver/Lin Transceiver的INH引腳,Dio喚醒引腳 )喚醒MCU時(shí),SBC重新給MCU供電,MCU重新冷啟動(dòng)。
如果ECU無(wú)SBC,ECU就是一個(gè)深度休眠系統(tǒng)。那么ECU在系統(tǒng)下電(Shutdown)流程的最后一步會(huì)調(diào)用MCU的服務(wù)進(jìn)入到Deep Sleep深度休眠狀態(tài)(MCU陷入深度休眠狀態(tài),程序不在運(yùn)行,但是MCU還有電存在)。在外部信號(hào)(Can Transceiver/Lin Transceiver的INH引腳,Dio喚醒引腳 )通過(guò)中斷喚醒MCU,MCU被喚醒后,程序可以選擇軟件復(fù)位,整個(gè)軟件重新運(yùn)行,也可以選擇從上次停止的地方接著運(yùn)行。
如果是深度休眠系統(tǒng)且ECU被喚醒后接著跑的話(huà),我們可以通過(guò)配置(EcuM中enable sleep support,EcuM實(shí)現(xiàn)EcuM_EnbaleWakeupSource集成代碼,中斷函數(shù)中調(diào)用EcuM_CheckWakeup)最后在CanTrcv_CheckWakeup函數(shù)中調(diào)用EcuM_SetWakeupEvent來(lái)實(shí)現(xiàn)喚醒源檢測(cè)。
如果是斷電系統(tǒng)或者深度休眠系統(tǒng)被喚醒后軟件復(fù)位,那么上圖的整個(gè)交互過(guò)程就不存在了。程序重啟后需要在其他設(shè)計(jì)的模塊(CDD_WKSM)開(kāi)啟喚醒源檢測(cè),如果檢測(cè)到喚醒源就需要調(diào)用EcuM_SetWakeupEvent來(lái)設(shè)置喚醒源事件。
問(wèn)題:CanTrcv和EcuM的關(guān)系,在什么場(chǎng)景下CanTrcv會(huì)調(diào)用EcuM_SetWakeupEvent?
答:如果是休眠系統(tǒng)且ECU被喚醒后繼續(xù)跑,則CanTrcv需要進(jìn)行喚醒源檢測(cè)并調(diào)用EcuM_SetWakeupEvent設(shè)置喚醒源事件。如果是斷電系統(tǒng),或者休眠系統(tǒng)且ECU被喚醒后軟件復(fù)位,則CanTrcv不用做喚醒源檢測(cè),也不會(huì)調(diào)用EcuM_SetWakeupEvent設(shè)置喚醒源事件,需要自定義起碼模塊是西安喚醒源檢測(cè)。
3.不同類(lèi)型的Can收發(fā)器主要使用場(chǎng)景是?
生產(chǎn)CAN收發(fā)器的廠商比較有名是NXP,Infineon,TI等,類(lèi)型很多,收發(fā)器支持的功能也不近一樣。這里介紹NXP的三種比較有代表性的收發(fā)器,TJA1044,TJA1043,TJA1145。
是否有STB引腳 | 是否有EN引腳 | 是否有INH引腳 | 是否有SPI引腳 | 是否支持PN局部網(wǎng)絡(luò)管理 | 使用場(chǎng)景 | |
TJA1044 | Y | N | N | N | N | 休眠系統(tǒng),任意CAN報(bào)文在CAN_RX引腳上產(chǎn)生中斷喚醒 |
TJA1043 | Y | Y | Y | N | N | 斷電系統(tǒng),任意報(bào)文喚醒收發(fā)器,INH接到SBC |
JTA1145 | N | N | N | Y | Y | 局部網(wǎng)絡(luò)管管理,特定報(bào)文喚醒收發(fā)器,INH引腳接到SBC |
TJA1044收發(fā)器相比基礎(chǔ)版本增加了standby的低功耗模式,此模式的功耗在10uA左右。同時(shí)CAN收發(fā)器處在standby模式時(shí)會(huì)開(kāi)啟CAN總線(xiàn)喚醒功能,當(dāng)CAN總線(xiàn)上有數(shù)據(jù)時(shí),RXD會(huì)產(chǎn)生從高到低的跳變沿,此跳變沿可以被MCU用來(lái)做喚醒源。此種收發(fā)器一般用在KL30(長(zhǎng)電)和KL15同時(shí)供電的產(chǎn)品上,如儀表,中控,導(dǎo)航等產(chǎn)品。
Standby模式下的功耗已經(jīng)很低了,如果車(chē)廠要求功耗做的更低,或者要求支持本地喚醒,此時(shí)就需要使用帶sleep模式,INH引腳和wake引腳的收發(fā)器了。以TJA1043為例,當(dāng)MCU配置TJA1043進(jìn)入sleep模式之后,INH引腳拉低,LDO關(guān)閉輸出,MCU關(guān)閉不消耗電流。當(dāng)CAN總線(xiàn)有喚醒信號(hào),或者wake引腳有跳變沿,INH引腳被拉高,LDO打開(kāi)輸出,MCU啟動(dòng)并配置TJA1043進(jìn)入Normal模式接收CAN報(bào)文。傳統(tǒng)的VCU,BMS等產(chǎn)品就使用了此收發(fā)器。
像T-BOX這類(lèi)應(yīng)用,一般對(duì)低功耗的要求更嚴(yán)格,如果使用TJA1043這類(lèi)收發(fā)器,一旦被和自己不相關(guān)的CAN報(bào)文喚醒之后,需要軟件進(jìn)行判斷處理,盡快的再次進(jìn)入休眠模式。此時(shí)就對(duì)CAN收發(fā)器提出了新的功能需求,既局部網(wǎng)絡(luò)喚醒功能,相關(guān)標(biāo)準(zhǔn)為11898-6:2013。NXP支持該功能的收發(fā)器為T(mén)JA1145,可以通過(guò)SPI接口配置喚醒報(bào)文的速率,ID和數(shù)據(jù),不滿(mǎn)足條件的CAN報(bào)文無(wú)法喚醒TJA1145。
需要提醒的是,TJA1145不支持CAN FD的局部網(wǎng)絡(luò)喚醒功能,如果TJA1145被用于CAN FD總線(xiàn)中,需要選用TJA1145T/FD and TJA1145TK/FD,其他型號(hào)接收到CAN FD的喚醒信號(hào)會(huì)識(shí)別為錯(cuò)誤信號(hào)。
審核編輯:劉清
-
控制器
+關(guān)注
關(guān)注
112文章
16468瀏覽量
179636 -
PDU
+關(guān)注
關(guān)注
0文章
94瀏覽量
17039 -
CAN收發(fā)器
+關(guān)注
關(guān)注
3文章
166瀏覽量
25750
原文標(biāo)題:關(guān)于CanTrcv模塊的幾點(diǎn)思考
文章出處:【微信號(hào):汽車(chē)電子嵌入式,微信公眾號(hào):汽車(chē)電子嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
如何查看及更改函數(shù)/函數(shù)塊的調(diào)用環(huán)境
![如何查看及更改函數(shù)/函數(shù)塊的<b class='flag-5'>調(diào)用</b>環(huán)境](https://file1.elecfans.com/web2/M00/AE/C0/wKgaomVWvV2ANCozAAAzJenX8j8177.png)
很贊的labview下調(diào)用地圖
求Labview 下調(diào)用Fortran dll的詳細(xì)教程
Zigbee場(chǎng)景調(diào)用設(shè)備沒(méi)響應(yīng)?
通過(guò)調(diào)用HID.dll編寫(xiě)USB HID的數(shù)據(jù)讀寫(xiě),請(qǐng)大神們幫忙提示一下調(diào)用哪些HID的原型函數(shù)及函數(shù)調(diào)用順序!
當(dāng)函數(shù)執(zhí)行完畢后,如何返回調(diào)用處?
![當(dāng)函數(shù)執(zhí)行完畢后,如何返回<b class='flag-5'>調(diào)用</b>處?](https://file1.elecfans.com//web2/M00/A6/CF/wKgZomUMQJqAOG-cAADX2j6xLBg917.jpg)
Linux下系統(tǒng)調(diào)用的技巧
JLinkScript文件基礎(chǔ)及其在IAR下調(diào)用方法的PDF文件
![JLinkScript文件基礎(chǔ)及其<b class='flag-5'>在</b>IAR<b class='flag-5'>下調(diào)用</b>方法的PDF文件](https://file.elecfans.com/web1/M00/D3/75/o4YBAF_TFFaAHPdAAAEC7_Xmz3w415.png)
探討VHDL和Verilog模塊互相調(diào)用的問(wèn)題
![探討VHDL和Verilog<b class='flag-5'>模塊</b>互相<b class='flag-5'>調(diào)用</b>的問(wèn)題](https://file.elecfans.com/web1/M00/ED/43/o4YBAGCLocyAI8tyAAAo6zaAUTw967.png)
多重復(fù)性功能模塊情況下如何下調(diào)用已有模塊
malloc在Linux上執(zhí)行的是哪個(gè)系統(tǒng)調(diào)用
![malloc<b class='flag-5'>在</b>Linux上執(zhí)行的是<b class='flag-5'>哪個(gè)</b>系統(tǒng)<b class='flag-5'>調(diào)用</b>](https://file1.elecfans.com/web2/M00/AD/E3/wKgaomVRi3GAS76QAAC2n2OPe3I409.jpg)
評(píng)論