圖2 CAN狀態(tài)轉換圖
在每一總線單元里使用兩種計數(shù)以便故障界定: 發(fā)送錯誤計數(shù)、 接收錯誤計數(shù)。
這些計數(shù)按以下規(guī)則改變(注意,在給定的報文發(fā)送期間,可能要用到的規(guī)則不只一個):
1、當接收器檢測到一個錯誤,接收錯誤計數(shù)就加1。在發(fā)送主動錯誤標志或過載標志期間所檢測到的錯誤為位錯誤時,接收錯誤計數(shù)器值不加1。
2、當錯誤標志發(fā)送以后,接收器檢測到的第一個位為“顯性”時,接收錯誤計數(shù)值加8。
3、當發(fā)送器發(fā)送一錯誤標志時,發(fā)送錯誤計數(shù)器值加8。
例外情況1:發(fā)送器為“錯誤被動”,并檢測到一應答錯誤(注:此應答錯誤由檢測不到一“顯性”ACK 以及當發(fā)送被動錯誤標志時檢測不到一“顯性”位而引起)。
例外情況2:發(fā)送器因為填充錯誤而發(fā)送錯誤標志(注:此填充錯誤發(fā)生于仲裁期間。引起填充錯誤是由于:填充位〈填充位〉位于RTR位之前,并已作為“隱性”發(fā)送,但是卻被監(jiān)視為“顯性”)。
例外情況1和例外情況2時,發(fā)送錯誤計數(shù)器值不改變。
4、發(fā)送主動錯誤標志或過載標志時,如果發(fā)送器檢測到位錯誤,則發(fā)送錯誤計數(shù)器值加8。
5、當發(fā)送主動錯誤標志或過載標志時,如果接受器檢測到位錯誤(位錯誤),則接收錯誤計數(shù)器值加8。
6、在發(fā)送主動錯誤標志、被動錯誤標志或過載標志以后,任何節(jié)點最多容許7個連續(xù)的 “顯性”位。以下的情況,每一發(fā)送器將它們的發(fā)送錯誤計數(shù)值加8,及每一接收器的接收錯誤計數(shù)值加8:
當檢測到第14個連續(xù)的“顯性”位后;
在檢測到第8個跟隨著被動錯誤標志的連續(xù)的“顯性”位以后;
在每一附加的8個連續(xù)“顯性”位順序之后。
7、報文成功傳送后(得到ACK及直到幀末尾結束沒有錯誤),發(fā)送錯誤計數(shù)器值減1,除非已經(jīng)是0。
8、如果接收錯誤計數(shù)值介于1和127之間,在成功地接收到報文后(直到應答間隙接收沒有錯誤,及成功地發(fā)送了ACK位),接收錯誤計數(shù)器值減1。如果接收錯誤計數(shù)器值是0,則它保持0,如果大于127,則它會設置一個介于119到127之間值。
9、當發(fā)送錯誤計數(shù)器值等于或超過128時,或當接收錯誤計數(shù)器值等于或超過128時,節(jié)點為“錯誤被動”。讓節(jié)點成為“錯誤被動”的錯誤條件致使節(jié)點發(fā)出主動錯誤標志。
10、當發(fā)送錯誤計數(shù)器值大于或等于256時,節(jié)點為“總線關閉”。
11、當發(fā)送錯誤計數(shù)器值和接收錯誤計數(shù)器值都小于或等于127時,“錯誤被動”的節(jié)點重新變?yōu)椤板e誤主動”。
12、在總線監(jiān)視到128次出現(xiàn)11個連續(xù)“隱性”位之后,“總線關閉”的節(jié)點可以變成“錯誤主動”(不再是“總線關閉”),它的錯誤計數(shù)值也被設置為0。