你的位置:首頁(yè) > 電路保護(hù) > 正文

節(jié)點(diǎn)BusOff恢復(fù)過(guò)程分析與測(cè)試

發(fā)布時(shí)間:2020-06-11 責(zé)任編輯:lina

【導(dǎo)讀】總線關(guān)閉(bus off)是CAN節(jié)點(diǎn)比較重要的錯(cuò)誤處理機(jī)制。那么,在總線關(guān)閉狀態(tài)下,CAN節(jié)點(diǎn)的恢復(fù)流程是怎樣的?又該如何理解節(jié)點(diǎn)恢復(fù)流程的“快恢復(fù)”和“慢恢復(fù)”機(jī)制?本文將為大家詳細(xì)分析總線關(guān)閉及恢復(fù)的機(jī)制和原理。
  
總線關(guān)閉(bus off)是CAN節(jié)點(diǎn)比較重要的錯(cuò)誤處理機(jī)制。那么,在總線關(guān)閉狀態(tài)下,CAN節(jié)點(diǎn)的恢復(fù)流程是怎樣的?又該如何理解節(jié)點(diǎn)恢復(fù)流程的“快恢復(fù)”和“慢恢復(fù)”機(jī)制?本文將為大家詳細(xì)分析總線關(guān)閉及恢復(fù)的機(jī)制和原理。
 
故障界定與總線關(guān)閉狀態(tài)
 
為了避免某個(gè)設(shè)備因?yàn)樽陨碓颍ɡ缬布p壞)導(dǎo)致無(wú)法正確收發(fā)報(bào)文而不斷的破壞總線的數(shù)據(jù)幀,從而影響其它正常節(jié)點(diǎn)通信,CAN網(wǎng)絡(luò)具有嚴(yán)格的錯(cuò)誤診斷功能,CAN通用規(guī)范中規(guī)定每個(gè)CAN控制器中有一個(gè)發(fā)送錯(cuò)誤計(jì)數(shù)器和一個(gè)接收錯(cuò)誤計(jì)數(shù)器。根據(jù)計(jì)數(shù)值不同,節(jié)點(diǎn)會(huì)處于不同的錯(cuò)誤狀態(tài),并根據(jù)計(jì)數(shù)值的變化進(jìn)行狀態(tài)轉(zhuǎn)換,狀態(tài)轉(zhuǎn)換如下圖所示。
 
節(jié)點(diǎn)BusOff恢復(fù)過(guò)程分析與測(cè)試
圖1節(jié)點(diǎn)狀態(tài)轉(zhuǎn)換圖情形1
 
以上三種錯(cuò)誤狀態(tài)表示發(fā)生故障的嚴(yán)重程度,總線關(guān)閉是節(jié)點(diǎn)最嚴(yán)重的錯(cuò)誤狀態(tài)。并且,節(jié)點(diǎn)在不同的狀態(tài)下具有不同的特性,在總線關(guān)閉狀態(tài)下,節(jié)點(diǎn)不能發(fā)送報(bào)文或應(yīng)答總線上的報(bào)文,也就意味著不能再對(duì)總線有任何影響。
 
狀態(tài)跳轉(zhuǎn)和錯(cuò)誤計(jì)數(shù)的規(guī)則使得節(jié)點(diǎn)在發(fā)生通信故障時(shí)有了較好的自我錯(cuò)誤處理和恢復(fù)機(jī)制,從一種較嚴(yán)重的錯(cuò)誤狀態(tài)跳轉(zhuǎn)到另一種嚴(yán)重性相對(duì)較低的狀態(tài),本質(zhì)上就是一種恢復(fù)過(guò)程。圖1所呈現(xiàn)的轉(zhuǎn)換過(guò)程是CAN通用規(guī)范所要求的,我們從設(shè)備供應(yīng)商買回來(lái)的CAN控制器已經(jīng)把這些功能固化在硅片之中。
 
