在我們使用CAN通信的時候,難免會因為各種各樣的情況遇到錯誤幀,那到底什么情況會導致錯誤幀呢?今天一起來分享一下。
首先我們回憶一下哪些情況會導致錯誤幀。
1.CRC校驗錯誤。為了增加通信的準確性, 保證發送節點發出的數據等于接收節點接收到的數據, CAN數據幀中加入了CRC校驗功能, 即發送節點對數據幀中起始段、 仲裁段、 控制端和數據段中的數據通過某種算法計算得到一個CRC值, 并將該值填入CRC段中 (CRC段由15個bit位的數值段和1個bit位的界定符組成, CAN控制器計算的CRC值就存在前15個bit位的數值段中), 然后向總線上發送, 接收節點收到數據后, 會對同樣數據段的數據以同樣的算法進行CRC計算, 并將計算結果與數據幀中的CRC值進行比對, 當接收節點計算得到的CRC值與發送節點發送的CRC值不一致時會發生CRC校驗錯誤,并由接收節點向總線發送CRC校驗錯誤幀, 該功能由CAN控制器自動完成。
2.格式錯誤。如果總線上傳輸的數據幀格式與協議規定的幀格式不符合, 就會發生格式錯誤。比如, 在數據幀和遠程幀中的CRC段、 ACK段和幀結束段EOF, 存在1個bit位的CRC界定符、 1個bit位的ACK界定符和7個bit位的幀結束符, 它們均被定義為隱性電平, 如圖2所示, 若在這些位置上出現顯性電平, 則視為一種格式錯誤, 接收節點和發送節點都可能向總線發送該種類型錯誤幀。
3.應答錯誤。發送節點向總線發送數據幀時, 會在ACK段發送2個隱性位, 接收節點在收到CRC序列后, 如果接收過程沒有出現錯誤, 接收節點會在ACK段的第1位發出一個顯性電平, 該顯性電平會覆蓋原來發送節點發出的隱性電平, 因此發送節點可以監測總線上該位是否為顯性位來判斷該數據幀是否傳輸成功。如果發送節點在ACK段的第1位沒有監測到接收節點發出的顯性電平,就意味著沒有任何節點接收到該幀, 此時將發生應答錯誤。即一個網絡中如果只有單個CAN節點, 單個節點的CAN設備發送數據幀時將會發生該錯誤 (沒有接收節點,不會有節點對數據幀產生應 答) , 并由發送節點向總線發出該錯誤幀。
4.位發送錯誤。發送節點向總線發送數據時, 同時也會監控發送的數據與總線上實際數據是否一致。如果發送節點在發送數據時發現總線電平與正在發送的信號電平不符, 將發生位發送錯誤, 位發送錯誤幀由發送節點向總線發出。
5.位填充錯誤。為了使收發節點保持同步以便接收節點正確接收信號, 接收節點需要在邊沿信號處進行重新同步。為了避免總線上長時間不出現邊沿信號, 協議規定發送節點的數據鏈路層能夠發送的連續相同位最大個數為5, 若連續相同位個數達到5個, 需要在其后添加一個相反的位, 使總線上信號電平發生翻轉, 從而接收節點得以進行重新同步, 即位填充規則 (位填充區域包含幀起始、 仲裁域、 控制域、 數據域和15位CRC, 不包含CRC界定符、 ACK段和EOF)。如果發送節點向總線上傳輸信號時違反了位填充規則, 接收節點檢測到連續6個極性相同的位序列時, 將發生位填充錯誤, 并向總線發送錯誤幀。
那有哪些情況會導致錯誤幀呢?
1. CAN總線過長。CAN通信距離與通信速率緊密相關,波特率越高,CAN通信距離越短,反之波特率越低, CAN通信距離越長。當總線支線過長時,線束的阻抗和容抗會增大, 下降沿容易產生彎曲現象,容易導致位寬度失調,從而使接收節點接收數據錯誤, 同時向總線發出錯誤幀。為了保證正常通信,需要減小CAN終端電阻,線束越長,電阻值越小,但一般不小于30Ω,否則會使顯性位差值過小,不滿足ISO 11898要求。
2.總線電容過大。CAN收發器為了實現CAN的仲裁與錯誤處理, 采用單向驅動結構, 即CAN波形的上升沿有驅動, 而下降沿是通過整條總線與終端電阻放電產生的, 所以終端電阻的第一作用是放電。因此, CAN節點及CAN線束的電容會影響整個網絡的電容, 電容越大, 下降邊沿越緩, 導致接收節點發生位采樣錯誤, 從而導致錯誤幀的產生。一般需要保證CAN線電容在40~70pF/m范圍內。
3.波特率配置錯誤。為了使接收方能夠正確地解析數據, 通信雙方需要提前約定波特率。軟 件 中可以直接配置相應的寄存器即可配置波特率, 例如, 當整車波特率為500kB時 ,此時位時間為2us, 那么發送方就可以按照2us的位時間發送數據, 接收方每隔2us對數據進行采樣。因此, 如果同一CAN網絡中不同節點配置的波特率不一致, 總線會出現錯誤幀, 收發節點是無法正常通信的。
4.采樣點設置錯誤。采樣點是CAN控制器讀取總線電平并解釋各個比特位邏輯值的時間點。由于CAN報文的一個位時間由若干個Tq組成 (CAN控制器的最小時間周期稱作時間份額Tq, 它是通過對芯片晶振周期進行分頻而得來的),通常為8~25個,同時根據功能分為4個階段:同步段、 傳播段、 相位緩沖段1和相位緩沖段2。采樣點即為在某位時間內讀取總線電平的時刻, 如圖6所示。采樣時刻的設置通過配置寄存器決定, 對于同一CAN整車網絡, 各個節點應該盡量使用相同的采樣點位置, 否則容易出現采樣錯誤, 進而使整個網絡的通信出現故障。
5.收發報文報文ID沖突。ID是數據幀中仲裁段的組成部分, ID的大小決定了總線上節點沖突時各節點發送順序, 整車上通信的報文數量級在幾十甚至上百, 如果這些報文的ID重復, 總線上會出現錯誤幀。
6.總線干擾過大問題。其新能源電動汽車和發電機組等存在變頻器、 逆變器、 電機驅動、繼電器、 電磁閥等電流劇烈變化的線纜或設備, CAN整車通信信號受到的電磁干擾尤為顯著。為此整車上往往采用提高CAN雙絞程度、 加單雙屏蔽層、 使用CAN隔離模塊、弱電遠離強電優化布線等方式以提高整車CAN通信抗干擾能力。此外,使用低阻抗、 低容抗的CAN線也可以提高信號品質, 提高抗干擾能力。
轉自汽車ECU開發