CAN網(wǎng)絡(luò)上的仲裁異常分析以及特性與測(cè)試建議
隨著工業(yè)技術(shù)不斷發(fā)展,CAN總線已廣泛應(yīng)用于,車輛、航空、醫(yī)療等高安全要求領(lǐng)域。高頻發(fā)送CAN報(bào)文也成為安全測(cè)試的必要組成部分。在信號(hào)正常的網(wǎng)絡(luò)上高負(fù)載率發(fā)送測(cè)試時(shí),總線上偶然會(huì)出現(xiàn)許多意想不到的問(wèn)題,例如出現(xiàn)大量錯(cuò)誤報(bào)文、被測(cè)設(shè)備報(bào)文周期出現(xiàn)異常、甚至總線鎖死等。這個(gè)時(shí)候我們則需要考慮一下CAN網(wǎng)絡(luò)上的仲裁是否發(fā)生了異常。
首先我們來(lái)了解一下CAN總線仲裁機(jī)制。
CAN總線仲裁機(jī)制CAN總線作為現(xiàn)場(chǎng)總線,每個(gè)節(jié)點(diǎn)可以同時(shí)偵測(cè)到網(wǎng)絡(luò)上正在發(fā)送的數(shù)據(jù),當(dāng)總線空閑時(shí)每個(gè)節(jié)點(diǎn)均可以發(fā)起自身報(bào)文發(fā)送。如果多個(gè)節(jié)點(diǎn)同時(shí)發(fā)起報(bào)文發(fā)送請(qǐng)求,由哪個(gè)節(jié)點(diǎn)占用總線就是仲裁機(jī)制的主要用途。
首先CAN總線物理層通常是雙絞線。當(dāng)邏輯“1” 被寫進(jìn)總線時(shí),CANH和CANL的電平都是2.5V,這種狀態(tài)并被定義為“隱性”位;當(dāng)邏輯“0”被寫進(jìn)總線時(shí)CANH會(huì)上拉到為5V,CANL被下拉到地0V,這種狀態(tài)被定義為“顯性”位。如果顯性位和隱性位被不同的節(jié)點(diǎn)同時(shí)寫進(jìn)總線時(shí),總線會(huì)表現(xiàn)為“顯性”位?!帮@性位覆蓋隱性位”是CAN總線沖突檢測(cè)的基礎(chǔ)。
當(dāng)節(jié)點(diǎn)開始傳送它們各自的報(bào)文時(shí),如果一個(gè)節(jié)點(diǎn)寫進(jìn)了隱性位而讀回顯性位,節(jié)點(diǎn)會(huì)知道另一個(gè)高優(yōu)先權(quán)節(jié)點(diǎn)正在占用總線,該節(jié)點(diǎn)會(huì)停止傳送報(bào)文并繼續(xù)接收總線報(bào)文。這種技術(shù)叫做“非破壞性逐位”仲裁。
圖2 CAN仲裁場(chǎng)區(qū)域
依據(jù)仲裁場(chǎng)范圍,CAN總線仲裁流程如圖3 所示。
圖4 仲裁場(chǎng)后數(shù)據(jù)傳輸不一致
如圖4 所示當(dāng)兩個(gè)節(jié)點(diǎn)發(fā)送的仲裁場(chǎng)相同,在仲裁場(chǎng)后DLC段發(fā)生數(shù)據(jù)不同情況。發(fā)送單元1發(fā)現(xiàn)自己本身需要發(fā)送的隱性電平而收到的是顯性電平,識(shí)別到數(shù)據(jù)不一致現(xiàn)象后立即發(fā)出錯(cuò)誤幀信息(6個(gè)顯性位)。發(fā)送單元1發(fā)送錯(cuò)誤信息過(guò)程中,發(fā)送單元2也將捕獲到自己某個(gè)隱性位發(fā)送與收取的不一致,從而也發(fā)出主動(dòng)錯(cuò)誤幀。最終造成類似圖4 總線電平特征。
需要注意,大部分CAN收發(fā)器在發(fā)送過(guò)程中因?yàn)闆](méi)有占用到總線或者發(fā)送失敗,會(huì)在下一次總線空閑到來(lái)時(shí)再次占用總線發(fā)送相同的數(shù)據(jù)。因此當(dāng)出現(xiàn)仲裁場(chǎng)數(shù)據(jù)相同,后續(xù)數(shù)據(jù)不同時(shí),有極大的可能造成總線錯(cuò)誤后兩個(gè)節(jié)點(diǎn)再次同時(shí)占用總線,再次進(jìn)行仲裁并總線錯(cuò)誤,甚至反復(fù)進(jìn)入錯(cuò)誤造成網(wǎng)絡(luò)鎖死等嚴(yán)重情況。
2、仲裁場(chǎng)后數(shù)據(jù)相同
如果兩個(gè)CAN節(jié)點(diǎn),發(fā)送CAN幀完全相同,兩個(gè)發(fā)送單元均認(rèn)為占用了總線,并成功發(fā)送完數(shù)據(jù)。雖然數(shù)據(jù)發(fā)送完成,不過(guò)需要注意CAN節(jié)點(diǎn)在發(fā)送數(shù)據(jù)幀時(shí),是不能夠?qū)ψ约喊l(fā)送的CAN幀進(jìn)行應(yīng)答,這個(gè)時(shí)候則會(huì)出現(xiàn)不同情況。
a、不存在多余的應(yīng)答節(jié)點(diǎn)
圖6 傳輸數(shù)據(jù)相同有應(yīng)答
在多個(gè)節(jié)點(diǎn)同時(shí)發(fā)送相同數(shù)據(jù)到總線,并存在其他節(jié)點(diǎn)不處于發(fā)送狀態(tài),其他節(jié)點(diǎn)則會(huì)對(duì)總線進(jìn)行應(yīng)答,發(fā)送節(jié)點(diǎn)會(huì)認(rèn)為CAN數(shù)據(jù)成功發(fā)送。從而隱藏了這種仲裁異常現(xiàn)象。
仲裁的其他特性與測(cè)試建議1、CAN總線中的節(jié)點(diǎn)在仲裁失敗、發(fā)送失敗或者請(qǐng)求發(fā)送時(shí)總線被其他節(jié)點(diǎn)占用,一般會(huì)在下一次空閑到來(lái)時(shí)請(qǐng)求發(fā)送,總線負(fù)載率越高,遇到上面的情況概率也就越大,因此仲裁事件的發(fā)生常出現(xiàn)在高負(fù)載率的總線環(huán)境下,如果可以控制總線負(fù)載率在合理范圍內(nèi),可以大大減少仲裁事件的發(fā)生。
2、每個(gè)CAN節(jié)點(diǎn)在發(fā)送報(bào)文時(shí),顯性電平都存在一定的驅(qū)動(dòng)能力,在仲裁事件發(fā)生時(shí),由于多個(gè)節(jié)點(diǎn)同時(shí)驅(qū)動(dòng)總線,會(huì)造成CAN總線顯性電平電壓與平時(shí)高一點(diǎn)(驅(qū)動(dòng)點(diǎn)越多,電壓越高)。同時(shí)由于每個(gè)節(jié)點(diǎn)同步性可能存在微小的差異,其脈寬也可能發(fā)生改變。
3、當(dāng)需要測(cè)試指定節(jié)點(diǎn)長(zhǎng)時(shí)間占用不到總線的表現(xiàn)時(shí),應(yīng)該使用高優(yōu)先級(jí)測(cè)試報(bào)文進(jìn)行高負(fù)載率發(fā)送(盡可能達(dá)到100%)。高優(yōu)先級(jí)報(bào)文一直占用總線,低優(yōu)先級(jí)報(bào)文永遠(yuǎn)占用不到總線。當(dāng)需要部分允許部分禁止,應(yīng)設(shè)置測(cè)試報(bào)文優(yōu)先級(jí)在允許報(bào)文與不允許報(bào)文之間。
4、如果需要測(cè)試指定節(jié)點(diǎn)高負(fù)載率情況下報(bào)文周期特性,發(fā)送的報(bào)文優(yōu)先級(jí)不能高于被測(cè)節(jié)點(diǎn)周期特性報(bào)文的優(yōu)先級(jí)。如果被測(cè)節(jié)點(diǎn)滿足周期性,周期到來(lái)后的第一個(gè)空閑后報(bào)文發(fā)送就可以仲裁成功將該周期報(bào)文成功發(fā)送。
5、在某些CAN高層總線協(xié)議中,存在可變優(yōu)先級(jí)字段,(依據(jù)請(qǐng)求發(fā)送等待時(shí)間變化優(yōu)先級(jí))。如果需要驗(yàn)證報(bào)文優(yōu)先級(jí)變化特性,所發(fā)送的報(bào)文優(yōu)先級(jí),需要使用高于初次請(qǐng)求優(yōu)先級(jí),低于最高優(yōu)先級(jí)的報(bào)文。
CAN總線中,無(wú)論節(jié)點(diǎn)還是測(cè)試設(shè)備發(fā)送報(bào)文仲裁場(chǎng)應(yīng)該不同,這樣可以避免因仲裁異常造成的錯(cuò)誤出現(xiàn)。同樣在CAN測(cè)試時(shí),應(yīng)依據(jù)測(cè)試目的選擇合理的CAN報(bào)文ID,避免仲裁特性影響測(cè)試效果。