CAN總線錯誤
介
紹
在本系列文章中,我們將為您詳細(xì)介紹CAN總線錯誤的相關(guān)知識,包括CAN總線錯誤的基礎(chǔ)概念、CAN總線錯誤的類型、CAN錯誤幀和CAN節(jié)點錯誤狀態(tài),并通過實際的應(yīng)用測試生成并記錄CAN錯誤。
什么是CAN總線錯誤?
控制器局域網(wǎng)絡(luò)(Controller Area Network, CAN)是當(dāng)今汽車和工業(yè)自動化系統(tǒng)的重要標(biāo)準(zhǔn)。可靠性是CAN總線協(xié)議的核心優(yōu)勢之一,這使其成為安全關(guān)鍵應(yīng)用的理想選擇。但值得注意的是,錯誤處理對CAN的穩(wěn)健性來說至關(guān)重要。
CAN總線錯誤的發(fā)生可能有多種原因,比如電纜故障、噪聲、不匹配的終端電阻、CAN節(jié)點故障等。識別、分類和解決此類CAN錯誤是確保整個CAN系統(tǒng)持久性能的關(guān)鍵。錯誤處理可以識別和拒絕錯誤的信息,使發(fā)送者能夠重新傳輸信息。此外,該過程有助于識別和斷開持續(xù)傳輸錯誤信息的CAN節(jié)點。
CAN錯誤處理如何工作?
錯誤處理是CAN標(biāo)準(zhǔn)和每個CAN控制器的內(nèi)置部分。換句話說,每個CAN節(jié)點都以相同的方式處理故障識別和限制。下面我們做了一個簡單的說明性示例:
具體步驟示例
1 | CAN節(jié)點1將消息傳輸?shù)紺AN總線-并讀取它發(fā)送的每一位,在這樣做的過程中,它發(fā)現(xiàn)發(fā)送顯性的一位被讀取為隱性 |
2 | 這是一個“位錯誤”,節(jié)點1會引發(fā)一個活動錯誤標(biāo)志以通知其他節(jié)點,實際上,這意味著節(jié)點1將6個顯性位序列發(fā)送到總線上,反過來,6個顯性位被其他節(jié)點視為“位填充錯誤” |
3 | 作為響應(yīng),節(jié)點2和3同時引發(fā)活動錯誤標(biāo)志,此引發(fā)的錯誤標(biāo)志序列構(gòu)成“CAN錯誤幀”的一部分 |
4 | CAN節(jié)點1的發(fā)送器將其“發(fā)送錯誤計數(shù)器”(TEC)增加8,CAN節(jié)點2和3將其“接收錯誤計數(shù)器”(REC)增加1,CAN節(jié)點1自動重新傳輸消息。結(jié)果節(jié)點1將其TEC減少1,節(jié)點2和3將其REC減少1 |
CAN錯誤幀
在上述示例中,CAN節(jié)點“引發(fā)活動錯誤標(biāo)志”,從而創(chuàng)建“錯誤幀”以響應(yīng)檢測到的CAN錯誤。為了理解它是如何工作的,讓我們首先看一個“正?!钡腃AN幀(沒有錯誤):
請注意,我們突出顯示了CAN幀中的“位填充”。位填充是CAN標(biāo)準(zhǔn)的一個微妙但重要的部分?;旧纤?guī)定,每當(dāng)CAN節(jié)點發(fā)送相同邏輯電平(顯性或隱性)的五個位時,它必須發(fā)送相反電平的一個位。接收CAN節(jié)點會自動刪除這個額外的位。此過程有助于確保網(wǎng)絡(luò)的持續(xù)同步。
根據(jù)前面的示例,當(dāng)CAN節(jié)點1在CAN消息傳輸期間檢測到錯誤時,它會立即傳輸相同邏輯電平的6位序列——也稱為引發(fā)活動錯誤標(biāo)志。
正如前文所述,這樣的序列違反了位填充規(guī)則——也稱為“位填充錯誤”。此外,此錯誤對網(wǎng)絡(luò)上的所有CAN節(jié)點都是可見的(與導(dǎo)致此錯誤標(biāo)志出現(xiàn)的“位錯誤”相反)。因此,錯誤標(biāo)志的增加可以被視為一種“全局性”錯誤發(fā)現(xiàn)的方式,確保通知每個CAN節(jié)點。
請注意,其他CAN節(jié)點會將活動錯誤標(biāo)志視為位填充錯誤。作為響應(yīng),它們還會引發(fā)一個活動錯誤標(biāo)志。正如我們后面將解釋的,區(qū)分錯誤標(biāo)志很重要。特別是,第一個錯誤標(biāo)志(來自“發(fā)現(xiàn)”節(jié)點)通常被稱為“主要”活動錯誤標(biāo)志,而后續(xù)“反應(yīng)”節(jié)點的錯誤標(biāo)志被稱為“次要”活動錯誤標(biāo)志(s)。
CAN錯誤幀示例
示例1
6位錯誤標(biāo)志
在這里,所有CAN節(jié)點同時發(fā)現(xiàn)CAN報文中存在錯誤并同時發(fā)出錯誤標(biāo)志。結(jié)果是錯誤標(biāo)志全部重疊并且顯性位的總序列總共持續(xù)6位。在這種情況下,所有CAN節(jié)點都將自己視為“發(fā)現(xiàn)”CAN節(jié)點。
同時發(fā)現(xiàn)這種類型的錯誤幀在實踐中不太常見。但是,它可能是由于格式錯誤(例如CRC定界符是顯性而不是隱性)或CAN發(fā)送器在寫入CRC字段期間遇到位錯誤而發(fā)生的。
示例2
12位錯誤標(biāo)志
在本示例中,CAN節(jié)點1傳輸顯性位,但將其讀取為隱性-這意味著它發(fā)現(xiàn)了位錯誤。它立即發(fā)送6個顯性位的序列。其他節(jié)點僅在讀取完整的6位后才發(fā)現(xiàn)位填充錯誤,之后它們同時提高錯誤標(biāo)志,從而產(chǎn)生隨后的6個顯性位序列-即總共12個。
示例3
9位錯誤標(biāo)志
在本示例中,當(dāng)CAN節(jié)點1發(fā)現(xiàn)位錯誤并開始發(fā)送6個顯性位時,它已經(jīng)發(fā)送了3個顯性位序列。一旦通過主要活動錯誤標(biāo)志的一半,節(jié)點2和3識別位填充錯誤(由于3個初始顯性位后面跟著另外3個顯性位)并開始提高它們的錯誤標(biāo)志。結(jié)果是來自錯誤標(biāo)志的顯性位序列變?yōu)?位長。
上述引發(fā)錯誤標(biāo)志的邏輯反映在我們所謂的“活動”CAN錯誤幀中。請?zhí)貏e注意各個節(jié)點引發(fā)的次要錯誤標(biāo)志如何相互重疊——以及主要和次要標(biāo)志也可能如何重疊。結(jié)果是來自引發(fā)錯誤標(biāo)志的主要位序列可能是6到12位長。
該序列始終以8個隱性位序列終止,標(biāo)志著錯誤幀的結(jié)束。實際上,活動錯誤幀可能在錯誤CAN幀中的不同位置“開始”,這取決于何時發(fā)現(xiàn)錯誤。然而,結(jié)果將是相同的:所有節(jié)點都丟棄錯誤的CAN幀,發(fā)送節(jié)點可以嘗試重新發(fā)送失敗的消息。
被動錯誤標(biāo)志
如果CAN節(jié)點已從其默認(rèn)的“活動”狀態(tài)轉(zhuǎn)變?yōu)椤氨粍印睜顟B(tài),那么它將只能引發(fā)所謂的“被動錯誤標(biāo)志”。被動錯誤標(biāo)志是6個隱性位的序列。在這種情況下,區(qū)分由發(fā)送節(jié)點和接收節(jié)點引發(fā)的被動錯誤標(biāo)志是相關(guān)的。
示例4
發(fā)送器是被動錯誤
如圖所示,如果發(fā)送器(例如我們示例中的CAN節(jié)點1)引發(fā)被動錯誤標(biāo)志(例如響應(yīng)位錯誤),這將對應(yīng)于6個隱性位的連續(xù)序列。這又被所有CAN節(jié)點檢測為位填充錯誤。假設(shè)其他CAN節(jié)點仍處于其錯誤活動狀態(tài),它們將引發(fā)6個顯性位的活動錯誤標(biāo)志。換言之,無源發(fā)送器仍然可以“傳達(dá)”CAN幀是錯誤的。
示例5
接收器是被動錯誤
相反,如果接收器產(chǎn)生被動錯誤標(biāo)志,這實際上對總線上的所有其他CAN節(jié)點“不可見”(因為任何顯性位都勝過隱性位序列)。實際上,這意味著錯誤被動接收器不再具有破壞其他CAN節(jié)點傳輸?shù)膸哪芰Α?/p>
-
CAN
+關(guān)注
關(guān)注
57文章
2686瀏覽量
462906
發(fā)布評論請先 登錄
相關(guān)推薦
評論