久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 手機與無線通信 > 設計應用 > CAN消極報錯發送節點變為離線狀態的故障

CAN消極報錯發送節點變為離線狀態的故障

作者: 時間:2009-06-30 來源:網絡 收藏

摘要 處于報錯在一次本地錯之后,由于標準考慮不周,會產生該與其他在幀啟停上的不同步,造成錯誤的不斷延續,在接收節點中產生等同離線。本文討論了在節點中產生真正離線的原因,并提出了解決方案。
關鍵詞 報錯幀分界符 優先級逆轉 離線

本文引用地址:http://cqxgywz.com/article/158024.htm


是應用非常廣泛的現場總線。它已經被大部分汽車廠商用作車內控制器交換信息的通信干線,是分布式嵌入式系統的關鍵部分。但是它有一種以前未討論過的與安全有關的,當某一處于報錯的節點由于干擾而產生一個本地錯后,因標準考慮欠周,該節點會與其他節點幀啟停失去同步,在其他掛起待發的消息時不斷出錯,形成等同于離線的狀態,無法提供服務,從而危及安全。本文討論處于報錯狀態的節點,由于同樣的原因失去同步后的演變過程。這里不同的是,因為標準中的另一個規定,它可能經歷一個真正的離線狀態。


1 CAN標準的安全漏洞
在討論該問題時假定讀者對CAN的標準已有充分的了解,由于中文譯法的差別,本文采用的術語可能有所不同,相信不會影響讀者的理解。在Bosch CAN2.O規范3.1.3款中說:“為了使報錯幀正確結束,消極報錯節點可能需要處于空閑狀態至少有3bit時間(如果消極報錯接收節點發生本地錯),因此總線不應滿負荷運行。”――這是引起應用出的原因。因為節點問并無時間同步,即便總線有空閑時間,也不能保證像上述要求那樣的分布。掛起待發的消息將在服務間隔(intermission,圖中縮寫為I.M.)后立即發送。這在規范中也有規定:“在另一條消息發送過程中掛起待發的消息在服務間隔后的第一位啟動(發送)”。ISO11898標準沒有提到3位空閑問題,但是CAN一致性測試標準ISO16845的具體條文會有這種要求(雖然該空閑要求還是不充分的)。CAN規定處于消極報錯狀態的節點在發現錯之后發出6位隱位的消極報錯標志(Passive error flag),如讀回6個連續的相同位時,就確認報錯標志發完,如沒發現6個連續的相同位,就繼續發隱位,直到得到確認,然后開始消極報錯幀分界符的發送。分界符從發出隱位讀回也是隱位時開始計算,總共為8個連續的隱位。在CAN一致性測試標準ISO16845的7.5.6款與8.5.13款中,規定了接收節點與發送節點在發消極報錯幀分界符時的格式錯檢查辦法。它規定,在消極報錯幀分界符開始后的8位中不得有顯位;如有顯位,就視為出錯,開始新的報錯幀。
如果一個處于消極報錯狀態的節點發現一個本地錯(即有一種誤判或漏判),由于其他節點不發主動報錯幀,那么它發的消極報錯幀標志就不會及時得到確認,往往要到圖1所示的數據幀或遠程幀的EOF第5位才會得到確認;而它的消極報錯幀分界符將延續到幀的服務間隔之后,它就和其他節點的幀啟停失去了同步。其他節點開始新幀的SOF將被它視為格式錯,而開始發新的消極報錯幀。當其他節點有掛起待發的幀不斷發送時,這個處于消極報錯狀態的節點一直處于不斷出錯的狀態,不能發送也不能接收,即等同于離線狀態。
這種源自標準考慮不周的會使CAN的優先級逆轉(在處于消極報錯狀態的節點中的高優先級消息無法發送);同時,基于優先級進行的調度分析失靈。以此為算法設計得到的消息最壞送達時間將是不可靠的,車的安全會受影響。在參考文獻[1]中,討論了修改消極報錯幀分界符長度來解決該故障的方法。


2 處于消極報錯狀態發送節點本地錯的后果
處于消極報錯狀態的發送節點在有本地錯時,其行為傾向更差。標準ISO16845的8.6.9款對發送節點在消極報錯幀分界符內的格式錯規定了發送錯計數器TEC+8,第7.6.12款對處于消極報錯狀態的接收節點在消極報錯幀分界符內的格式錯規定了接收錯計數器REC+1。而且標準規定REC是有上限的,它不會導致節點成為離線狀態;但TEC會一直加上去,當TEC=256時節點就成為離線狀態,直到在總線上讀到128個連續的11個隱位,然后它主動報錯狀態。因此弄清楚節點是接收還是發送的地位非常重要。
Bosch CAN 2.O規范3.2款對節點的定義是這樣的:“開始一個消息的單元被稱為該消息的發送節點。在總線空閑之前,或該單元在仲裁中失敗之前,該單元一直是發送節點。”“一個節點被稱為一條消息的接收節點的條件是:它不是該消息的發送節點且總線不空閑”。國際標準ISO11898-1:2003第4.18款有類似的定義:“發送節點是指開始一個數據幀或遠程幀的節點,在總線再次空閑之前或在仲裁失敗之前,它仍是發送節點”。第4.16款:“不是發送節點且總線不空閑時節點是接收節點”。標準考慮了如下幾種情況:
①一個節點開始發送ID,仲裁失敗,在此段時間里它是發送節點,而后它是接收節點。
②一個節點開始發送ID,仲裁勝出,發送完數據幀或遠程幀,在整個發送時段及其后的服務間隔內,它是發送節點。
③一個節點開始發送ID,其中發生錯誤,或者在仲裁勝出后繼續發送中出錯,那么從開始到報錯幀結束及其后的服務間隔內,它是發送節點。因為總線空閑最早在服務間隔之后。
④一個節點開始發送ID,仲裁勝出,發完數據幀或遠程幀,但由于某種原因(EOF的最后一位為顯位,或其后的服務間隔內第一、二位為顯位),接了一個超載幀。那么在整個上述時段及其后的服務間隔內,它是發送節點。
CAN協議沒有考慮重復出錯的情況:第一次是處于消極報錯狀態的節點發現一個本地錯,其后是因為消極報錯幀結束時與其他節點幀啟停失去同步而造成新錯。在圖2中,處于消極報錯狀態的發送節點在ACK位發現一個本地錯,它發的消極報錯幀被其他節點視為EOF和服務間隔。其他節點發的新幀SOF被它視為格式錯。該處于消極報錯狀態的發送節點無法見到它預期的服務間隔的結束,它就以發送節點的地位一直錯下去。圖3中,處于消極報錯狀態的發送節點在EOF部分發現一個本地錯,其后續演化與圖2相似。


上一頁 1 2 下一頁

評論


相關推薦

技術專區

關閉