在通信過(guò)程中,錯(cuò)誤主動(dòng)和錯(cuò)誤被動(dòng)兩種狀態(tài)下節(jié)點(diǎn)的恢復(fù)過(guò)程一般不需要MCU進(jìn)行額外的編程處理,直接使用CAN控制器固有功能即可。但對(duì)于總線關(guān)閉狀態(tài),往往不直接使用CAN控制器固有的恢復(fù)過(guò)程,而是對(duì)其進(jìn)行編程控制,以實(shí)現(xiàn)“快恢復(fù)”和“慢恢復(fù)”機(jī)制。
 
注:
由于篇幅有限,關(guān)于錯(cuò)誤計(jì)數(shù)的詳細(xì)規(guī)則以及各狀態(tài)下節(jié)點(diǎn)的具體特性不在本文進(jìn)行討論,讀者可以查閱CAN的相關(guān)協(xié)議規(guī)范。
 
本文的“CAN控制器”是指已經(jīng)實(shí)現(xiàn)了CAN通用協(xié)議物理層和數(shù)據(jù)鏈路層所要求的功能和特性的器件,如SJA1000;而“節(jié)點(diǎn)”是指把CAN控制器與MCU、收發(fā)器等相關(guān)器件進(jìn)行整合開發(fā)出來(lái)的具有一定功能的CAN節(jié)點(diǎn)。
 
為什么需要對(duì)總線關(guān)閉狀態(tài)的節(jié)點(diǎn)實(shí)現(xiàn)“快恢復(fù)”和“慢恢復(fù)”策略?
 
當(dāng)節(jié)點(diǎn)進(jìn)入總線關(guān)閉狀態(tài)后,如果MCU僅是開啟自動(dòng)恢復(fù)功能,CAN控制器在檢測(cè)到128次11個(gè)連續(xù)的隱性位后即可恢復(fù)通信,在實(shí)際的CAN通信總線中,這一條件是很容易達(dá)到的。以125K的波特率為例,128*11*(1/125000)= 0.011264s。這意味著如果節(jié)點(diǎn)所在的CAN總線的幀間隔時(shí)間大于0.011264s,節(jié)點(diǎn)在總線空閑時(shí)間內(nèi)便可輕易恢復(fù)通信。我們已經(jīng)知道,當(dāng)進(jìn)入總線關(guān)閉狀態(tài)時(shí),節(jié)點(diǎn)已經(jīng)發(fā)生了嚴(yán)重的錯(cuò)誤,處于不可信狀態(tài),如果迅速恢復(fù)參與總線通信,具有較高的風(fēng)險(xiǎn),因此,在實(shí)際的應(yīng)用中,往往會(huì)通過(guò)MCU對(duì)CAN控制器總線關(guān)閉狀態(tài)的恢復(fù)過(guò)程進(jìn)行編程處理,以控制節(jié)點(diǎn)從總線關(guān)閉狀態(tài)恢復(fù)到錯(cuò)誤主動(dòng)狀態(tài)的等待時(shí)間,達(dá)到既提高靈活性又保證節(jié)點(diǎn)在功能上的快速響應(yīng)性的目的。具體包括“快恢復(fù)”和“慢恢復(fù)”策略,兩種策略一般同時(shí)應(yīng)用。
 
通過(guò)以上的討論,我們可以知道,節(jié)點(diǎn)進(jìn)入總線關(guān)閉狀態(tài)后,存在以下幾種恢復(fù)情況:
 
MCU僅開啟CAN控制器的自動(dòng)恢復(fù)功能,節(jié)點(diǎn)只需檢測(cè)到128次11個(gè)連續(xù)的隱性位便可以恢復(fù)通信,恢復(fù)過(guò)程如圖1所示。
 
MCU沒有開啟CAN控制器的自動(dòng)恢復(fù)功能,也不主動(dòng)干預(yù)總線關(guān)閉錯(cuò)誤,節(jié)點(diǎn)將一直無(wú)法“自動(dòng)”恢復(fù)總線通信,只能通過(guò)重新上電的方式使節(jié)點(diǎn)恢復(fù), 恢復(fù)過(guò)程如圖2所示。
 
