【導讀】CAN總線(xiàn)高負載率發(fā)送測試時(shí),如果出現大量錯誤報文、被測設備報文周期出現異常、甚至總線(xiàn)鎖死等,有很大可能是CAN網(wǎng)絡(luò )上的仲裁發(fā)生了異常。
隨著(zhù)工業(yè)技術(shù)不斷發(fā)展,CAN總線(xiàn)已廣泛應用于,車(chē)輛、航空、醫療等高安全要求領(lǐng)域。高頻發(fā)送CAN報文也成為安全測試的必要組成部分。在信號正常的網(wǎng)絡(luò )上高負載率發(fā)送測試時(shí),總線(xiàn)上偶然會(huì )出現許多意想不到的問(wèn)題,例如出現大量錯誤報文、被測設備報文周期出現異常、甚至總線(xiàn)鎖死等。這個(gè)時(shí)候我們則需要考慮一下CAN網(wǎng)絡(luò )上的仲裁是否發(fā)生了異常。
首先我們來(lái)了解一下CAN總線(xiàn)仲裁機制。
1 CAN總線(xiàn)仲裁機制
CAN總線(xiàn)作為現場(chǎng)總線(xiàn),每個(gè)節點(diǎn)可以同時(shí)偵測到網(wǎng)絡(luò )上正在發(fā)送的數據,當總線(xiàn)空閑時(shí)每個(gè)節點(diǎn)均可以發(fā)起自身報文發(fā)送。如果多個(gè)節點(diǎn)同時(shí)發(fā)起報文發(fā)送請求,由哪個(gè)節點(diǎn)占用總線(xiàn)就是仲裁機制的主要用途。
首先CAN總線(xiàn)物理層通常是雙絞線(xiàn)。當邏輯“1” 被寫(xiě)進(jìn)總線(xiàn)時(shí),CANH和CANL的電平都是2.5V,這種狀態(tài)并被定義為“隱性”位;當邏輯“0”被寫(xiě)進(jìn)總線(xiàn)時(shí)CANH會(huì )上拉到為5V,CANL被下拉到地0V,這種狀態(tài)被定義為“顯性”位。如果顯性位和隱性位被不同的節點(diǎn)同時(shí)寫(xiě)進(jìn)總線(xiàn)時(shí),總線(xiàn)會(huì )表現為“顯性”位。“顯性位覆蓋隱性位”是CAN總線(xiàn)沖突檢測的基礎。
當節點(diǎn)開(kāi)始傳送它們各自的報文時(shí),如果一個(gè)節點(diǎn)寫(xiě)進(jìn)了隱性位而讀回顯性位,節點(diǎn)會(huì )知道另一個(gè)高優(yōu)先權節點(diǎn)正在占用總線(xiàn),該節點(diǎn)會(huì )停止傳送報文并繼續接收總線(xiàn)報文。這種技術(shù)叫做“非破壞性逐位”仲裁。

圖1 CAN仲裁機制
如圖1所示,在多個(gè)節點(diǎn)同時(shí)發(fā)送報文時(shí),首次出現不同,且發(fā)送顯性位的節點(diǎn)占用總線(xiàn)。由于CAN報文首先發(fā)送的為ID段且顯性位為邏輯“0”,因此ID越小該幀的優(yōu)先級越高。
2 仲裁場(chǎng)
似乎按照“非破壞性逐位”仲裁機制,就可以從ID一直仲裁到CRC段,可是CAN傳輸標準并不是這樣, CAN標準要求,仲裁僅從基本ID第一位開(kāi)始,到標準幀的IDE位或擴展幀的RTR位結束。這個(gè)區域被定義為仲裁場(chǎng)。如圖2所示。

圖2 CAN仲裁場(chǎng)區域
依據仲裁場(chǎng)范圍,CAN總線(xiàn)仲裁流程如圖3所示。

