CAN是最成功的現(xiàn)場(chǎng)總線(xiàn),特別是在汽車(chē)工業(yè)的應(yīng)用方面。僅2006年一年,CAN有關(guān)的控制器出貨量超過(guò)5億個(gè)。在過(guò)去16年里,有許多關(guān)于CAN在安全攸關(guān)的系統(tǒng)中應(yīng)用時(shí)的安全問(wèn)題的研究。其中大部分是針對(duì)因CAN事件觸發(fā)通信的性質(zhì)引起的時(shí)間延遲問(wèn)題,以及數(shù)據(jù)幀幀結(jié)束域倒數(shù)第2位出錯(cuò)時(shí)造成的節(jié)點(diǎn)間消息不一致的問(wèn)題。有些研究著力于解決CAN系統(tǒng)中的Babb—ling Idiot問(wèn)題,尚未見(jiàn)到有關(guān)源于標(biāo)準(zhǔn)協(xié)議設(shè)計(jì)本身的嚴(yán)重問(wèn)題的相關(guān)文獻(xiàn)。 1 出錯(cuò)的情況 在CAN協(xié)議2.OA版3.1.3款中提到:為了使報(bào)錯(cuò)幀正確結(jié)束,消極報(bào)錯(cuò)節(jié)點(diǎn)可能需要處于空閑狀態(tài)至少3位的時(shí)間(如果消極報(bào)錯(cuò)接收節(jié)點(diǎn)發(fā)生本地錯(cuò)),因此總線(xiàn)不應(yīng)滿(mǎn)負(fù)荷運(yùn)行。這是引發(fā)應(yīng)用故障的原因。節(jié)點(diǎn)間并無(wú)時(shí)間同步,因而即便總線(xiàn)有空閑時(shí)間,也不能保證像上述要求那樣的分布。在總線(xiàn)的利用率較低時(shí),掛起待發(fā)的消息將在服務(wù)間隔(intermission,縮寫(xiě)為I.M.)后立即發(fā)送。這在標(biāo)準(zhǔn)中也有規(guī)定:在另一條消息發(fā)送過(guò)程中掛起待發(fā)的消息在服務(wù)間隔后的第一位啟動(dòng)(發(fā)送)。 現(xiàn)在考慮一種情況:由于電磁干擾,某消極報(bào)錯(cuò)節(jié)點(diǎn)發(fā)生一個(gè)本地錯(cuò)(其他節(jié)點(diǎn)未發(fā)現(xiàn)有錯(cuò)),它就發(fā)一個(gè)消極報(bào)錯(cuò)標(biāo)志(P.E.Flag)。因?yàn)槭请[位,其他節(jié)點(diǎn)對(duì)這個(gè)消極報(bào)錯(cuò)標(biāo)志也無(wú)響應(yīng)。這一消極報(bào)錯(cuò)幀的報(bào)錯(cuò)標(biāo)志在數(shù)據(jù)幀ACK分界符后的EOF部分得到確認(rèn)(如圖1所示),但是它的消極報(bào)錯(cuò)幀分界符 (P.E.Del)延續(xù)到EOF域最后一位以及服務(wù)間隔之后。如果此時(shí)有3位的總線(xiàn)空閑時(shí)間,那么新幀的開(kāi)始位(SOF)將是該消極報(bào)錯(cuò)節(jié)點(diǎn)服務(wù)間隔的第一位。按ISO16845標(biāo)準(zhǔn),此顯位被解讀為對(duì)超載幀的請(qǐng)求,由消極報(bào)錯(cuò)節(jié)點(diǎn)發(fā)送的超載幀將引起其他節(jié)點(diǎn)的位填充錯(cuò),使它們發(fā)送主動(dòng)報(bào)錯(cuò)幀。主動(dòng)報(bào)錯(cuò)幀與超載幀將在總線(xiàn)上疊合,雖然比特流的解釋對(duì)該消極報(bào)錯(cuò)節(jié)點(diǎn)和其他節(jié)點(diǎn)而言是不同的,但兩種幀分界符的結(jié)束時(shí)刻是一樣的。所有節(jié)點(diǎn)都會(huì)在此刻復(fù)位CAN協(xié)議狀態(tài)機(jī)的狀態(tài),使它回到開(kāi)始服務(wù)間隔的狀態(tài)。這解釋了。BoschCAN協(xié)議的說(shuō)明。但如果對(duì)3位總線(xiàn)空閑時(shí)間沒(méi)有保證,那又該如何呢? ![]() 對(duì)報(bào)錯(cuò)幀分界符格式錯(cuò)的檢查在國(guó)際標(biāo)準(zhǔn)化組織(ISO)的標(biāo)準(zhǔn)ISO16845中有明確的規(guī)定:在消極報(bào)錯(cuò)幀分界符中的任何顯位是一種格式錯(cuò)。第 7.5.6款和8.5.13款是對(duì)應(yīng)消極報(bào)錯(cuò)接收節(jié)點(diǎn)和消極報(bào)錯(cuò)發(fā)送節(jié)點(diǎn)消極報(bào)錯(cuò)幀分界符格式錯(cuò)的測(cè)試方法,第7.6.12款和8.6.9款是消極報(bào)錯(cuò)節(jié)點(diǎn)消極報(bào)錯(cuò)幀分界符查到格式錯(cuò)時(shí),接收錯(cuò)計(jì)數(shù)器與發(fā)送錯(cuò)計(jì)數(shù)器增加機(jī)制的檢查方法。因此,消極報(bào)錯(cuò)節(jié)點(diǎn)與其他節(jié)點(diǎn)不同步時(shí),另一個(gè)節(jié)點(diǎn)開(kāi)始發(fā)送新消息,其 SOF將被該消極報(bào)錯(cuò)節(jié)點(diǎn)視為消極報(bào)錯(cuò)幀分界符內(nèi)的格式錯(cuò)。它將在其他節(jié)點(diǎn)新幀傳送過(guò)程中開(kāi)始一個(gè)新的消極報(bào)錯(cuò)幀,新的消極報(bào)錯(cuò)標(biāo)志將在其他節(jié)點(diǎn)新幀的 EOF部分得到確認(rèn),新消極報(bào)錯(cuò)幀分界符再一次延續(xù)到超過(guò)其他節(jié)點(diǎn)服務(wù)間隔之后。只要掛起的消息未發(fā)完,這一過(guò)程將不斷重復(fù)。在此時(shí)間段里,消極報(bào)錯(cuò)節(jié)點(diǎn)不能接收或發(fā)送任何消息,因?yàn)樗傇诓粩喟l(fā)送消極報(bào)錯(cuò)幀。這延遲了該節(jié)點(diǎn)應(yīng)發(fā)送的消息,而不管消息的優(yōu)先級(jí)有多高,也就引起了優(yōu)先級(jí)逆轉(zhuǎn)。由于電磁干擾的隨機(jī)性,無(wú)法對(duì)系統(tǒng)進(jìn)行調(diào)度分析。這個(gè)消極報(bào)錯(cuò)節(jié)點(diǎn)有2種可能的方式退出循環(huán)。如果在后面不斷發(fā)送的新幀的某處出現(xiàn)了主動(dòng)報(bào)錯(cuò)幀,該消極報(bào)錯(cuò)節(jié)點(diǎn)的消極報(bào)錯(cuò)幀將與主動(dòng)報(bào)錯(cuò)幀重疊,重復(fù)過(guò)程結(jié)束。但在正常應(yīng)用場(chǎng)合中,錯(cuò)誤是很少發(fā)生的,因此后續(xù)的傳送越正常,該消極報(bào)錯(cuò)節(jié)點(diǎn)等效離線(xiàn)狀態(tài)時(shí)間越長(zhǎng)。另一個(gè)可能是經(jīng)過(guò)一些傳送后不再有掛起待發(fā)的幀,總線(xiàn)空閑時(shí)間足夠長(zhǎng),正如協(xié)議設(shè)想的那樣,能使消極報(bào)錯(cuò)幀的分界符正常結(jié)束,消極報(bào)錯(cuò)幀分界符格式錯(cuò)的重復(fù)也就此結(jié)束。 2 可能的情景 除了上述消極報(bào)錯(cuò)接收節(jié)點(diǎn)的本地故障會(huì)引起等效離線(xiàn)的失效以外,其他情景下消極報(bào)錯(cuò)節(jié)點(diǎn)也有可能與簇內(nèi)其他節(jié)點(diǎn)丟失狀態(tài)同步。這些情景在三方面超出了Bosch CAN協(xié)議設(shè)計(jì)時(shí)的設(shè)想:第一,不僅消極報(bào)錯(cuò)接收節(jié)點(diǎn)會(huì)丟失同步,而且消極報(bào)錯(cuò)發(fā)送節(jié)點(diǎn)也會(huì)丟失同步;第二,在有些場(chǎng)合,為了實(shí)現(xiàn)同步,所需的總線(xiàn)空閑時(shí)間要更多(至少為10位);第三,不僅消極報(bào)錯(cuò)節(jié)點(diǎn)的本地錯(cuò)會(huì)引起問(wèn)題,在少數(shù)場(chǎng)合,主動(dòng)報(bào)錯(cuò)節(jié)點(diǎn)的本地故障也會(huì)引起問(wèn)題。下面舉一些例子,實(shí)際上有問(wèn)題的情景遠(yuǎn)不止這些。 在圖2中,消極報(bào)錯(cuò)接收節(jié)點(diǎn)由于電磁干擾而未能查出總線(xiàn)上的一個(gè)全局錯(cuò)(即漏判性質(zhì)的本地錯(cuò)),但是過(guò)后它發(fā)現(xiàn)了因其他節(jié)點(diǎn)所發(fā)送主動(dòng)報(bào)錯(cuò)幀引起的位填充錯(cuò),它發(fā)送的消極報(bào)錯(cuò)幀將遲于其他節(jié)點(diǎn)的主動(dòng)報(bào)錯(cuò)幀結(jié)束,因此丟失了同步。 ![]() 在圖3中,消極報(bào)錯(cuò)接收節(jié)點(diǎn)在EOF域中發(fā)生誤判性質(zhì)的本地錯(cuò)。 ![]() 它的消極報(bào)錯(cuò)幀不會(huì)被其他節(jié)點(diǎn)看到,因而它們以正常方式結(jié)束收發(fā)。消極報(bào)錯(cuò)節(jié)點(diǎn)的消極報(bào)錯(cuò)幀要遠(yuǎn)遲于其他節(jié)點(diǎn)的結(jié)束時(shí)刻結(jié)束,在此情況下,為使消極報(bào)錯(cuò)節(jié)點(diǎn)能同步,最少要有10位的總線(xiàn)空閑時(shí)間。當(dāng)總線(xiàn)有10位空閑時(shí)間時(shí),新幀的SOF會(huì)被消極報(bào)錯(cuò)節(jié)點(diǎn)看作超載幀的請(qǐng)求,盡管在超載幀結(jié)束后節(jié)點(diǎn)間實(shí)現(xiàn)了狀態(tài)同步,但卻因超載幀造成不必要的開(kāi)銷(xiāo)。這里理想的總線(xiàn)空閑時(shí)間為13位。 在圖4中,由于電磁干擾消極報(bào)錯(cuò)發(fā)送節(jié)點(diǎn)未能正確讀取ACK位,它發(fā)出的消極報(bào)錯(cuò)幀將被其他節(jié)點(diǎn)看作ACK分界符和EOF域,就像消極報(bào)錯(cuò)接收節(jié)點(diǎn)一樣,它失去了與其他節(jié)點(diǎn)的狀態(tài)同步。 ![]() 在圖5中,消極報(bào)錯(cuò)發(fā)送節(jié)點(diǎn)的本地錯(cuò)發(fā)生在CRC分界符處,它的消極報(bào)錯(cuò)標(biāo)志的第一位被其他節(jié)點(diǎn)的ACK位改寫(xiě),消極報(bào)錯(cuò)幀的剩余部分被其他節(jié)點(diǎn)看作 ACK分界符和EOF域,狀態(tài)不同步再次發(fā)生。 ![]() 在圖6中,消極報(bào)錯(cuò)發(fā)送節(jié)點(diǎn)的本地故障造成ACK分界符的誤讀,它開(kāi)始一個(gè)消極報(bào)錯(cuò)幀,而其他節(jié)點(diǎn)把它誤讀為數(shù)據(jù)幀的EOF域,此時(shí)消極報(bào)錯(cuò)發(fā)送節(jié)點(diǎn)狀態(tài)與其他節(jié)點(diǎn)不同步。 ![]() 當(dāng)一個(gè)規(guī)模較小的系統(tǒng)僅剩一個(gè)主動(dòng)報(bào)錯(cuò)節(jié)點(diǎn)時(shí),它的本地錯(cuò)將引起一個(gè)主動(dòng)報(bào)錯(cuò)幀。其主動(dòng)報(bào)錯(cuò)標(biāo)志會(huì)被其他消極報(bào)錯(cuò)節(jié)點(diǎn)視為位填充錯(cuò)或格式錯(cuò),從而開(kāi)始它們的消極報(bào)錯(cuò)幀(見(jiàn)圖7)。結(jié)果是主動(dòng)報(bào)錯(cuò)幀較早結(jié)束,狀態(tài)的不同步再次出現(xiàn)。 ![]() 3 后果 當(dāng)消極報(bào)錯(cuò)節(jié)點(diǎn)出現(xiàn)上述分析的情景時(shí),就沒(méi)有機(jī)會(huì)收發(fā)消息。直到總線(xiàn)空閑或者有一個(gè)主動(dòng)報(bào)錯(cuò)節(jié)點(diǎn)發(fā)主動(dòng)報(bào)錯(cuò)幀時(shí),才可能恢復(fù)正常。由于錯(cuò)誤的發(fā)生是隨機(jī)事件,在正常應(yīng)用環(huán)境中其間隔會(huì)相當(dāng)長(zhǎng)。消極報(bào)錯(cuò)節(jié)點(diǎn)逸出這種等效離線(xiàn)狀態(tài)的最壞情況是,它要等到總線(xiàn)成為空閑。此段時(shí)間為系統(tǒng)中所有消息的最壞響應(yīng)時(shí)間中最大的那個(gè)。以Tindell改造過(guò)的SAE典型試驗(yàn)數(shù)據(jù)集為例,最大最壞響應(yīng)時(shí)間在總線(xiàn)速率為125 kbps時(shí)為49.192ms,250kbps時(shí)為14.404ms。總線(xiàn)的利用率相應(yīng)為94.2%和47.1%。如果故障發(fā)生在收發(fā)制動(dòng)壓力的消息(其周期為5 ms)的節(jié)點(diǎn),則汽車(chē)可能在125 kbps時(shí)丟失10次數(shù)據(jù),250 kbps時(shí)丟失3次數(shù)據(jù)。在此期間作用在輪子上的制動(dòng)力不是所期望的,汽車(chē)將有難以預(yù)計(jì)的風(fēng)險(xiǎn)。以每小時(shí)100 km行駛的汽車(chē)將在1.4 m或O.4 m的距離上失去控制。 消極報(bào)錯(cuò)節(jié)點(diǎn)狀態(tài)同步的丟失可能比上述最壞情況早些結(jié)束,但這完全取決于錯(cuò)誤的統(tǒng)計(jì)學(xué)特性,超出了CAN調(diào)度分析的假設(shè),使CAN設(shè)計(jì)工具不精確。當(dāng)消極報(bào)錯(cuò)節(jié)點(diǎn)丟失同步后,即使有一些未確知的總線(xiàn)空閑時(shí)間,它們可能引入超載幀,這也是調(diào)度分析時(shí)未加考慮的。因此設(shè)計(jì)工具難以給出有足夠精度的真實(shí)結(jié)果。這會(huì)危害到所設(shè)計(jì)系統(tǒng)的安全性。另外,超載幀也降低了總線(xiàn)的吞吐率。 4 解決方案 經(jīng)仔細(xì)分析所有可能的全局錯(cuò)和本地錯(cuò)以后,各種情景和合適的消極報(bào)錯(cuò)幀分界符長(zhǎng)度間的關(guān)系就建立起來(lái)了。所謂“合適”是指消極報(bào)錯(cuò)節(jié)點(diǎn)能在出錯(cuò)后依然與其他節(jié)點(diǎn)的狀態(tài)保持同步。在有些場(chǎng)合中消極報(bào)錯(cuò)幀分界符應(yīng)為原來(lái)的8位長(zhǎng),在有些場(chǎng)合中它應(yīng)是2位長(zhǎng),在另外一些場(chǎng)合中它應(yīng)是1位長(zhǎng)。若本地錯(cuò)發(fā)生在數(shù)據(jù)幀或遠(yuǎn)程幀的EOF域,那么為了實(shí)現(xiàn)正確的同步,最好的選擇是在EOF的最后一位處對(duì)CAN協(xié)議狀態(tài)自動(dòng)機(jī)進(jìn)行復(fù)位。需要根據(jù)總線(xiàn)上的數(shù)據(jù)流以及錯(cuò)誤發(fā)生的位置加以判斷,該消極報(bào)錯(cuò)節(jié)點(diǎn)是發(fā)生了全局錯(cuò)還是本地錯(cuò),從而確定應(yīng)有的消極報(bào)錯(cuò)幀分界符長(zhǎng)度,或者啟動(dòng)協(xié)議狀態(tài)機(jī)的復(fù)位信號(hào),完整的解決方案已申請(qǐng)了專(zhuān)利。 將消極報(bào)錯(cuò)幀分界符長(zhǎng)度簡(jiǎn)單地改為另一個(gè)固定的長(zhǎng)度,可能簡(jiǎn)化實(shí)現(xiàn)的復(fù)雜性,在某些場(chǎng)合它可以避免在消極報(bào)錯(cuò)節(jié)點(diǎn)有本地錯(cuò)時(shí)產(chǎn)生長(zhǎng)時(shí)間的等效離線(xiàn)狀態(tài)的失效,但是這一解決方案無(wú)法應(yīng)對(duì)所有可能丟失同步的情景。同時(shí)它還殘留有其他的一些缺點(diǎn):例如增加了消極報(bào)錯(cuò)節(jié)點(diǎn)不能接收的機(jī)會(huì);因重復(fù)出錯(cuò)或超載幀造成調(diào)度結(jié)果確定性的下降;本節(jié)點(diǎn)或其他節(jié)點(diǎn)所發(fā)消息優(yōu)先級(jí)的逆轉(zhuǎn);因超載幀造成帶寬的無(wú)效占用。所以這種簡(jiǎn)化造成的性能下降是得不償失的。 按修改后實(shí)現(xiàn)的消極報(bào)錯(cuò)幀不能通過(guò)現(xiàn)有標(biāo)準(zhǔn)ISO16845第7.5.6款和8.5.13款的全部測(cè)試設(shè)置,因?yàn)橄麡O報(bào)錯(cuò)幀分界符的長(zhǎng)度不再是固定的8 位。CAN標(biāo)準(zhǔn)ISO11898及ISO16845應(yīng)依據(jù)應(yīng)用中對(duì)安全的要求作相應(yīng)的修改。 5 小結(jié) 在消極報(bào)錯(cuò)幀分界符內(nèi)格式錯(cuò)的后果長(zhǎng)期以來(lái)被忽視了。即使在一般應(yīng)用中等效離線(xiàn)狀態(tài)和優(yōu)先級(jí)逆轉(zhuǎn)也是不能容忍的,因?yàn)橐淮坞姶鸥蓴_造成的1位錯(cuò)所要承受的懲罰太大了。為了將CAN用于更為嚴(yán)格的安全攸關(guān)的應(yīng)用中,這個(gè)問(wèn)題是非解決不可的。 參考文獻(xiàn) 1. CAN in Automation celebrates first 15 years 2007 2. GmbH Robert Bosch CAN Specification Version 2.0 1991 3. ISO/TC 22/SC3 ISO16845-2004.Road VehiclesController Area Network (CAN)Conformance Test Plan 4. Tindell K W.Burns A Guaranteed Message Latencies for Distributed Safety-Critical Hard Real-Time Control Networks.[Technical Report YCS229] 1994 作者:重慶工業(yè)自動(dòng)化儀表研究所 楊福宇 來(lái)源:單片機(jī)與嵌入式系統(tǒng)應(yīng)用 2009 (1) |