說(shuō)明: E:CAN分析儀產(chǎn)品分類CANDT微信文章CANScope節(jié)點(diǎn)BusOff恢復(fù)過(guò)程分析與測(cè)試圖2.jpg
 
 節(jié)點(diǎn)BusOff恢復(fù)過(guò)程分析與測(cè)試
圖2 節(jié)點(diǎn)狀態(tài)轉(zhuǎn)換圖情形2
 
MCU對(duì)CAN控制器的恢復(fù)過(guò)程進(jìn)行編程處理,這時(shí),節(jié)點(diǎn)的恢復(fù)行為由具體的編程邏輯決定,各廠家普遍采用了先“快恢復(fù)”后“慢恢復(fù)”的恢復(fù)策略,恢復(fù)過(guò)程如圖3所示。
 
說(shuō)明: E:CAN分析儀產(chǎn)品分類CANDT微信文章CANScope節(jié)點(diǎn)BusOff恢復(fù)過(guò)程分析與測(cè)試圖3.jpg
 
 節(jié)點(diǎn)BusOff恢復(fù)過(guò)程分析與測(cè)試
圖3 節(jié)點(diǎn)狀態(tài)轉(zhuǎn)換圖情形3
 
MCU如何實(shí)現(xiàn)“快恢復(fù)”和“慢恢復(fù)”?
 
MCU編程實(shí)現(xiàn)總線關(guān)閉“快恢復(fù)”和“慢恢復(fù)”的一般過(guò)程可用以下流程圖描述:
 
說(shuō)明: E:CAN分析儀產(chǎn)品分類CANDT微信文章CANScope節(jié)點(diǎn)BusOff恢復(fù)過(guò)程分析與測(cè)試圖4.jpg
 
 節(jié)點(diǎn)BusOff恢復(fù)過(guò)程分析與測(cè)試
圖4 MCU實(shí)現(xiàn)總線關(guān)閉恢復(fù)流程
 
節(jié)點(diǎn)以正常發(fā)送模式發(fā)送報(bào)文的過(guò)程中,如果出現(xiàn)了發(fā)送錯(cuò)誤,發(fā)送錯(cuò)誤計(jì)數(shù)會(huì)增加,只要發(fā)送錯(cuò)誤計(jì)數(shù)沒有超過(guò)255, CAN控制器便會(huì)自動(dòng)重發(fā)報(bào)文,如果出現(xiàn)多次發(fā)送錯(cuò)誤,使發(fā)送錯(cuò)誤計(jì)數(shù)累加超過(guò)255,則節(jié)點(diǎn)跳轉(zhuǎn)為總線關(guān)閉狀態(tài)。MCU能夠第一時(shí)間知道節(jié)點(diǎn)進(jìn)入了總線關(guān)閉狀態(tài)(例如在錯(cuò)誤中斷處理邏輯中查詢狀態(tài)寄存器的相應(yīng)位),這時(shí)MCU控制CAN控制器進(jìn)入“快恢復(fù)”過(guò)程,即控制CAN控制器停止報(bào)文收發(fā),并進(jìn)行等待,計(jì)時(shí)達(dá)到需要的時(shí)間T1(如100ms)后,MCU重新啟動(dòng)恢復(fù)CAN控制器參與總線通信,這樣便完成了一次“快恢復(fù)”過(guò)程。
 
節(jié)點(diǎn)每進(jìn)入一次“快恢復(fù)”過(guò)程時(shí),MCU會(huì)對(duì)此進(jìn)行計(jì)數(shù),當(dāng)節(jié)點(diǎn)“快恢復(fù)”計(jì)數(shù)達(dá)到設(shè)定的值N(如5次),則后續(xù)再次進(jìn)入總線關(guān)閉狀態(tài)時(shí)MCU把恢復(fù)總線通信的等待時(shí)間T2進(jìn)行延長(zhǎng)(如1000ms),這樣便實(shí)現(xiàn)了“慢恢復(fù)”過(guò)程。“快恢復(fù)”和“慢恢復(fù)”過(guò)程的主要區(qū)別就在于恢復(fù)節(jié)點(diǎn)參與總線通信的等待時(shí)間的不同。
 