圖3 CAN仲裁場(chǎng)區域
3 仲裁異常的影響
在CAN仲裁機制中,理論上仲裁必須在仲裁場(chǎng)完成。不過(guò)CAN總線(xiàn)配置錯誤或者測試時(shí)發(fā)送CAN幀疏忽,也存在仲裁場(chǎng)數據完全相同的情況,在這樣的情況下會(huì )對總線(xiàn)造成什么后果呢?下面我們按照CAN通訊原則分析一下仲裁異常時(shí)CAN總線(xiàn)可能出現什么表現。
1、仲裁場(chǎng)后數據傳輸不一致
在仲裁場(chǎng)結束后CAN節點(diǎn)需要對發(fā)送的數據進(jìn)行一致性對比,如果發(fā)送的數據與讀取回得數據不一致,收發(fā)器則需要發(fā)送CAN錯誤幀,以通知總線(xiàn)各個(gè)節點(diǎn)自身發(fā)送數據錯誤,停止接收并快速進(jìn)入總線(xiàn)空閑,以便再次數據發(fā)送。

圖4 仲裁場(chǎng)后數據傳輸不一致
如圖4所示當兩個(gè)節點(diǎn)發(fā)送的仲裁場(chǎng)相同,在仲裁場(chǎng)后DLC段發(fā)生數據不同情況。發(fā)送單元1發(fā)現自己本身需要發(fā)送的隱性電平而收到的是顯性電平,識別到數據不一致現象后立即發(fā)出錯誤幀信息(6個(gè)顯性位)。發(fā)送單元1發(fā)送錯誤信息過(guò)程中,發(fā)送單元2也將捕獲到自己某個(gè)隱性位發(fā)送與收取的不一致,從而也發(fā)出主動(dòng)錯誤幀。最終造成類(lèi)似圖4總線(xiàn)電平特征。
需要注意,大部分CAN收發(fā)器在發(fā)送過(guò)程中因為沒(méi)有占用到總線(xiàn)或者發(fā)送失敗,會(huì )在下一次總線(xiàn)空閑到來(lái)時(shí)再次占用總線(xiàn)發(fā)送相同的數據。因此當出現仲裁場(chǎng)數據相同,后續數據不同時(shí),有極大的可能造成總線(xiàn)錯誤后兩個(gè)節點(diǎn)再次同時(shí)占用總線(xiàn),再次進(jìn)行仲裁并總線(xiàn)錯誤,甚至反復進(jìn)入錯誤造成網(wǎng)絡(luò )鎖死等嚴重情況。
2、仲裁場(chǎng)后數據相同
如果兩個(gè)CAN節點(diǎn),發(fā)送CAN幀完全相同,兩個(gè)發(fā)送單元均認為占用了總線(xiàn),并成功發(fā)送完數據。雖然數據發(fā)送完成,不過(guò)需要注意CAN節點(diǎn)在發(fā)送數據幀時(shí),是不能夠對自己發(fā)送的CAN幀進(jìn)行應答,這個(gè)時(shí)候則會(huì )出現不同的情況。
不存在多余的應答節點(diǎn)

圖5 傳輸數據相同無(wú)應答
當所有的總線(xiàn)節點(diǎn)發(fā)送的數據均相同,那么所有節點(diǎn)認為自己成功發(fā)送了數據,而等待總線(xiàn)其他節點(diǎn)應答。此時(shí)發(fā)送節點(diǎn)會(huì )因為沒(méi)有得到應答而被CAN節點(diǎn)識別為發(fā)送失敗,從而重新占用總線(xiàn)再次發(fā)送。
(注:此現象與應用層有很大的關(guān)系,節點(diǎn)也可以被識別為發(fā)送成功而不再重發(fā)。)
存在多余應答節點(diǎn)

