<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一文讀懂CAN控制器錯誤處理的原理

ZLG致遠電子 ? 2024-04-26 08:25 ? 次閱讀

CAN通訊的錯誤幀到底是如何被界定的?本文帶你輕松了解!

6b533a28-0363-11ef-9118-92fbcf53809c.jpg ?錯誤標定

檢測到錯誤條件的站通過發送錯誤標志指示錯誤。對于“錯誤主動”的節點,錯誤信息為“主動錯誤標志”,對于“錯誤被動”的節點,錯誤信息為“被動錯誤標志”。站檢測到無論是位錯誤、填充錯誤、形式錯誤,還是應答錯誤,這個站會在下一位時發出錯誤標志信息。

只要檢測到的錯誤的條件是CRC錯誤,錯誤標志的發送開始于ACK界定符之后的位(其他的錯誤條件除外)。如圖1所示:

6b657936-0363-11ef-9118-92fbcf53809c.jpg

圖1 CRC錯誤幀

6b778162-0363-11ef-9118-92fbcf53809c.jpg ?故障界定

至于故障界定,單元的狀態可能為以下三種之一:“錯誤主動”、“錯誤被動”、“總線關閉”。

1. “錯誤主動”的單元可以正常地參與總線通訊并在錯誤被檢測到時發出主動錯誤標志。
2. “錯誤被動”的單元不允許發送主動錯誤標志?!板e誤被動”的單元參與總線通訊,在錯誤被檢測到時只發出被動錯誤標志。而且,發送以后,“錯誤被動”單元將在初始化下一個發送之前處于等待狀態(見“掛起發送”)。
3. “總線關閉”的單元不允許在總線上有任何的影響(比如,關閉輸出驅動器)。
三個狀態的轉換方式如圖2所示:

6b91c02c-0363-11ef-9118-92fbcf53809c.jpg

圖2 CAN狀態轉換圖

在每一總線單元里使用兩種計數以便故障界定:發送錯誤計數、接收錯誤計數。
這些計數按以下規則改變(注意,在給定的報文發送期間,可能要用到的規則不只一個):1. 當接收器檢測到一個錯誤,接收錯誤計數就加1。在發送主動錯誤標志或過載標志期間所檢測到的錯誤為位錯誤時,接收錯誤計數器值不加1。2. 當錯誤標志發送以后,接收器檢測到的第一個位為“顯性”時,接收錯誤計數值加8。3. 當發送器發送一錯誤標志時,發送錯誤計數器值加8。

  • 例外情況1:發送器為“錯誤被動”,并檢測到一應答錯誤(注:此應答錯誤由檢測不到一“顯性”ACK 以及當發送被動錯誤標志時檢測不到一“顯性”位而引起)。
  • 例外情況2:發送器因為填充錯誤而發送錯誤標志(注:此填充錯誤發生于仲裁期間。引起填充錯誤是由于:填充位〈填充位〉位于RTR位之前,并已作為“隱性”發送,但是卻被監視為“顯性”)。
    例外情況1和例外情況2時,發送錯誤計數器值不改變。

4. 發送主動錯誤標志或過載標志時,如果發送器檢測到位錯誤,則發送錯誤計數器值加8。

5.當發送主動錯誤標志或過載標志時,如果接受器檢測到位錯誤(位錯誤),則接收錯誤計數器值加8。6. 在發送主動錯誤標志、被動錯誤標志或過載標志以后,任何節點最多容許7個連續的 “顯性”位。以下的情況,每一發送器將它們的發送錯誤計數值加8,及每一接收器的接收錯誤計數值加8:

  • 當檢測到第14個連續的“顯性”位后;
  • 在檢測到第8個跟隨著被動錯誤標志的連續的“顯性”位以后;
  • 在每一附加的8個連續“顯性”位順序之后。

7. 報文成功傳送后(得到ACK及直到幀末尾結束沒有錯誤),發送錯誤計數器值減1,除非已經是0。

8. 如果接收錯誤計數值介于1和127之間,在成功地接收到報文后(直到應答間隙接收沒有錯誤,成功地發送了ACK位),接收錯誤計數器值減1。如果接收錯誤計數器值是0,則它保持0,如果大于127,則它會設置一個介于119到127之間值。9. 當發送錯誤計數器值等于或超過128時,或當接收錯誤計數器值等于或超過128時,節點為“錯誤被動”。讓節點成為“錯誤被動”的錯誤條件致使節點發出主動錯誤標志。10. 當發送錯誤計數器值大于或等于256時,節點為“總線關閉”。11. 當發送錯誤計數器值和接收錯誤計數器值都小于或等于127時,“錯誤被動”的節點重新變為“錯誤主動”。12. 在總線監視到128次出現11個連續“隱性”位之后,“總線關閉”的節點可以變成“錯誤主動”(不再是“總線關閉”),它的錯誤計數值也被設置為0。

備注1:

一個大約大于96的錯誤計數值顯示總線被嚴重干擾。最好能夠預先采取措施測試這個條件。

備注2:

起動/睡眠:如果起動期間內只有1個節點在線,以及如果這個節點發送一些報文,則將不會有應答,并檢測到錯誤和重復報文。由此,節點會變為“錯誤被動”,而不是“總線關閉”。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 控制器
    +關注

    關注

    112

    文章

    15228

    瀏覽量

    171202
  • CAN
    CAN
    +關注

    關注

    56

    文章

    2470

    瀏覽量

    459251
  • 檢測
    +關注

    關注

    5

    文章

    4085

    瀏覽量

    90745
收藏 人收藏

    評論

    相關推薦

    一文讀懂Can總線錯誤處理

    為了防止故障節點干擾甚至阻塞整個CAN網絡系統,CAN協議實現了復雜的故障限制機制。為了保證通信的正常,CAN 2.0 總線協議總線中各節點需要采取以下措施進行錯誤檢測。
    發表于 11-08 17:12 ?7826次閱讀

    嵌入式編程錯誤處理機制設計

    本文主要總結嵌入式系統C語言編程中,主要的錯誤處理方式。文中涉及的代碼運行環境如下。
    發表于 04-28 09:59 ?547次閱讀
    嵌入式編程<b class='flag-5'>錯誤處理</b>機制設計

    一文讀懂CAN總線錯誤處理

    為了防止故障節點干擾甚至阻塞整個CAN網絡系統,CAN協議實現了復雜的故障限制機制。為了保證通信的正常,CAN 2.0 總線協議總線中各節點需要采取以下措施進行錯誤檢測:
    發表于 06-21 17:14 ?2130次閱讀
    一文<b class='flag-5'>讀懂</b><b class='flag-5'>CAN</b>總線<b class='flag-5'>錯誤處理</b>

    Rust語言中錯誤處理的機制

    在Rust語言中,錯誤處理是一項非常重要的任務。由于Rust語言采用靜態類型檢查,在編譯時就能發現很多潛在的錯誤,這使得程序員能夠更加自信和高效地開發程序。然而,即使我們在編譯時盡可能地考慮了所有
    的頭像 發表于 09-19 14:54 ?779次閱讀

    labviEW錯誤處理的問題

    為什么這個程序在啟用自動錯誤處理和C:\data.txt不存在的情況下,沒有顯示錯誤對話框???
    發表于 04-01 10:03

    款獨立CAN總線控制器的說明

    時序邏輯和錯誤管理邏輯等七部分組成,其中:· 接口管理邏輯負責解釋來自CPU 的命令,控制CAN 寄存的尋址,向主控制器提供中斷信息和狀態
    發表于 12-21 15:57

    SJA1000CAN通信控制器作用

    FIFO 中。? 位數據流處理器 它是個序列發生,控制發送緩沖、接收 FIFO 和 CAN
    發表于 12-18 14:55

    CAN總線錯誤處理

    被設置,我的簡單C。ODE當前捕獲這些錯誤并停止發送。我知道旦TX錯誤計數回到128以下,這些比特就會清除。我已經閱讀了CAN文檔,盡管
    發表于 03-11 10:00

    CAN總線錯誤分析方法 精選資料推薦

    我們先簡單總結CAN錯誤處理與故障界定:1.CAN控制器記錄發生在發送/接收過程中,總線數據出現
    發表于 08-20 06:18

    AF錯誤處理

    想問下關于AF的錯誤處理,例如我進行串口通訊,打開串口錯誤,但是我不想停止AF,想繼續嘗試連接要怎么做?
    發表于 02-03 15:44

    LabVIEW中的錯誤處理

    如何合理使用 LabVIEW 中的自定義錯誤處理功能;對于可預見的錯誤,是否可以選擇直 接忽略,或者前幾次嘗試忽略直到該特定錯誤出現很多次后才通知用戶需要糾正該錯誤 了;是否可以對
    發表于 05-24 11:07 ?6次下載

    嵌入式系統C語言編程中的錯誤處理資料總結

    本文主要總結嵌入式系統C語言編程中,主要的錯誤處理方式。文中涉及的代碼運行環境如下:
    發表于 11-28 10:39 ?1758次閱讀

    Rust代碼啟發之返回值異常錯誤處理

    這樣的代碼,錯誤處理代碼和業務邏輯交織在一起,也容易忽略處理錯誤。以及把返回值只用于錯誤返回,有點浪費的感覺。因為很多時候把計算結果作為返回值,更符合思考的邏輯。
    的頭像 發表于 09-22 09:24 ?1655次閱讀
    Rust代碼啟發之返回值異常<b class='flag-5'>錯誤處理</b>

    虹科干貨 | 帶你全面了解“CAN總線錯誤”(四)——在實踐中生成和記錄CAN錯誤

    節點錯誤狀態,并通過實際的應用測試生成并記錄CAN錯誤。在之前發布的文章中,我們介紹了CAN錯誤錯誤處
    的頭像 發表于 06-09 10:21 ?1151次閱讀
    虹科干貨 | 帶你全面了解“<b class='flag-5'>CAN</b>總線<b class='flag-5'>錯誤</b>”(四)——在實踐中生成和記錄<b class='flag-5'>CAN</b><b class='flag-5'>錯誤</b>

    西門子博圖:錯誤處理機制概覽

    可通過以下幾種不同的錯誤處理機制進行參數跟蹤或編程或訪問錯誤
    的頭像 發表于 11-25 11:35 ?1016次閱讀
    西門子博圖:<b class='flag-5'>錯誤處理</b>機制概覽
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>