點擊上方藍字談思實驗室
獲取更多汽車網(wǎng)絡(luò)安全資訊

在嵌入式開發(fā)中,常常聽到一句話“汽車上都用CAN總線,那這個總線的穩(wěn)定性應(yīng)該是有所保障的”,而這種穩(wěn)定性的保障,正是因為CAN總線直面了現(xiàn)場總線的復(fù)雜環(huán)境,做了相應(yīng)的錯誤處理以及故障界定。
工業(yè)現(xiàn)場總線的應(yīng)用環(huán)境,不可避免的會有干擾在傳輸線上,雖然已經(jīng)用差分信號傳遞數(shù)據(jù),但是因為所有終端都是接到了一個CAN總線上,不可避免又會出現(xiàn)諸如發(fā)送消息碰撞,或者因為某個終端的性能下降等原因,影響整個總線的通信質(zhì)量。CAN總線,定義了類似CSMA/CA來處理消息碰撞的問題,并通過ACK來保證報文發(fā)送成功,并且實現(xiàn)了相關(guān)的錯誤處理以及故障界定策略,來保證總線上的穩(wěn)定通信質(zhì)量。
01
碰撞處理
CSMA/CA指的是可對發(fā)送的數(shù)據(jù)進行實時偵聽,進行沖突檢測,并實現(xiàn)同一通信線路的多路訪問的一種協(xié)議。
CAN總線上消息傳遞的基本單位為幀,其由不同的位場構(gòu)成。
數(shù)據(jù)幀,由幀起始、仲裁場、控制場、數(shù)據(jù)場、CRC 場、應(yīng)答場、幀結(jié)尾7個位場組成。幀的起始位由一位顯性電平組成,下面的示意圖將顯性電平畫為了低電平。

