關(guān)于車用迢信協(xié)議中的假冒錯
3 CAN對抗假冒錯的措施
CAN協(xié)議的CRC檢驗是在加入與去掉填充位后進(jìn)行的,因此其報錯能力受填充位的影響很大,要靠CRC來對抗發(fā)生在傳送中誤碼形成的假冒錯是不夠的。因為傳送中的比特錯在接收節(jié)點可能引起后面比特流的錯誤解釋,從而把填充位誤作數(shù)據(jù)而未剔除,或?qū)?shù)據(jù)位解讀為填充位誤剔除,如圖3所示。此時原來發(fā)送的比特流會向前或向后錯一位,從而形成大量的誤碼(最壞的情況下,錯位之后對CRC而言均為誤碼),很容易超出CRC的有效檢錯范圍,造成CRC的漏檢(將錯幀誤判為有效幀),由于填充過程的影響,單個比特錯的后果被放大了。所幸的是CAN還有其他的判錯手段,例如格式錯,那些漏過CRC校驗的幀還可能被攔下。通過仿真,由CRC與各種判錯手段綜合的結(jié)果其漏判率還是比較小的,約為O.1×10-6,但是,并不是CAN協(xié)議所聲稱的可以攔截5個以下的單個比特錯(HD=6)。
CAN協(xié)議的2.0B版采用32位的仲裁區(qū),它可以自動區(qū)分采用11位ID的消息(標(biāo)準(zhǔn)格式)或29位ID的消息(擴(kuò)展格式)。如果在cc發(fā)送之前或發(fā)送中ID及另三位內(nèi)容有變化,就有假冒發(fā)生的可能性。
CAN總線可以用ID的重新分配實現(xiàn)對假冒錯的預(yù)防,這種重新分配的可能性在于29位的ID空間非常大,即使用去一部分對抗假冒錯,剩余的部分依然足夠消息的分配。對29位ID中取一部分作數(shù)字簽名,這個數(shù)字簽名為離線時用CRC生成的校驗和。因此,仲裁域內(nèi)發(fā)生等于該CRC生成多項式的Hamming距離個比特同時錯才會有一個假冒錯。小于Hamming距離的比特錯將是無效ID,該消息將被接收節(jié)點的過濾器濾掉,從而使假冒錯無法產(chǎn)生影響。雖然在這里并沒有進(jìn)行接收ID的校驗計算,因ID分配已經(jīng)考慮了有效ID之間的距離,所以固定的接收濾波器足以防止假冒錯。這樣,無需增加軟硬件的開銷,CAN便可以實現(xiàn)與FlexRay同樣的抗假冒錯功能。數(shù)字簽名的生成方法,可以在現(xiàn)有的資料中選用,或者重新設(shè)計。例如參考文獻(xiàn),若取16階的生成多項式,29位ID中去掉16位作數(shù)字簽名后還剩13位,應(yīng)能滿足應(yīng)用之需,須知FlexRay僅定義了ll位的ID。也可以取更短的數(shù)字簽名,例如和FlexRay相同的11位CRC生成多項式(它的CRC校驗覆蓋區(qū)為31位,Hamming距離為6),以留出更多的可用消息種類。重新設(shè)計時可以參考BCH碼的設(shè)計方法設(shè)計生成多項式,以保證所需的Hamming距離。選用16階的CRC生成多項式時,它可以保證15位頭部Hamming距離為8,在仲裁域ID的前13位內(nèi)因CAN填充規(guī)則造成1位錯被放大為多位錯的情況,被檢出的概率就增大。該多項式為:
選用16位CRC校驗和時留給消息種類的大小為213=8 192種。采用上述方案,CAN在對抗假冒錯上要比FlexRay的方法簡單。
CAN仲裁域里的SRR、IDE和RTR位的誤碼可能引起通信控制器對輸入比特流的解釋變化,但是可以采取措施防止假冒錯。首先,如果仲裁域第12位、13位發(fā)生誤碼,就有可能在CAN2.0B的標(biāo)準(zhǔn)格式和擴(kuò)展格式間產(chǎn)生轉(zhuǎn)換(如擴(kuò)展格式誤為標(biāo)準(zhǔn)格式),那么節(jié)點對此時發(fā)生的假冒未加保護(hù),因此應(yīng)避免在系統(tǒng)里使用標(biāo)準(zhǔn)格式。標(biāo)準(zhǔn)格式誤為擴(kuò)展格式的情況,因幀長等被解釋為ID,被濾波器及CAN的其他檢錯措施攔下的可能性增大。其次,在RTR位的誤碼將數(shù)據(jù)幀誤為遠(yuǎn)程幀時接收節(jié)點收不到數(shù)據(jù),屬于故障一靜默(fault―silent),是一般容錯理論所要求的,遠(yuǎn)程幀請求誤為數(shù)據(jù)幀時,有可能引起不良后果,這是另一個問題,但同時存在的假冒錯將由濾波器攔截住。
添加ID的數(shù)字簽名并不改變原來的消息的優(yōu)先級分配,因為優(yōu)先級只在ID的前面部分確定好了。因此,采用不同數(shù)字簽名的消息可以在同一系統(tǒng)里應(yīng)用,只要收發(fā)節(jié)點的約定一致即可。但是,隨便混用會使ID之間的距離變小。所以對一個高層協(xié)議,為了保證抗假冒錯的能力不變,應(yīng)該采用統(tǒng)一的CRC生成多項式。從OEM廠的總體利益看,開放其協(xié)議的數(shù)字簽名方式較為有利。
4 小 結(jié)
假冒錯在應(yīng)用中是不能接受的,與一般數(shù)據(jù)錯造成消息數(shù)據(jù)量上的變化不同,它可能造成消息質(zhì)的變化。本文從信息傳遞的整個流程出發(fā),討論受干擾時的比特出錯量,從而作為分析抗假冒錯措施的依據(jù)。作為新一代的車用通信協(xié)議FlexRay,其頭部CRC校驗的覆蓋面似嫌不足,由于帶寬的增加誤碼率可能增大;尾部CRC檢驗也可能不夠,從而仍有漏過假冒錯的可能。本文討論的CAN的抗假冒錯方案實現(xiàn)比較簡單,可以提升CAN的可靠度。需要指出,CAN的抗假冒錯方案是基于出錯時被丟棄的原理,它并不報錯,發(fā)送節(jié)點無法知道已發(fā)送了錯幀,從而進(jìn)行重發(fā)。所以對那些重要的消息,在應(yīng)用上仍要設(shè)置其他的保障措施。例如,預(yù)定時限到而未收到數(shù)據(jù)則通知應(yīng)用層,或請求發(fā)送。由于CAN填充位規(guī)則對CRC的干擾,使CRC攔截誤碼的能力下降,這是不理想的地方。雖然由CAN各種檢錯機(jī)制造成的漏檢很小,但對一些重要的消息還應(yīng)添加額外的校驗。CAN的消息數(shù)據(jù)比較短,一般只有一二字節(jié)。添加1個8位的CRC校驗是一種可行的方法,在ECU增加的軟件開銷不會太大,但可進(jìn)一步提高CAN的可信度。
對于較小的或?qū)S玫南到y(tǒng),也可以用本文的方案把固定的事件信號加數(shù)字簽名一起傳送,以提高通信的可靠性。例如開關(guān)信號分別用2個ID來表示1或O,傳送時還有數(shù)據(jù)1或O,這樣用多重檢錯方法來防止CAN的CRC檢驗的軟肋。
評論