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