通過(guò)MCU對(duì)于總線關(guān)閉后的恢復(fù)行為進(jìn)行編程控制,實(shí)際上是對(duì)CAN控制器的錯(cuò)誤管理和恢復(fù)機(jī)制進(jìn)行了補(bǔ)充,使得總線關(guān)閉狀態(tài)后的恢復(fù)過(guò)程更加靈活,更能適應(yīng)實(shí)際應(yīng)用的需要。對(duì)于 “快恢復(fù)”和“慢恢復(fù)”的等待時(shí)間,以及“快恢復(fù)”計(jì)數(shù)多少次后進(jìn)入“慢恢復(fù)”過(guò)程,不同廠家可根據(jù)具體的需求進(jìn)行編程實(shí)現(xiàn)。
 
實(shí)測(cè)總線關(guān)閉恢復(fù)過(guò)程
 
通過(guò)廣州致遠(yuǎn)電子有限公司的CAN總線分析儀的流量分析功能,可以很方便分析總線關(guān)閉后節(jié)點(diǎn)的恢復(fù)過(guò)程及測(cè)試“快恢復(fù)”和“慢恢復(fù)”的恢復(fù)時(shí)間。
 
第一步,連接DUT但先不要上電。按以下配置,使能接收干擾功能,并開啟報(bào)文讀取功能。
 
 節(jié)點(diǎn)BusOff恢復(fù)過(guò)程分析與測(cè)試
圖5 功能設(shè)置
 
第二步,給DUT上電,并采集一段時(shí)間報(bào)文,停止采集后使用流量分析功能進(jìn)行分析。
 
節(jié)點(diǎn)BusOff恢復(fù)過(guò)程分析與測(cè)試
圖6 采集報(bào)文并進(jìn)行流量分析
 
第三步,鼠標(biāo)放置于波形“團(tuán)”(本文把包含多幀密集幀的波形稱為波形“團(tuán)”)之間讀取恢復(fù)時(shí)間。
 
節(jié)點(diǎn)BusOff恢復(fù)過(guò)程分析與測(cè)試
圖7 讀取恢復(fù)時(shí)間
 
至此,我們便可以得出結(jié)論:該DUT對(duì)總線關(guān)閉的恢復(fù)過(guò)程進(jìn)行了編程控制,采用了先“快恢復(fù)”后“慢恢復(fù)”的恢復(fù)機(jī)制,節(jié)點(diǎn)進(jìn)入總線關(guān)閉狀態(tài)后,進(jìn)行一次“快恢復(fù)”過(guò)程,后續(xù)進(jìn)行“慢恢復(fù)”過(guò)程,兩個(gè)恢復(fù)過(guò)程的恢復(fù)時(shí)間分別為27.5ms和209.5ms。
 
那么,我們?cè)撊绾胃鶕?jù)所得波形理解該DUT進(jìn)入總線關(guān)閉狀態(tài)及恢復(fù)通信的整個(gè)過(guò)程呢?
 
把第一個(gè)波形“團(tuán)”放大得到下圖:
 
 節(jié)點(diǎn)BusOff恢復(fù)過(guò)程分析與測(cè)試
圖8 放大波形“團(tuán)”觀察
 
可以清晰的看到,波形“團(tuán)”中包含共32幀CAN報(bào)文。把其余各波形“團(tuán)”放大后也都是包含32幀,這里不再把詳細(xì)的圖片貼出來(lái)。
 
