














【摘" 要】控制器局域網絡CAN問世以來,憑借其優良的可靠性、實時性、低成本等優勢,成為當下商用車和乘用車包括新能源汽車上最普遍的整車通信方式。為滿足各種需求,整車CAN通信網絡變得越來越復雜,由此引發的錯誤幀問題也越來越多,導致工程師不得不花費大量精力解決錯誤幀問題。文章介紹錯誤幀的類型、錯誤幀結構和節點設備錯誤狀態,分析引起錯誤幀的常見原因,最后結合工作中實際案例,分析產生錯誤幀的原因,可為解決其它CAN錯誤幀或通信失敗問題提供參考。
【關鍵詞】CAN;錯誤幀;控制器局域網;整車通信
中圖分類號:U463.6" " 文獻標識碼:A" " 文章編號:1003-8639( 2024 )04-0021-05
Research and Application of the Vehicle CAN Network and Check Items*
TIAN Dongming,ZHANG Guangqing,WU Suchao,XU Yongxin
(Weichai Power Co.,Ltd.,Weifang 261061,China)
【Abstract】Since the advent of CAN,with its excellent reliability,versatility,low cost and other advantages,it has become the most popular vehicle communication mode among commercial vehicles and passenger cars including new energy vehicles. However,in order to meet the various needs,CAN vehicle communication network is becoming more and more complex,resulting lots of error frame problems and causing engineers to spend a lot of energy to solve the error frame problems. In this paper,types and the structure of CAN error frames as well as error states of node devices are introduced and analyzed. Combining with the practical cases in the work,the paper analyses the causes of CAN error frames,which can provide references for CAN error frame and communication failure problems.
【Key words】CAN;error frames;controller area network;vehicle communications
1986年德國博世公司開發出面向汽車的CAN通信協議,由于其可靠性好、實時性高、成本低等優點,在商用車和乘用車領域已成為最普遍的整車網絡通信方式[1-4]。然而隨著法規、安全性、舒適性等要求越來越高,整車上控制器節點數量急劇增加,整車網絡布線越來越復雜,導致總線中出現錯誤幀的概率大大增加,并由此產生了一系列通信失敗問題。此外,由于錯誤幀的類型不盡相同,CAN總線上出現的錯誤幀也僅僅包含錯誤標志符和錯誤界定符信息,沒有包含產生錯誤幀原因和錯誤幀類型等信息,這給使用者排查解決錯誤幀問題帶來了不少困難。
1" 錯誤幀類型介紹
CAN通信采用屏蔽雙絞線進行信號傳輸,采用差分電平,符合線與機制(隱性位可被顯性位覆蓋),滿足IOS 11898協議要求[5-9](顯性位CAN_H-CAN_Lgt;0.9V,隱性位CAN_H-CAN_Llt;0.5V),如圖1所示。盡管CAN總線的可靠性很高,但還是因為各種原因產生錯誤幀。錯誤幀起著指示的作用,在接收(對于接收節點)或發送(對于發送節點)過程中,若檢測到任何錯誤,無論是發送節點還是接收節點,都會向總線發送錯誤幀,以告知總線中出現了錯誤。錯誤幀主要包括CRC校驗錯誤、格式錯誤、應答錯誤、位發送錯誤和位填充錯誤5種類型。
1)CRC校驗錯誤。為了增加通信的準確性,保證發送節點發出的數據等于接收節點接收到的數據,CAN數據幀中加入了CRC校驗功能,即發送節點對數據幀中起始段、仲裁段、控制端和數據段中的數據通過某種算法計算得到一個CRC值,并將該值填入CRC段中(CRC段由15個bit位的數值段和1個bit位的界定符組成,CAN控制器計算的CRC值就存在前15個bit位的數值段中),然后向總線上發送,如圖2所示。接收節點收到數據后,會對同樣數據段的數據以同樣的算法進行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)位發送錯誤。發送節點向總線發送數據時,同時也會監控發送的數據與總線上實際數據是否一致,這也是CAN通信可靠性高的重要原因之一。如果發送節點在發送數據時發現總線電平與正在發送的信號電平不符,將發生位發送錯誤,位發送錯誤幀由發送節點向總線發出。
5)位填充錯誤。為了使收發節點保持同步以便接收節點正確接收信號,接收節點需要在邊沿信號處進行重新同步。為了避免總線上長時間不出現邊沿信號,協議規定發送節點的數據鏈路層能夠發送的連續相同位最大個數為5,若連續相同位個數達到5個,需要在其后添加一個相反的位,使總線上信號電平發生翻轉,從而接收節點得以進行重新同步,即位填充規則(位填充區域包含幀起始、仲裁域、控制域、數據域和15位CRC,不包含CRC界定符、ACK段和EOF)。如果發送節點向總線上傳輸信號時違反了位填充規則,接收節點檢測到連續6個極性相同的位序列時,將發生位填充錯誤,并向總線發送錯誤幀。
2" 錯誤幀結構與設備錯誤狀態
2.1" 錯誤幀結構
就像數據幀由7個段組成一樣,CAN規范也對錯誤幀的結構進行了定義。錯誤幀結構由錯誤標志符和錯誤界定符構成,錯誤標志符分為主動錯誤標志和被動錯誤標志。主動錯誤標志由6個連續顯性位組成,由處于主動錯誤狀態的節點發出;被動錯誤標志由6個連續隱性位組成,由處于被動錯誤狀態的節點發出;錯誤界定符由8個隱性位構成,其緊跟在錯誤標志符后發送。
節點向總線發錯誤幀時,視錯誤類型的不同,發送錯誤幀的時機可能不同。對于位發送錯誤、位填充錯誤、應答錯誤和格式錯誤,檢測到這些錯誤的節點將在錯誤出現位置的下一位開始傳輸錯誤幀。對于CRC校驗錯誤,錯誤幀的發送將延遲到ACK界定符之后,除非在ACK界定符之前,又檢測到其它類型的錯誤。若有多個節點檢測到錯誤,則多個節點各自都會發送錯誤幀?;诖艘巹t,實際總線中錯誤幀顯性位個數可能為6~12個,隱性位個數為8個。
2.2" 設備錯誤狀態
設備錯誤狀態有3種:主動錯誤狀態、被動錯誤狀態和總線關閉狀態。
錯誤幀標志符與節點狀態有關,即處于主動錯誤狀態的節點錯誤幀標志符為連續6個顯性位,被動錯誤狀態的節點錯誤幀標志符為連續6個隱性位,處于總線關閉狀態的節點不會與總線進行交互,不會向總線發送任何幀,包括錯誤幀。由于CAN總線上顯性電平可以覆蓋隱性電平,因此主動錯誤狀態和被動錯誤狀態的節點發出的錯誤幀對總線的影響是完全不同的。
此外,為了避免某個設備因為自身原因(例如硬件損壞)無法正確收發數據而不斷地向總線發送錯誤幀,從而影響其它正常節點通信,CAN協議使用了獨特的故障界定機制劃分節點狀態。CAN總線規范中規定每個CAN控制器中有一個發送錯誤計數器TEC(Transmit Error Counter)和一個接收錯誤計數器REC(Receive Error Counter)。根據計數值不同,對錯誤進行界定,從而使CAN節點處于不同的設備錯誤狀態(主動錯誤、被動錯誤、總線關閉),狀態轉換如圖3所示。
設備的3種錯誤狀態對應設備不同的損壞程度。主動錯誤狀態的節點收發的錯誤幀數都小于127,該狀態是設備的正常狀態,設備可以正常參與總線通信,當檢測到總線錯誤時,將發送主動錯誤標志(連續6個顯性位)以破壞總線,強制使總線上其它節點都檢測到錯誤,此時,這一幀報文將被視為錯誤報文,發送節點會自動重新發送。被動錯誤狀態的節點錯誤幀比較多,接收或者發送的錯誤幀數超過127,該狀態下設備可以參與通信,但在檢測到錯誤幀時,將發送被動錯誤標志(連續6個隱性位),避免破壞總線??偩€關閉狀態的節點發送錯誤幀數超過255,可以理解為設備自身出了問題,該狀態的節點可視為完全脫離了總線,不會對總線產生任何影響。
3" 錯誤幀產生原因分析
錯誤幀產生原因主要包括軟件錯誤和硬件錯誤。硬件錯誤主要包括總線分支過多或過長、總線電容過大、總線干擾過大等。軟件錯誤主要包括波特率配置錯誤、采樣點設置不合適、收發報文的ID配置沖突等。當CAN網絡中出現錯誤幀或通信失敗問題時,可以作為查核項進行分析確認。
3.1" 總線分支過多或過長
CAN通信距離與通信速率緊密相關,波特率(通信速率)越高,CAN通信距離越短,反之波特率越低,CAN通信距離越長。整車上,考慮到現場網絡環境的因素,通信速率和通信距離關系如圖4所示。當總線支線過長時,線束的阻抗和容抗會增大,下降沿容易產生彎曲現象,容易導致位寬度失調,從而使接收節點接收數據錯誤,同時向總線發出錯誤幀。為了保證正常通信,需要減小CAN終端電阻,線束越長,電阻值越小,但一般不小于30Ω,否則會使顯性位差值過小,不滿足ISO 11898要求。
3.2" 總線電容過大的問題
CAN收發器為了實現CAN的仲裁與錯誤處理,采用單向驅動結構,即CAN波形的上升沿有驅動,而下降沿是通過整條總線與終端電阻放電產生的,所以終端電阻的第一作用是放電。因此,CAN節點及CAN線束的電容會影響整個網絡的電容,電容越大,下降邊沿越緩,導致接收節點發生位采樣錯誤,從而導致錯誤幀的產生。一般需要保證CAN線電容在40~70pF/m范圍內。
實驗室環境下配置1000kBd、CAN線長7m、線徑0.6mm2的CAN通信網絡,CAN網絡節點布置如圖5所示。在此基礎上分別做了終端電阻(ETAS582端和ECU端)為55Ω、120Ω且ETAS端并聯不同電容值的測試,結果見表1。顯然,終端電阻值一定時,總線并聯電容越大,CAN信號波形下降邊沿越緩。ETAS端并聯相同電容時,終端電阻55Ω比終端電阻120Ω的波形品質明顯提高。因此,當整車網絡容抗較大時往往減小終端電阻值,以加快總線放電速度,即以犧牲幅值的方法改善下降沿。
3.3" 總線干擾過大問題
實際整車網絡中,受整車網絡環境影響,尤其新能源電動汽車和發電機組等存在變頻器、逆變器、電機驅動、繼電器、電磁閥等電流劇烈變化的線纜或設備,CAN整車通信信號受到的電磁干擾尤為顯著。為此整車上往往采用提高CAN雙絞程度、加單雙屏蔽層、使用CAN隔離模塊、弱電遠離強電優化布線等方式以提高整車CAN通信抗干擾能力。此外,使用低阻抗、低容抗的CAN線也可以提高信號品質,從而提高抗干擾能力。
3.4" 波特率配置錯誤問題
CAN信號是一種典型的NRZ(Non Return to Zero,不歸零)編碼方式,即信號電平在整個位時間內保持恒定,此時,僅僅通過數據波形無法判斷一個位的傳輸時間。比如,接收方接收到一段時間的高電平,并不能直接通過波形判斷其表示的是連續幾位邏輯0,因為從形式上看,連續N位邏輯0呈現出來的波形都是一段時間的高電平。為了使接收方能夠正確地解析數據,通信雙方需要提前約定好傳輸一位數據所花費的時間:位時間,而位時間由整車波特率決定(位時間=1s/Bd)。軟件中可以直接配置相應的寄存器即可配置波特率,例如,當整車波特率為500kBd時,此時位時間為2μs,那么發送方就可以按照2μs的位時間發送數據,接收方每隔2μs對數據進行采樣。因此,如果同一CAN網絡中不同節點配置的波特率不一致,總線會出現錯誤幀,收發節點是無法正常通信的。
3.5" 采樣點設置不合適問題
采樣點是CAN控制器讀取總線電平并解釋各個比特位邏輯值的時間點。由于CAN報文的一個位時間由若干個Tq組成(CAN控制器的最小時間周期稱作時間份額Tq,它是通過對芯片晶振周期進行分頻而得來的),通常為8~25個,同時根據功能分為4個階段:同步段、傳播段、相位緩沖段1和相位緩沖段2。采樣點即為在某位時間內讀取總線電平的時刻,如圖6所示。采樣時刻的設置通過配置寄存器決定,對于同一CAN整車網絡,各個節點應該盡量使用相同的采樣點位置,否則容易出現采樣錯誤,進而使整個網絡的通信出現故障。
對于單個節點,過早的采樣使得節點易受位時間初期電平波動影響,進而導致采樣錯誤。受限于重同步的要求和相位緩沖段的寬度,CAN控制器無法過晚采樣。因此,采樣點設置不合適,總線可能會出現錯誤幀,進而導致整車網絡無法通信。
3.6" 收發報文的ID配置沖突問題
ID是數據幀中仲裁段的組成部分,ID的大小決定了總線上節點沖突時各節點發送順序,整車上通信的報文數量級在幾十甚至上百,如果這些報文的ID重復,總線上會出現錯誤幀,從而影響整車通信。為了避免沖突,多個節點不應發送相同ID的數據幀,即某一ID的數據幀只能由某一特定的節點發送,該ID的數據幀就反映了該節點提供的服務。
4" 案例分析
4.1nbsp; CAN線電容過大問題
某發動機臺架在做測試時反饋,在監控和刷寫(CAN通信,1000kBd)過程中存在通信中斷問題。經過分析,該臺架CAN通信網絡簡圖如圖7所示,即該網絡中僅有ETAS590和發動機2個節點,且兩終端電阻均為120Ω。
將CANalyzer設備接入網絡中,發現監控或刷寫失敗時總線上存在大量錯誤幀;用示波器觀測CAN總線波形,發現CAN_H的下降沿彎曲嚴重,如圖8所示;在ECU不上電情況下,測試CAN線的電容,發現該值達2400pF(合120pF/m),遠高于推薦值40~70pF/m,線束品質不合格。
現場臨時在ETAS590端并聯60Ω電阻后,斷通信問題明顯改善,后更換高品質的泰克型號CAN線后,CAN信號波形明顯變好,問題消除。
4.2" CAN線干擾過大問題
某純電新能源汽車反饋,在行駛過程中偶爾出現儀表不顯示轉速、車速問題。經過分析,該車通信網絡如圖9所示,CAN線總長度不到15m,波特率250kBd,兩終端電阻均為120Ω。
將CANalyzer設備接入網絡中,發現總線上偶爾出現錯誤幀,且出現錯誤幀時刻與儀表不顯示車速、轉速時刻一致。用示波器觀測CAN總線波形,發現整體信號品質較差,如圖10所示。用CANscope分析儀測試各節點采樣點均為75%,經過現場查核線束發現,部分CAN線與驅動電機的高壓線重疊在一起?,F場將CAN線與高壓線剝離后,CAN 信號品質明顯改善,故障消除。
4.3" 波特率配置錯誤問題
某發動機臺架在整車通信CAN接上CANoe設備,發現ECU剛上電時總是出現大約50ms時間的錯誤幀,過后錯誤幀消失。該臺架CAN網絡簡圖如圖11所示,兩終端電阻均為120Ω,波特率為250kBd。
將示波器接入CAN網絡中,發現ECU上電50ms后CAN信號品質良好(現場未發現大功率器件等干擾源),用CANscope分析儀測試后發現各節點采樣點基本一致。經過分析發現BootLoader中設置的CAN波特率是500kBd,而應用程序中波特率被標定為250kBd,ECU剛上電后會在BootLoader中停留50ms,此時ETAS590和ECU的波特率不一致,總線出現錯誤幀?,F場將應用程序的波特率標定為500kBd后,ECU上電后不再出現錯誤幀,故障消失。臺架CAN信號波形見圖12。
4.4" 采樣點設置不合適問題
某工程師在整車測試功能時,反饋偶爾出現ECU無法連接INCA以及監控過程中INCA斷通信問題(上位機為ETAS582)。該整車網絡如圖13所示,波特率為1000kBd,兩終端電阻均為120Ω。
將CANalyzer設備接入網絡中,發現總線上偶爾出現錯誤幀,且出現錯誤幀時ECU無法連接INCA。用示波器觀測CAN總線波形,發現總線CAN信號品質一般,如圖14所示。用CANscope分析儀測試后發現ECU的采樣點為60%,其余節點包括ETAS582設置的采樣點均為85%,結合現場CAN信號波形下降沿有彎曲,ECU采樣點較小,容易采樣錯誤。更新ECU軟件,將ECU采樣點配置為85%后,故障消失,為了改善波形,同時減小了終端電阻。
5" 結束語
本文首先介紹了CAN通信錯誤幀的類型,然后說明了錯誤幀結構和設備錯誤狀態,其次從硬件和軟件角度總結了整車上產生錯誤幀的6種常見原因,最后結合工作中遇到的實際問題,分析了產生錯誤幀的原因并解決了現場問題,為解決整車通信失敗問題提供有效參考。
參考文獻:
[1] 布朋生. 基于CAN總線錯誤幀機制的礦用設備網絡安全問題研究[J]. 煤礦機械,2022(4):41-44.:
[2] 劉恒洲. CAN總線電磁干擾效應研究[D]. 廈門:廈門理工學院,2019.
[3] 譚克誠,宛東. 淺析汽車CAN數據總線工作原理[J]. 內燃機與配件,2018(9):50-53.
[4] 杜文龍,彭宏偉,孫鵬. 淺談商用車網絡錯誤處理規范與應用[J]. 汽車實用技術,2017(19):172-174.
[5] 于赫. 網聯汽車信息安全問題及CAN總線異常檢測技術研究[D]. 長春:吉林大學,2016.
[6] 肖蒙蒙. 智能檢測裝備的CAN總線通訊容錯性研究[D]. 杭州:浙江大學,2015.
[7] 楊建軍. CAN總線技術在汽車中的應用[J]. 上海汽車,2007(6):32-34.
[8] 袁傳義. 電動汽車CAN總線的研究[D]. 合肥:安徽農業大學,2004.
[9] 唐紅衛. CAN總線實時性通信研究及改進[D]. 西安:西安電子科技大學,2006.
(編輯" 楊凱麟)