防止碰撞的關(guān)鍵就在于仲裁場,其中包括識別符和遠程發(fā)送請求位(RTR)。CAN控制器能實時的偵測到當前總線的狀態(tài),當兩個CAN控制器同時發(fā)送報文的時候,CAN控制器會實時監(jiān)測監(jiān)測總線狀態(tài),當其中一個CAN控制器在仲裁域發(fā)現(xiàn)其發(fā)送的電平本來是隱性位,但是讀上來的確實顯性位的時候,就會發(fā)生仲裁失敗,退出發(fā)送狀態(tài),轉(zhuǎn)為接收狀態(tài)。所以說,對于總線上的數(shù)據(jù),識別符部分越小(高位連續(xù)低電平個數(shù)較多)的幀,會搶占識別符高的幀發(fā)送。
ACK位前后都是隱性位,發(fā)送此報文的CAN控制器會嘗試發(fā)送隱性位。如果有其余的CAN控制器能夠通過CRC校驗成功,就會在ACK位將總線置成顯性位。這樣發(fā)送報文的CAN控制器通過讀取的ACK位為顯性位就知道總線上有其余的CAN節(jié)點成功接收到了數(shù)據(jù)。
02
錯誤處理
作為CAN控制器,判斷總線上發(fā)生了錯誤的依據(jù),跟總線上的幀格式有著莫大的關(guān)系。我們將總線上正在發(fā)送報文的CAN控制器為發(fā)送器,其余的位接收器。
位錯誤:當接入總線的CAN控制器處于發(fā)送的階段(發(fā)送報文已經(jīng)仲裁成功),檢測到總線上的位狀態(tài)與發(fā)送的不相符,則發(fā)生位錯誤(ACK SLOT的隱性位除外)。
填充錯誤:數(shù)據(jù)幀以及遙控幀,均通過位填充的方法編碼。無論何時,發(fā)送器只要檢測到位流里有5 個連續(xù)識別值的位,便自動在位流里插入一補碼位。如果在通過NRZ編碼過的幀部分,出現(xiàn)了連續(xù)相同的位電平,則產(chǎn)生填充錯誤。
CRC錯誤:CRC 序列包括發(fā)送器的CRC 計算結(jié)果。接收器計算CRC 的方法與發(fā)送器相同。如果計算結(jié)果與接收到CRC 序列的結(jié)果不相符,則檢測到一個CRC 錯誤(CRC ERROR)。
形式錯誤:當一個固定形式的位場含有1 個或多個非法位,則檢測到一個形式錯誤(FORM ERROR)。比如說幀結(jié)尾固定為隱性位,卻檢測到了顯性位。
應(yīng)答錯誤:只要在ACK 間隙(ACK SLOT)期間所監(jiān)視的位不為“顯性”,則發(fā)送器會檢測到一個應(yīng)答錯誤(ACKNOWLEDGMENT ERROR)。
當總線上的CAN控制器發(fā)生了這些錯誤,將會根據(jù)當前CAN控制器所處的狀態(tài)做出相應(yīng)的操作。
根據(jù)設(shè)備的故障界定結(jié)果,設(shè)備可能會處于三種不同的狀態(tài):錯誤主動狀態(tài),錯誤被動狀態(tài),以及總線關(guān)閉狀態(tài),三種狀態(tài)表征設(shè)備當前的CAN總線狀況按順序逐漸嚴重?!板e誤主動”的單元可以正常地參與總線通訊并在錯誤被檢測到時發(fā)出主動錯誤標志?!板e誤被動”的單元不允許發(fā)送主動錯誤標志。“錯誤被動”的單元參與總線通訊而且在錯誤被檢測到時只發(fā)出被動錯誤標志。而且,發(fā)送以后,“錯誤被動”單元將在預(yù)設(shè)下一個發(fā)送之前處于等待狀態(tài)。“總線關(guān)閉”的單元不允許在總線上有任何的影響(比如,關(guān)閉輸出驅(qū)動器)。
當CAN控制器檢測到位錯誤,填充錯誤,形式錯誤或者應(yīng)答錯誤,這個CAN控制器會即刻在下一位發(fā)出錯誤幀。錯誤幀由兩個不同的場組成,第一個場是一根總線上掛載的所有CAN控制器提供的錯誤標志的疊加,第二個場是錯誤界定符。錯誤標志分為兩種,一種是主動錯誤標志,由6個顯性的位組成,由處于錯誤主動狀態(tài)的CAN控制器發(fā)送。而作為處于錯誤被動狀態(tài)的CAN控制器,發(fā)送的錯誤標志稱為被動錯誤標志,由6個隱性位組成,因為發(fā)送的是隱性位,所以當處于被動錯誤的CAN控制器要發(fā)送錯誤幀的時候,只要檢測到6個連續(xù)相同的極性位即算成功發(fā)送錯誤標志。
數(shù)據(jù)幀以及遙控幀的幀起始、仲裁場、控制場、數(shù)據(jù)場以及CRC 序列,均通過位填充的方法編碼。無論何時,發(fā)送器只要檢測到位流里有5 個連續(xù)相同值的位,便自動在位流里插入一補充反向位。數(shù)據(jù)幀或遠程幀(CRC 界定符、應(yīng)答場和幀結(jié)尾)的剩余位場形式固定,不填充。錯誤幀和過載幀不進行編碼。主動錯誤標志將破壞從幀起始到CRC 界定符的位填充規(guī)則,或者破壞了應(yīng)答場或幀末尾場的固定格式。所以當一個處于錯誤主動狀態(tài)的CAN控制器發(fā)送錯誤幀的時候,會引起所有其余處于錯誤主動狀態(tài)的CAN控制器同時發(fā)送錯誤標志,因此,顯性位疊加導(dǎo)致總線上會出現(xiàn)所有站的錯誤標志疊加到一起,但是因為在總線上出現(xiàn)錯誤幀之前的連續(xù)顯性電平位數(shù)不確定,所以這個總長度最小為6位,最大為12位。
錯誤界定符包括8 個“隱性”的位。錯誤標志傳送了以后,每一站就發(fā)送“隱性”的位并一直監(jiān)視總線直到檢測出一個“隱性”的位為止。然后就開始發(fā)送7 位以上的“隱性”位。
講到這里就順便講一下過載幀。首先數(shù)據(jù)幀(或者遠程幀)與前邊的幀需要“隔離",這通過幀間空間來實現(xiàn),幀間空間包括間歇場,掛起傳送位場,以及總線空閑位場。間歇場由3個隱性位組成,而緊跟間歇場的掛起傳送位場只有處于錯誤被動狀態(tài)的CAN控制器會需要再連續(xù)監(jiān)測總線3個隱性位,才能轉(zhuǎn)到總線空閑狀態(tài)。在總線空閑的狀態(tài)上,監(jiān)測到顯性位理解為幀起始。過載幀格式跟由主動錯誤標志組成的錯誤幀一樣,區(qū)別就在于其是在間歇場發(fā)出的,由接收器的內(nèi)部條件決定(報文過載)決定的,過載標志的形式破壞了間歇場的固定形式。因此,所有其他的站都檢測到一過載條件并與此同時發(fā)出過載標志。
03
故障界定
在每一總線單元里實現(xiàn)兩種計數(shù)以便故障界定:
發(fā)送錯誤計數(shù)
接收錯誤計數(shù)
這些計數(shù)按照固定的規(guī)則進行改變。接收錯誤增加/減少的方式包括:
作為接收器,檢測到了包括CRC錯誤等的錯誤,接收錯誤計數(shù)器加一(發(fā)送主動錯誤標志或過載標志時,如果發(fā)送器檢測到位錯誤,則發(fā)送錯誤計數(shù)器值加八)。
作為接收器,發(fā)送完錯誤錯誤標志之后如果檢測到顯性位,則接收錯誤計數(shù)器加八,而后如果還能連續(xù)檢測到8位顯性位,持續(xù)加八。
如果接收計數(shù)器錯誤數(shù)值介于1和127之間,在成功接收到報文之后(直到應(yīng)答間隙接收沒有錯誤,及成功地發(fā)送了ACK 位),接收錯誤計數(shù)器值減1;如果大于127,則它會設(shè)置一個介于119 到127 之間值。如果接收錯誤計數(shù)器值是0,則它保持0。
發(fā)送錯誤計數(shù)器增加/減少的方式包括:
當發(fā)送器發(fā)送錯誤標志(檢測到錯誤,或者接收器發(fā)送錯誤標志導(dǎo)致填充錯誤),發(fā)送錯誤計數(shù)器值加八。但是有兩個例外,一個是發(fā)送器為錯誤被動,檢測到的是應(yīng)答錯誤,并且發(fā)送被動錯誤標志的時候檢測不到一個錯誤,這個時候發(fā)送錯誤計數(shù)器不加八。另一種例外是發(fā)送器因為填充錯誤而發(fā)送錯誤標志(注:此填充錯誤發(fā)生于仲裁期間。引起填充錯誤是由于:填充位位于RTR 位之前,并已作為“隱性”發(fā)送,但是卻被監(jiān)視為“顯性”),發(fā)送錯誤計數(shù)器同樣不自增。
在發(fā)送器發(fā)送主動錯誤標志或者過載標志的時候,如果發(fā)送器檢測到位錯誤,則發(fā)送錯誤計數(shù)器值加8。在發(fā)送主動錯誤標志、被動錯誤標志或過載標志以后,每多檢測到8位顯性位,則發(fā)送錯誤計數(shù)器值持續(xù)加8。
報文成功傳送后(得到ACK 及直到幀末尾結(jié)束沒有錯誤),發(fā)送錯誤計數(shù)器值減1,除非已經(jīng)是0。
CAN控制根據(jù)這個計數(shù)器切換錯誤主動狀態(tài),錯誤被動狀態(tài),以及總線關(guān)閉這三種狀態(tài),具體的切換關(guān)系圖如下。