圖6 傳輸數據相同有應答
在多個(gè)節點(diǎn)同時(shí)發(fā)送相同數據到總線(xiàn),并存在其他節點(diǎn)不處于發(fā)送狀態(tài),其他節點(diǎn)則會(huì )對總線(xiàn)進(jìn)行應答,發(fā)送節點(diǎn)會(huì )認為CAN數據成功發(fā)送。從而隱藏了這種仲裁異?,F象。
4 仲裁的其他特性與測試建議
1、CAN總線(xiàn)中的節點(diǎn)在仲裁失敗、發(fā)送失敗或者請求發(fā)送時(shí)總線(xiàn)被其他節點(diǎn)占用,一般會(huì )在下一次空閑到來(lái)時(shí)請求發(fā)送,總線(xiàn)負載率越高,遇到上面的情況概率也就越大,因此仲裁事件的發(fā)生常出現在高負載率的總線(xiàn)環(huán)境下,如果可以控制總線(xiàn)負載率在合理范圍內,可以大大減少仲裁事件的發(fā)生。
2、每個(gè)CAN節點(diǎn)在發(fā)送報文時(shí),顯性電平都存在一定的驅動(dòng)能力,在仲裁事件發(fā)生時(shí),由于多個(gè)節點(diǎn)同時(shí)驅動(dòng)總線(xiàn),會(huì )造成CAN總線(xiàn)顯性電平電壓與平時(shí)高一點(diǎn)(驅動(dòng)點(diǎn)越多,電壓越高)。同時(shí)由于每個(gè)節點(diǎn)同步性可能存在微小的差異,其脈寬也可能發(fā)生改變。
3、當需要測試指定節點(diǎn)長(cháng)時(shí)間占用不到總線(xiàn)的表現時(shí),應該使用高優(yōu)先級測試報文進(jìn)行高負載率發(fā)送(盡可能達到100%)。高優(yōu)先級報文一直占用總線(xiàn),低優(yōu)先級報文永遠占用不到總線(xiàn)。當需要部分允許部分禁止,應設置測試報文優(yōu)先級在允許報文與不允許報文之間。
4、如果需要測試指定節點(diǎn)高負載率情況下報文周期特性,發(fā)送的報文優(yōu)先級不能高于被測節點(diǎn)周期特性報文的優(yōu)先級。如果被測節點(diǎn)滿(mǎn)足周期性,周期到來(lái)后的第一個(gè)空閑后報文發(fā)送就可以仲裁成功將該周期報文成功發(fā)送。
5、在某些CAN高層總線(xiàn)協(xié)議中,存在可變優(yōu)先級字段,(依據請求發(fā)送等待時(shí)間變化優(yōu)先級)。如果需要驗證報文優(yōu)先級變化特性,所發(fā)送的報文優(yōu)先級,需要使用高于初次請求優(yōu)先級,低于最高優(yōu)先級的報文。
5 總結
CAN總線(xiàn)中,無(wú)論節點(diǎn)還是測試設備發(fā)送報文仲裁場(chǎng)應該不同,這樣可以避免因仲裁異常造成的錯誤出現。同樣在CAN測試時(shí),應依據測試目的選擇合理的CAN報文ID,避免仲裁特性影響測試效果。

CANScope總線(xiàn)綜合分析儀是一款綜合性的CAN總線(xiàn)開(kāi)發(fā)與測試的專(zhuān)業(yè)工具,集海量存儲示波器、網(wǎng)絡(luò )分析儀、誤碼率分析儀、協(xié)議分析儀及可靠性測試工具于一身,并把各種儀器有機的整合和關(guān)聯(lián);重新定義CAN總線(xiàn)的開(kāi)發(fā)測試方法,可對CAN網(wǎng)絡(luò )通信正確性、可靠性、合理性進(jìn)行多角度全方位的評估;幫助用戶(hù)快速定位故障節點(diǎn),解決CAN總線(xiàn)應用的各種問(wèn)題,是CAN總線(xiàn)開(kāi)發(fā)測試的終極工具。
推薦閱讀: