新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32之CAN---錯(cuò)誤管理分析

STM32之CAN---錯(cuò)誤管理分析

作者: 時(shí)間:2016-11-24 來(lái)源:網(wǎng)絡(luò) 收藏

1 幾個(gè)重要概念

根據(jù)ISO11898有如下幾個(gè)重要的與CAN相關(guān)的定義:

本文引用地址:http://butianyuan.cn/article/201611/320936.htm
  • Fault confinement(錯(cuò)誤界定)

CAN nodes shall be able to distinguish short disturbances from permanent failures. Defective transmitting nodes shall be switched off. Switched off means a node is logically disconnected from the bus, so that it can neither send nor receive any frames.

CAN節(jié)點(diǎn)可以區(qū)分常規(guī)錯(cuò)誤和永久故障。有故障的發(fā)送節(jié)點(diǎn)將切換到離線狀態(tài)。離線意味著在邏輯上與總線斷開(kāi),既不能發(fā)送也不能接收。

  • Error-active(主動(dòng)錯(cuò)誤)

An error-active node shall normally take part in bus communication and send an active error flag when an error has been detected. The active error flag shall consist of six (6) consecutive dominant bits and shall violate the rule of bit stuffing and all fixed formats appearing in a regular frame .

處于主動(dòng)錯(cuò)誤狀態(tài)的節(jié)點(diǎn)能正常參與總線通信的收發(fā)和當(dāng)檢測(cè)到錯(cuò)誤時(shí)將發(fā)送錯(cuò)誤標(biāo)志,錯(cuò)誤標(biāo)志由6個(gè)連續(xù)的顯示位組成(這種連續(xù)的6個(gè)顯示位與常規(guī)的填充位和其它幀固定格式不相同,正因?yàn)槿绱?,硬件才容易區(qū)別)。

  • Error-passive(被動(dòng)錯(cuò)誤)

An error-passive node shall not send an active error flag. It takes part in bus communication, but when an error has been detected a passive error flag shall be sent. The passive error flag shall consist of six (6) consecutive recessive bits. After transmission, an error-passive node shall wait some additional time before initiating a further transmission .

處于被動(dòng)錯(cuò)誤狀態(tài)的節(jié)點(diǎn)不能發(fā)送主動(dòng)錯(cuò)誤標(biāo)志。它能參與正常通信,但當(dāng)檢測(cè)到錯(cuò)誤時(shí)發(fā)送的是被動(dòng)錯(cuò)誤標(biāo)志。被動(dòng)錯(cuò)誤標(biāo)志由6個(gè)連續(xù)的隱性位組成。當(dāng)發(fā)送結(jié)束后,處于被動(dòng)錯(cuò)誤狀態(tài)的節(jié)點(diǎn)在下一次再次發(fā)送時(shí)之前需要等待一些額外時(shí)間。

  • Bus-off(離線)

A node shall be in the bus-off state when it is switched off from the bus due to a request of FCE. In the bus-off state, a node shall neither send nor receive any frames. A node shall start the recovery from bus-off state only upon a user request.

由于錯(cuò)誤界定規(guī)則,一個(gè)節(jié)點(diǎn)可能處于離線狀態(tài),當(dāng)處于此狀態(tài)時(shí),這個(gè)節(jié)點(diǎn)既不發(fā)送也不接收。至于何時(shí)離線恢復(fù)取決于何時(shí)用戶請(qǐng)求。

2 ISO11898中錯(cuò)誤界定的規(guī)則

2.1 描述

當(dāng)涉及到錯(cuò)誤界定,一個(gè)節(jié)點(diǎn)必須處于下述三個(gè)錯(cuò)誤狀態(tài)中的其中一個(gè),至于具體是哪種錯(cuò)誤狀態(tài)取決于節(jié)點(diǎn)的錯(cuò)誤計(jì)數(shù)值:

  • 主動(dòng)錯(cuò)誤狀態(tài)(Error-active)
  • 被動(dòng)錯(cuò)誤狀態(tài)(Error-passive)
  • 離線狀態(tài)(Bus-off)

2.2 錯(cuò)誤計(jì)數(shù)