DUT上電后,初始發(fā)送和接收錯(cuò)誤計(jì)數(shù)都為0。由于在測(cè)試時(shí)配置了接收干擾功能,當(dāng)DUT開始發(fā)送報(bào)文后,每一幀報(bào)文都受到CAN總線分析儀的干擾而出現(xiàn)發(fā)送錯(cuò)誤,第一次發(fā)送時(shí)發(fā)送錯(cuò)誤計(jì)數(shù)加8,并自動(dòng)重發(fā),第二次發(fā)送時(shí)錯(cuò)誤計(jì)數(shù)再加8,直到發(fā)送了32次后,發(fā)送錯(cuò)誤計(jì)數(shù)大于255,根據(jù)圖3的錯(cuò)誤狀態(tài)的轉(zhuǎn)換規(guī)則,這時(shí)DUT跳轉(zhuǎn)為總線關(guān)閉狀態(tài),MCU控制進(jìn)入“快恢復(fù)”過(guò)程同時(shí)對(duì)“快恢復(fù)”次數(shù)進(jìn)行計(jì)數(shù),并等待約27ms后,MCU控制DUT從總線關(guān)閉狀態(tài)恢復(fù)為錯(cuò)誤主動(dòng)狀態(tài),由MCU繼續(xù)啟動(dòng)發(fā)送,由于仍然受CAN總線分析儀的持續(xù)干擾,發(fā)送32幀后再次進(jìn)入總線關(guān)閉狀態(tài),再次執(zhí)行“快恢復(fù)”或“慢恢復(fù)”過(guò)程,以此類推。
 
根據(jù)流量分析的結(jié)果可知,該DUT進(jìn)入“快恢復(fù)”的計(jì)數(shù)達(dá)到1次后便執(zhí)行“慢恢復(fù)”過(guò)程,“慢恢復(fù)”等待時(shí)間約為209ms。
 
注:
干擾的設(shè)置可以根據(jù)需要設(shè)置其他的參數(shù),只要保證能對(duì)DUT發(fā)送的幀進(jìn)行干擾使其出現(xiàn)發(fā)送錯(cuò)誤即可。
 
為了分析完整的總線關(guān)閉恢復(fù)過(guò)程,建議DUT和CAN總線分析儀連接好后,先開啟“報(bào)文讀取”和“接收干擾”功能后再上電DUT。因?yàn)檫@樣能確保DUT的接收錯(cuò)誤計(jì)數(shù)和發(fā)送錯(cuò)誤計(jì)數(shù)的初始計(jì)數(shù)都為0。
 
需要對(duì)DUT進(jìn)行連續(xù)的干擾,否則DUT恢復(fù)后成功發(fā)送了報(bào)文,“快恢復(fù)”次數(shù)的計(jì)數(shù)會(huì)遞減,這不利于分析DUT總線關(guān)閉后的整個(gè)恢復(fù)行為。
 
總線關(guān)閉后節(jié)點(diǎn)的“恢復(fù)”是指恢復(fù)參與總線的通信,但并不意味著恢復(fù)后一定能成功發(fā)送或接收?qǐng)?bào)文。如上述案例,DUT恢復(fù)通信后由于仍然受CAN總線分析儀的干擾,導(dǎo)致報(bào)文發(fā)送再次失敗。
 
總結(jié):
在總線關(guān)閉狀態(tài)下,“快恢復(fù)”和“慢恢復(fù)”不是CAN控制器固有的功能,而是通過(guò)MCU的編程邏輯實(shí)現(xiàn)的恢復(fù)機(jī)制,是總線關(guān)閉狀態(tài)下恢復(fù)過(guò)程的補(bǔ)充,使恢復(fù)過(guò)程更具有靈活性。
 

免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請(qǐng)聯(lián)系小編進(jìn)行處理。
 
 
推薦閱讀:
MEMS麥克風(fēng)在語(yǔ)音激活設(shè)計(jì)中如何輔助聲音檢測(cè)和關(guān)鍵詞識(shí)別
如何最大限度降低?uk穩(wěn)壓器的輻射?
如何正確使用功率器件以滿足工業(yè)電源要求
不同雷達(dá)目標(biāo)生成器的構(gòu)架、設(shè)計(jì)要求和準(zhǔn)則
濾波器原理,各式盡在掌握
要采購(gòu)濾波器么,點(diǎn)這里了解一下價(jià)格!
特別推薦
技術(shù)文章更多>>
技術(shù)白皮書下載更多>>
熱門搜索
?

關(guān)閉

?

關(guān)閉