新聞中心

        EEPW首頁 > 手機與無線通信 > 設計應用 > CAN為什么會發送失敗?

        CAN為什么會發送失敗?

        作者: 時間:2018-07-27 來源:網絡 收藏

        過程中出現發送失敗,很多工程師都對此只知其一不知其二,這里就發送失敗的問題我們來做一次探討。

        本文引用地址:http://www.104case.com/article/201807/384317.htm

        在了解為什么會發送失敗之前我們先看看一條正確的CAN報文到底應該是怎么樣的,表1是一個正常標準數據幀的報文組成。

        表 1 標準數據幀報文格式組成

        圖 1 標準數據幀格式

        CAN總線是一種基于廣播的通訊方式,為了保證總線上的每一個正常節點都能正確的接收到報文,報文的發送者要求每一個接收節點在報文發送結束前要作出應答,這也是報文里ACK存在的原因。

        一幀CAN報文中ACK段長度為2個位,包含應答間隙(ACK Slot)和應答界定符(ACK Delimter)。在應答場里,發送站發送兩個隱性位。當接收器正確地接收到有效的報文,接收器就會在應答間隙(ACK Slot)期間(發送ACK信號)向發送器發送一“顯性”的位以示應答。

        應答間隙:所有接收到匹配CRC序列(CRC SEQUENCE)的站會在應答間隙(ACK Slot)期間用一顯性的位寫入發送器的隱性位來作出回答。

        應答界定符:ACK界定符是ACK場的第二個位,并且是一個必須為隱性的位。因此,應答間隙(ACK Slot)被兩個隱性的位所包圍,也就是CRC界定符(CRC Delimter)和ACK界定符(ACK Delimter)。

        圖 2 正常ACK段報文

        而如果總線上沒有ACK應答(即應答間隙為隱性),發送器就會發送一個錯誤標志,并且發送錯誤計數器值加8,節點就會對報文進行自動重發,若自動重發依然收不到ACK,則在發送錯誤計數器計數滿128后(即出現16幀錯誤幀),由錯誤主動轉為錯誤被動狀態,如圖3所示。

        那導致ACK段出錯的原因有哪些呢?

        總線上只有一個有效節點:發送報文的節點在發送出一幀報文后會檢測總線上應答間隙的狀態,如果檢測到應答間隙為隱性位,則表示該幀報文沒有得到ACK,發送失敗,需要重發,而由于發送錯誤計數器會在發送失敗后累加,直到該節點關閉。所以,當總線上只有一個有效節點時,這個節點是發不出去數據的,因為它所發出的數據幀中的ACK Slot沒有另外一個節點來填充,將永遠是隱性位,這個節點會一直重發數據直到發送成功或發送被取消。

        波特率不匹配或者節點沒有初始化,導致沒有ACK;

        總線線纜短路,斷路,接反;

        高速CAN總線上接的節點不是高速CAN,而是容錯低速CAN,導致不匹配。

        圖 3 應答界定符錯誤幀

        圖 4 沒有ACK的報文

        當你在調試CAN總線時出現節點發送報文失敗的情況時,一定要檢查是不是以上幾點疏漏導致你的總線上ACK異常。而借助恰當的儀器,可以在查找CAN總線錯誤時事半功倍。圖4即采用致遠電子的CANScope來對錯誤幀進行標記,同時找到錯誤幀對應的波形來查找出錯誤情況。CANScope還可以對CAN總線物理層、數據鏈路層、應用層做一系列的測試,為CAN工程師解決測試難題。

        圖 5 CANScope測試項目



        關鍵詞: CAN 總線調試 報文

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 抚州市| 九龙坡区| 明水县| 亚东县| 开远市| 上蔡县| 泽州县| 长沙市| 江达县| 扎兰屯市| 临澧县| 措美县| 疏勒县| 晋州市| 河津市| 静安区| 上杭县| 沂水县| 永顺县| 漳浦县| 望江县| 江西省| 平泉县| 麟游县| 新乡市| 普兰店市| 固安县| 湛江市| 青浦区| 六枝特区| 北海市| 房产| 自治县| 南城县| 宁河县| 濮阳市| 乳源| 苏尼特左旗| 长乐市| 利川市| 白玉县|