這里多說一句題外話,BOSCH的原廠是描述的在總線監(jiān)視到128 次出現(xiàn)11 個連續(xù)“隱性”位之后,“總線關(guān)閉”的節(jié)點可以變成“錯誤主動”不再是“總線關(guān)閉”),它的錯誤計數(shù)值也被設(shè)置為0。而這個功能在STM公司的芯片的CAN控制器實現(xiàn)上需要配置寄存器使能這個功能。
BOSCH的原廠的協(xié)議說明有兩條很重要注意。
一個大約大于96 的錯誤計數(shù)值顯示總線被嚴重干擾。最好能夠預(yù)先采取措施測試這個條件。
當節(jié)點啟動之后,總線上只有1 個節(jié)點在線,以及如果這個節(jié)點發(fā)送一些報文,則將不會有應(yīng)答,并檢測到錯誤和重復(fù)報文。由此,節(jié)點會變?yōu)椤板e誤被動”,而不是“總線關(guān)閉”。
來源:CSDN@「十六宿舍」
https://blog.csdn.net/geek_liyang/article/details/80018325
end

談思汽車媒體門戶

精品活動推薦


AutoSec系列沙龍

專業(yè)社群
部分入群專家來自:
新勢力車企:
特斯拉、理想、極氪、小米、零跑汽車、阿維塔汽車、智己汽車、小鵬、嵐圖汽車、蔚來汽車、吉祥汽車、賽力斯......
外資傳統(tǒng)主流車企代表:
大眾中國、大眾酷翼、奧迪汽車、寶馬、福特、戴姆勒-奔馳、通用、保時捷、沃爾沃、現(xiàn)代汽車、日產(chǎn)汽車、捷豹路虎、斯堪尼亞......
內(nèi)資傳統(tǒng)主流車企:
吉利汽車、上汽乘用車、長城汽車、上汽大眾、長安汽車、北京汽車、東風汽車、廣汽、比亞迪、一汽集團、一汽解放、東風商用、上汽商用......
全球領(lǐng)先一級供應(yīng)商:
博世、大陸集團、聯(lián)合汽車電子、安波福、采埃孚、科世達、舍弗勒、霍尼韋爾、大疆、日立、哈曼、華為、百度、聯(lián)想、聯(lián)發(fā)科、普瑞均勝、德賽西威、蜂巢轉(zhuǎn)向、均聯(lián)智行、武漢光庭、星紀魅族、中車集團、濰柴集團、地平線、紫光同芯、字節(jié)跳動、......
二級供應(yīng)商(500+以上):
中科數(shù)測、ETAS、BlackDuck、NXP、上海軟件中心、Deloitte、奇安信、為辰信安、云馳未來、信長城、澤鹿安全、紐創(chuàng)信安、復(fù)旦微電子、天融信、奇虎360、中汽中心、中國汽研、上海汽檢、加特蘭微電子、浙江大學......
人員占比

公司類型占比

文章
關(guān)于涉嫌仿冒AutoSec會議品牌的律師聲明
一文帶你了解智能汽車車載網(wǎng)絡(luò)通信安全架構(gòu)
網(wǎng)絡(luò)安全:TARA方法、工具與案例
汽車數(shù)據(jù)安全合規(guī)重點分析
淺析汽車芯片信息安全之安全啟動
域集中式架構(gòu)的汽車車載通信安全方案探究
系統(tǒng)安全架構(gòu)之車輛網(wǎng)絡(luò)安全架構(gòu)
車聯(lián)網(wǎng)中的隱私保護問題
智能網(wǎng)聯(lián)汽車網(wǎng)絡(luò)安全技術(shù)研究
AUTOSAR 信息安全框架和關(guān)鍵技術(shù)分析
AUTOSAR 信息安全機制有哪些?
信息安全的底層機制
汽車網(wǎng)絡(luò)安全
Autosar硬件安全模塊HSM的使用
首發(fā)!小米雷軍兩會上就汽車數(shù)據(jù)安全問題建言:關(guān)于構(gòu)建完善汽車數(shù)據(jù)安全管理體系的建議