9.2.4 錯誤類型和界定
1. 錯誤類型
有以下5種不同的錯誤類型(這5種錯誤不會相互排斥)
(1)位錯誤(Bit Error)
節(jié)點在發(fā)送位的同時也對總線進行監(jiān)視。如果所發(fā)送的位值與所監(jiān)視的位值不相符合,則在此位時間里檢測到一個位錯誤。但是在仲裁場(Arbitration Field)的填充位流期間或應答間隙(ACK Slot)發(fā)送一“隱性”位的情況是例外的——此時,當監(jiān)視到一“顯性”位時,不會發(fā)出位錯誤。當發(fā)送器發(fā)送一個“認可錯誤”標志但檢測到“顯性”位時,也不視為位錯誤。
(2)填充錯誤(Stuff Error)
如果在使用位填充法進行編碼的報文中,出現(xiàn)了6個連續(xù)相同的位電平時,將檢測到一個填充錯誤。
(3)CRC錯誤(CRC Error)
CRC序列包括發(fā)送器的CRC計算結(jié)果。接收器計算CRC的方法與發(fā)送器相同。如果計算結(jié)果與接收到CRC序列的結(jié)果不相符,則檢測到一個CRC錯誤。
(4)格式錯誤(Form Error)
當一個固定形式的位場含有1個或多個非法位,則檢測到一個格式錯誤。(注意:接收器的幀末尾最后一位期間的顯性位不被當作幀錯誤)
(5)應答錯誤(Acknowledgment Error)
只要在應答間隙期間所監(jiān)視的位不為“顯性”,則發(fā)送器會檢測到一個應答錯誤。
2. 錯誤信號的發(fā)出
檢測到錯誤條件的節(jié)點通過發(fā)送錯誤標志指示錯誤。對于“錯誤激活”的節(jié)點,錯誤信息為“激活錯誤”標志”;對于“錯誤認可”的節(jié)點,錯誤信息為“認可錯誤”標志。節(jié)點檢測到無論是位錯誤、填充錯誤、形式錯誤,還是應答錯誤,這個節(jié)點會在下一位時發(fā)出錯誤標志信息。
如果檢測到的錯誤的條件是CRC錯誤,錯誤標志的發(fā)送開始于ACK界定符之后的位(除非其他錯誤條件引起的錯誤標志已經(jīng)開始)。
3. 故障界定
(1)CAN的3種故障狀態(tài)
① 錯誤激活(Error Active)
“錯誤激活”的節(jié)點可以正常地參與總線通信,并在錯誤被檢測到時發(fā)出“激活錯誤”標志。
② 錯誤認可 (Error Passive)
“錯誤認可”節(jié)點不允許發(fā)送“激活錯誤”標志。當“錯誤認可”節(jié)點參與總線通信時,在錯誤被檢測到時只發(fā)出“認可錯誤”標志。而且,發(fā)送之后,“錯誤認可”節(jié)點將在啟動下一個發(fā)送之前處于等待狀態(tài)。
③ 總線關(guān)閉(Bus Off)
“總線關(guān)閉”的節(jié)點不允許對總線產(chǎn)生任何的影響(如:關(guān)閉輸出驅(qū)動器)。
(2)CAN的2種故障計數(shù)器
在每一總線節(jié)點使用兩種計數(shù)器以便故障界定,包括:
① 發(fā)送錯誤計數(shù);
② 接收錯誤計數(shù)。
(3)CAN的故障計數(shù)規(guī)則
這些故障計數(shù)器按以下規(guī)則改變(注意:在給定的報文發(fā)送期間,可能要用到的規(guī)則不止一個):
① 當接收器檢測到一個錯誤,接收錯誤計數(shù)器值就加1。在發(fā)送“認可錯誤”標志或過載標志期間,所檢測到的錯誤為位錯誤時,接收錯誤計數(shù)器值不加1。
② 當錯誤標志發(fā)送以后,接收器檢測到的第一個位為“顯性”時,接收錯誤計數(shù)器值加8。
③ 當發(fā)送器發(fā)送一錯誤標志時,發(fā)送錯誤計數(shù)器值加8。在以下例外情況1和例外情況2發(fā)生時,發(fā)送錯誤計數(shù)器值不改變。
例外情況1:發(fā)送器為“錯誤認可”,并檢測到應答錯誤(在應答錯誤中檢測不到顯性位),而且在發(fā)送“認可錯誤”標志時也檢測不到“顯性”位。
例外情況2:發(fā)送器由于在仲裁期間發(fā)生填充錯誤,此填充位應該為隱性位,但卻檢測出顯性位,發(fā)送器送出錯誤標志。
④ 發(fā)送“激活錯誤”標志或過載標志時,如發(fā)送器檢測到位錯誤,則發(fā)送錯誤計數(shù)器值加8。
⑤ 發(fā)送“激活錯誤”標志或過載標志時,如果接收器檢測到位錯誤,則接收錯誤計數(shù)器值加8。
⑥ 在發(fā)送“激活錯誤”標志、“認可錯誤”標志或過載標志以后,任何節(jié)點最多允許7個連續(xù)的“顯性”位。在以下3種情況,每一發(fā)送器將它們的發(fā)送錯誤計數(shù)值加8,同時每一接收器的接收錯誤計數(shù)值加8:
l 當檢測到第14個連續(xù)的“顯性”位后;
l 在檢測到第8個連續(xù)的“顯性”位跟隨在“認可錯誤”標志后;
l 在每一個附加的8個連續(xù)“顯性”位序列后。
⑦ 報文成功傳送后(得到ACK及直到幀末尾結(jié)束沒有錯誤),發(fā)送錯誤計數(shù)器值減1,除非已經(jīng)是0。
⑧ 報文成功接收后(直到應答間隙接收沒有錯誤,并成功地發(fā)送了ACK位),如果接收錯誤計數(shù)值介于1和127之間,接收錯誤計數(shù)器值減1。如果接收錯誤計數(shù)器值是0,則它保持0;如果大于127,則它會設(shè)置一個介于119到127之間的值。
⑨ 當發(fā)送錯誤計數(shù)器值等于或超過128時,或當接收錯誤計數(shù)器值等于或超過128時,節(jié)點為“錯誤認可”。
⑩ 當發(fā)送錯誤計數(shù)器值大于或等于256時,節(jié)點為“總線關(guān)閉”。
當發(fā)送錯誤計數(shù)器值和接收錯誤計數(shù)器值都小于或等于127時,“錯誤認可”節(jié)點重新變?yōu)椤板e誤激活”節(jié)點。
在總線監(jiān)視到128次出現(xiàn)11個連續(xù)“隱性”位之后,“總線關(guān)閉”的節(jié)點可以變成“錯誤激活”節(jié)點,它的兩個錯誤計數(shù)值也被置為0