一文讀懂CAN通訊錯(cuò)誤幀
產(chǎn)品鏈接:http://3shuai.cn/can/can/product/id/44.html
1.1.1錯(cuò)誤標(biāo)定
檢測(cè)到錯(cuò)誤條件的站通過(guò)發(fā)送錯(cuò)誤標(biāo)志指示錯(cuò)誤。對(duì)于“錯(cuò)誤主動(dòng)”的節(jié)點(diǎn),錯(cuò)誤信息為“主動(dòng)錯(cuò)誤標(biāo)志”,對(duì)于“錯(cuò)誤被動(dòng)”的節(jié)點(diǎn),錯(cuò)誤信息為“被動(dòng)錯(cuò)誤標(biāo)志”。站檢測(cè)到無(wú)論是位錯(cuò)誤、填充錯(cuò)誤、形式錯(cuò)誤,還是應(yīng)答錯(cuò)誤,這個(gè)站會(huì)在下一位時(shí)發(fā)出錯(cuò)誤標(biāo)志信息。
只要檢測(cè)到的錯(cuò)誤的條件是CRC錯(cuò)誤,錯(cuò)誤標(biāo)志的發(fā)送開(kāi)始于ACK界定符之后的位(其他的錯(cuò)誤條件除外)。
至于故障界定,單元的狀態(tài)可能為以下三種之一:
- ‘錯(cuò)誤主動(dòng)’
- ‘錯(cuò)誤被動(dòng)’
- ‘總線(xiàn)關(guān)閉’
“錯(cuò)誤主動(dòng)”的單元可以正常地參與總線(xiàn)通訊并在錯(cuò)誤被檢測(cè)到時(shí)發(fā)出主動(dòng)錯(cuò)誤標(biāo)志。
“錯(cuò)誤被動(dòng)”的單元不允許發(fā)送主動(dòng)錯(cuò)誤標(biāo)志?!板e(cuò)誤被動(dòng)”的單元參與總線(xiàn)通訊,在錯(cuò)誤被檢測(cè)到時(shí)只發(fā)出被動(dòng)錯(cuò)誤標(biāo)志。而且,發(fā)送以后,“錯(cuò)誤被動(dòng)”單元將在初始化下一個(gè)發(fā)送之前處于等待狀態(tài)。(見(jiàn)“掛起發(fā)送”)
“總線(xiàn)關(guān)閉”的單元不允許在總線(xiàn)上有任何的影響(比如,關(guān)閉輸出驅(qū)動(dòng)器)。
在每一總線(xiàn)單元里使用兩種計(jì)數(shù)以便故障界定:
發(fā)送錯(cuò)誤計(jì)數(shù)
接收錯(cuò)誤計(jì)數(shù)
這些計(jì)數(shù)按以下規(guī)則改變(注意,在給定的報(bào)文發(fā)送期間,可能要用到的規(guī)則不只一個(gè)):
當(dāng)接收器檢測(cè)到一個(gè)錯(cuò)誤,接收錯(cuò)誤計(jì)數(shù)就加1。在發(fā)送主動(dòng)錯(cuò)誤標(biāo)志或過(guò)載標(biāo)志期間所檢測(cè)到的錯(cuò)誤為位錯(cuò)誤時(shí),接收錯(cuò)誤計(jì)數(shù)器值不加1。
當(dāng)錯(cuò)誤標(biāo)志發(fā)送以后,接收器檢測(cè)到的第一個(gè)位為“顯性”時(shí),接收錯(cuò)誤計(jì)數(shù)值加8。
當(dāng)發(fā)送器發(fā)送一錯(cuò)誤標(biāo)志時(shí),發(fā)送錯(cuò)誤計(jì)數(shù)器值加8
發(fā)送主動(dòng)錯(cuò)誤標(biāo)志或過(guò)載標(biāo)志時(shí),如果發(fā)送器檢測(cè)到位錯(cuò)誤,則發(fā)送錯(cuò)誤計(jì)數(shù)器值加8。
當(dāng)發(fā)送主動(dòng)錯(cuò)誤標(biāo)志或過(guò)載標(biāo)志時(shí),如果接受器檢測(cè)到位錯(cuò)誤(位錯(cuò)誤),則接收錯(cuò)誤計(jì)數(shù)器值加8。
在發(fā)送主動(dòng)錯(cuò)誤標(biāo)志、被動(dòng)錯(cuò)誤標(biāo)志或過(guò)載標(biāo)志以后,任何節(jié)點(diǎn)最多容許7個(gè)連續(xù)的“顯性”位。以下的情況,每一發(fā)送器將它們的發(fā)送錯(cuò)誤計(jì)數(shù)值加8,及每一接收器的接收錯(cuò)誤計(jì)數(shù)值加8:
當(dāng)檢測(cè)到第14個(gè)連續(xù)的“顯性”位后;
在檢測(cè)到第8個(gè)跟隨著被動(dòng)錯(cuò)誤標(biāo)志的連續(xù)的“顯性”位以后;
在每一附加的8個(gè)連續(xù)“顯性”位順序之后。
報(bào)文成功傳送后(得到ACK及直到幀末尾結(jié)束沒(méi)有錯(cuò)誤),發(fā)送錯(cuò)誤計(jì)數(shù)器值減1,除非已經(jīng)是0。
如果接收錯(cuò)誤計(jì)數(shù)值介于1和127之間,在成功地接收到報(bào)文后(直到應(yīng)答間隙接收沒(méi)有錯(cuò)誤,及成功地發(fā)送了ACK位),接收錯(cuò)誤計(jì)數(shù)器值減1。如果接收錯(cuò)誤計(jì)數(shù)器值是0,則它保持0,如果大于127,則它會(huì)設(shè)置一個(gè)介于119到127之間值。
當(dāng)發(fā)送錯(cuò)誤計(jì)數(shù)器值等于或超過(guò)128時(shí),或當(dāng)接收錯(cuò)誤計(jì)數(shù)器值等于或超過(guò)128時(shí),節(jié)點(diǎn)為“錯(cuò)誤被動(dòng)”。讓節(jié)點(diǎn)成為“錯(cuò)誤被動(dòng)”的錯(cuò)誤條件致使節(jié)點(diǎn)發(fā)出主動(dòng)錯(cuò)誤標(biāo)志。
當(dāng)發(fā)送錯(cuò)誤計(jì)數(shù)器值大于或等于256時(shí),節(jié)點(diǎn)為“總線(xiàn)關(guān)閉”。
當(dāng)發(fā)送錯(cuò)誤計(jì)數(shù)器值和接收錯(cuò)誤計(jì)數(shù)器值都小于或等于127時(shí),“錯(cuò)誤被動(dòng)”的節(jié)點(diǎn)重新變?yōu)椤板e(cuò)誤主動(dòng)”。
在總線(xiàn)監(jiān)視到128次出現(xiàn)11個(gè)連續(xù)“隱性”位之后,“總線(xiàn)關(guān)閉”的節(jié)點(diǎn)可以變成“錯(cuò)誤主動(dòng)”(不再是“總線(xiàn)關(guān)閉”),它的錯(cuò)誤計(jì)數(shù)值也被設(shè)置為0。
備注:
一個(gè)大約大于96的錯(cuò)誤計(jì)數(shù)值顯示總線(xiàn)被嚴(yán)重干擾。最好能夠預(yù)先采取措施測(cè)試這個(gè)條件。
備注:
起動(dòng)/睡眠:如果起動(dòng)期間內(nèi)只有1個(gè)節(jié)點(diǎn)在線(xiàn),以及如果這個(gè)節(jié)點(diǎn)發(fā)送一些報(bào)文,則將不會(huì)有應(yīng)答,并檢測(cè)到錯(cuò)誤和重復(fù)報(bào)文。由此,節(jié)點(diǎn)會(huì)變?yōu)椤板e(cuò)誤被動(dòng)”,而不是“總線(xiàn)關(guān)閉”。