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