工程項目中,大家可能會注意到:不管哪家主機廠的網絡拓撲,CAN總線是不可或缺的一種總線。所以,了解CAN總線似乎是一名汽車工程師的基礎課,很多時候,我們可能覺得自己很懂,而實際呢?個人觀點,最好的方式就是讓工程問題去衡量你對CAN總線或者某個知識體系的理解深度。本文,就大家耳熟能詳的CAN總線進行一個工程問題剖析:Full CAN與Basic CAN配置錯誤,導致信號跳變。
提示 :本工程問題對應英飛凌TC3xx芯片,EB配置MCAL
1、問題背景
標定測試中發現,一些信號變化異常,這些異常信號的值在某些時刻跳變成該信號的極限值,如下所示:
顯然,如上信號的跳變會給整車帶來安全隱患,因此,測試也會將問題嚴重度設置較高等級,eg:S級或者A級。
2、根因分析
在進行根因分析之前,先補充一些MCAN基礎信息。
(一)Message RAM
在英飛凌的芯片中,MCAN模塊有一塊Message RAM,這塊空間主要用來劃分過濾空間、接收數據空間以及發送數據空間,至于如何切分Message RAM,由用戶或者工具設置。雖然Message RAM區可以按需切割,但是,切割的順序需要按照手冊要求實現,Message RAM如下所示:
解讀:
- Message RAM的總大小為4480 words;
- 在切割Message RAM時,需要按照上圖順序排布,即:SIDFC.FLSSA->XIDFC.FLESA->RXF0C.F0SA->RXF1C.F0SA->RXBC.RBSA->TXEFC.EFSA->TXBC.TBSA->TMC.TMSA。當然,如果實際沒有用到某些區域,則不用切割Message RAM,eg:可以不用Rx FIFO 1。
Message RAM在EB中的配置某個Can Controller示例如下所示:
(二)Standard Message ID Filter Element解讀
Message RAM開始區域就是設置ID過濾,具體會對應到StdMsgk_S0 (k=0-127)寄存器。StdMsgk_S0各位域如下所示:
部分內容解釋:
- SFT (Standard Filter Type):00B Range filter from SF1ID to SF2ID (SF2ID≥SF1ID),可以過濾一段ID;01B Dual ID filter for SF1ID or SF2ID,過濾SF1ID或者SF2ID;10B Classic filter: SF1ID = filter, SF2ID = mask;11B Filter element disabled.
- SFEC (Standard Filter Element Configuration):過濾后的處理方式,111B Store into Rx Buffer or as debug message, configuration of SFT[1:0] ignored,過濾匹配放到Rx Buffer緩存區。
- SFID2 (Standard Filter ID 2):SFID2[5:0] defines the offset to the Rx Buffer Start Address RXBC.RBSA for storage of a matching message.如果SFT配置成10模式,則SFID2[5:0]表示此報文在Rx Buffer的偏移(offset)。
(三)EB中的MCAL配置錯誤
檢查MCAL配置發現,某個FULL類型的CanHandleType位置放到了BASIC類型后面,如下所示:
經過如上的MCAL配置調整以后,CanHardwareObject33的CanObjectId由原來的26變成了28。如此,會導致什么問題呢?對比生成的配置代碼(本文Can_17_McmCan_kSIDFilterConfigCore0,配置文件Can_17_McmCan_PBcfg.c)如下所示(右側是錯誤配置):
就是因為如上的配置,導致本應放入Rx dedicated buffer區間的數據錯誤的放到了Tx Event區間。如何理解呢?分析如上變動,具體解釋如下:
1、正確配置分析
0xba00001a進行二進制展開:1011 1010 0000 0000 0000 0000 0001 1010B。對照StdMsgk_S0寄存器各位域解釋如下:
如此配置,意味著0x200(CanHardwareObject33)接收的數據會放置到地址:0xF0200294+26*16 = 0xF0200434,此時,不會與Tx Event的起始地址0xF0200444位置重疊,數據可以正確處理。
2、錯誤配置分析
0xba00001c進行二進制展開:1011 1010 0000 0000 0000 0000 0001 1100B。對照StdMsgk_S0寄存器各位域解釋如下:
如此配置,意味著0x200(CanHardwareObject33)接收的數據會放置到地址:0xF0200294+28*16 = 0xF0200454,此時,會與Tx Event的起始地址0xF0200444重疊,進而造成接收數據被發送數據覆蓋,這就是信號跳變的原因。
將如上的分析簡化示意如下所示:
3、解決措施
既然是MCAL配置異常導致的問題,問題的修復也就明了,修改EB中的MCAL配置,將同一個Controller的Full CAN移動到Basic CAN之前,嚴格按照EB手冊約束配置。關于CanObject配置注意事項,可以參考前文《MCMCAN:CAN hardware object配置規則》。
-
英飛凌
+關注
關注
66文章
2152瀏覽量
138422 -
CAN總線
+關注
關注
145文章
1936瀏覽量
130631 -
CAN
+關注
關注
57文章
2719瀏覽量
463377 -
信號
+關注
關注
11文章
2780瀏覽量
76634
發布評論請先 登錄
相關推薦
評論