錯(cuò)誤計(jì)數(shù)器當(dāng)檢測(cè)下下述事件時(shí)將修改錯(cuò)誤計(jì)數(shù)值:

  • 當(dāng)一接收節(jié)點(diǎn)檢測(cè)到一個(gè)錯(cuò)誤時(shí),錯(cuò)誤計(jì)數(shù)器將加1.有一種情況可以排外,即當(dāng)檢測(cè)到發(fā)送一主動(dòng)錯(cuò)誤標(biāo)志或者重載標(biāo)志時(shí)出現(xiàn)一位錯(cuò)誤時(shí)除外。
  • 當(dāng)一接收節(jié)點(diǎn)發(fā)送一錯(cuò)誤標(biāo)志時(shí),檢測(cè)到首位為顯性位時(shí),錯(cuò)誤計(jì)數(shù)器加8.
  • 當(dāng)一發(fā)送節(jié)后發(fā)送錯(cuò)誤標(biāo)志時(shí),錯(cuò)誤計(jì)數(shù)器加8,這時(shí)有兩種情況除外:1:當(dāng)這個(gè)發(fā)送節(jié)點(diǎn)處于主動(dòng)錯(cuò)誤狀態(tài)下,且檢測(cè)到由于ACK域未有顯性位而造成的ACK錯(cuò)誤,但是在發(fā)送時(shí)未檢測(cè)到被動(dòng)錯(cuò)誤標(biāo)志;2:當(dāng)發(fā)送節(jié)點(diǎn)發(fā)送一錯(cuò)誤標(biāo)志時(shí),在仲裁時(shí)檢測(cè)到填充位錯(cuò)誤(這些填充位原來(lái)應(yīng)該是隱性,但檢測(cè)結(jié)果為顯性)。以上兩種異常錯(cuò)誤計(jì)數(shù)值保留原值不變。
  • 當(dāng)發(fā)送節(jié)點(diǎn)發(fā)送一主動(dòng)錯(cuò)誤標(biāo)志或重載標(biāo)志時(shí),檢測(cè)到位錯(cuò)誤時(shí),錯(cuò)誤計(jì)數(shù)器加8.
  • 當(dāng)接收節(jié)點(diǎn)婁送一主動(dòng)錯(cuò)誤標(biāo)志或重載標(biāo)志時(shí),檢測(cè)到位錯(cuò)誤時(shí),錯(cuò)誤計(jì)數(shù)器加8.
  • 任何節(jié)點(diǎn)在發(fā)送主動(dòng)錯(cuò)誤標(biāo)志,被動(dòng)錯(cuò)誤標(biāo)志,或重載標(biāo)志時(shí)都應(yīng)都忍受連續(xù)7個(gè)顯示位。當(dāng)檢測(cè)到連接14個(gè)顯示位,或者被動(dòng)錯(cuò)誤標(biāo)志后緊跟著連接8個(gè)顯示位,或者8個(gè)連續(xù)顯性位后緊跟著被動(dòng)錯(cuò)誤標(biāo)志時(shí),所有發(fā)送節(jié)點(diǎn)發(fā)送錯(cuò)誤計(jì)數(shù)器加8,所有接收節(jié)點(diǎn)接收錯(cuò)誤計(jì)數(shù)器加8.
  • 發(fā)成功發(fā)送一幀報(bào)文后,發(fā)送計(jì)數(shù)器應(yīng)減1,除非當(dāng)前已經(jīng)為0.
  • 當(dāng)成功接收一幀報(bào)文后,如果當(dāng)前接收計(jì)數(shù)器的值大于1且小于127,則接收計(jì)數(shù)器減1;如果接收計(jì)數(shù)器的值為0,則保持為0;如果在于127,則接收計(jì)數(shù)器的值應(yīng)設(shè)置為119~127之間的值。

2.3 主動(dòng)錯(cuò)誤狀態(tài)和被動(dòng)錯(cuò)誤狀態(tài)之間的轉(zhuǎn)變

當(dāng)發(fā)送錯(cuò)誤計(jì)數(shù)器或者接收錯(cuò)誤計(jì)數(shù)器的值大于127時(shí),該節(jié)點(diǎn)變成被動(dòng)錯(cuò)誤狀態(tài)。

當(dāng)節(jié)點(diǎn)從主動(dòng)錯(cuò)誤狀態(tài)變?yōu)楸粍?dòng)錯(cuò)誤狀態(tài)時(shí),節(jié)點(diǎn)將發(fā)送一主動(dòng)錯(cuò)誤標(biāo)志。

當(dāng)被動(dòng)錯(cuò)誤節(jié)點(diǎn)的發(fā)送錯(cuò)誤計(jì)數(shù)器和接收錯(cuò)誤計(jì)數(shù)器的值都小于且等于127時(shí),將再次變?yōu)橹鲃?dòng)錯(cuò)誤狀態(tài)。

2.4 離線管理

如果一個(gè)節(jié)點(diǎn)的發(fā)送錯(cuò)誤計(jì)數(shù)器的值超過(guò)255時(shí),那么此節(jié)點(diǎn)將會(huì)處于離線狀態(tài)。處于離線狀態(tài)的節(jié)點(diǎn)不會(huì)對(duì)總線產(chǎn)生任何影響,它將不會(huì)發(fā)送消息幀,ACK,錯(cuò)誤幀,過(guò)載幀等,至于會(huì)不會(huì)接收總線上的數(shù)據(jù),取消于此節(jié)點(diǎn)的實(shí)現(xiàn)。

當(dāng)一個(gè)處于離線狀態(tài)下的節(jié)點(diǎn)接收到128次連接11位隱性位時(shí),將變成主動(dòng)錯(cuò)誤狀態(tài),且同時(shí)設(shè)置發(fā)送錯(cuò)誤計(jì)數(shù)器和接收錯(cuò)誤計(jì)數(shù)器為0.

注:具體實(shí)現(xiàn)可能并不會(huì)與上述所描述的一模一樣,比如離線還原,在STM32是有一開(kāi)關(guān)來(lái)設(shè)置是否會(huì)自動(dòng)還原,如果此功能禁止了,那么當(dāng)處于離線狀態(tài)下的節(jié)點(diǎn)接收到128次連接11連隱性位時(shí)也不會(huì)不還原成主動(dòng)錯(cuò)誤狀態(tài)。

圖1


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: STM32CAN錯(cuò)誤管

評(píng)論


技術(shù)專區(qū)

關(guān)閉