CANFD知識點整理

张一默發表於2024-06-20

CAN知識點整理

概述

CANFD提出

引入CAN匯流排的數十年中,汽車嵌入式系統的結構發生了深遠的變化,最明顯的變化是數量:如果在引入CAN時只需傳輸數百個訊號,那麼今天這個數字已達到五位數。

資料流量的增加導致CAN匯流排上的匯流排負載率越來越高。除了對頻寬的需求在不斷增加,對確定性系統行為的需求也在不斷增長,這刺激了新匯流排系統的開發。因此,出於資訊娛樂目的,開發了頻寬高達150 Mbit/s的MOST匯流排。確定性FlexRay匯流排可提供10Mbit/s的頻寬,用於駕駛員輔助功能。在頻寬範圍的低端,引入了LIN作為低成本解決方案,用於完成感測器-執行器-區域中的任務。這些新的匯流排系統覆蓋了各個領域,但CAN仍然是主流的汽車匯流排系統。

只有極少數的CAN需要替換為傳輸速率更快的匯流排,例如FlexRay。但沒有替換的主要原因是硬體成本較高以及將系統轉化為新技術的開發工作巨大。使用更多路CAN匯流排通常可以規避CAN頻寬不足,但這需要閘道器在匯流排之間傳輸資料。

CAN頻寬的限制因素源於自身的一個核心屬性:在報文傳輸的特定階段,多個網路節點可能同時處於傳輸模式。仲裁階段傳輸開始時可能就是這種情況,並且在報文末尾的應答場中也是始終如此。這意味著一個位的傳輸時間不得短於其電壓電平從匯流排一端的節點傳播到另一端的節點再返回所需的時間。例如:在長度為40米的CAN匯流排上,若要滿足一個位所需的傳輸時間,最大傳輸速率應約為1 Mbit/s。

但在CAN報文仲裁階段和應答場之間,僅允許一個傳送節點。因此,這一部分對位時間的最小持續時間沒有限制。那麼在博世的工程師看來,如果在CAN報文這一部分提高傳輸速率會怎樣?只需在兩個不同的傳輸速率之間切換:在CAN報文的開頭和末尾切換為慢速,在中間切換為快速。這就是CAN FD的基本概念。

CANFD知識點整理

CANFD引入後的問題

快地傳輸CAN FD幀的有效負載可縮短傳輸時間,即匯流排負載率降低。另一方面,可以同時傳輸更長的資料場,即只需使用一個CAN FD幀。例如,如果使用CAN FD以五倍的速度傳輸資料場,假設該幀包含的資料比普通CAN幀多五倍,則兩者用時大致相同。因此,CAN FD幀可以傳輸五倍於CAN幀的資訊,且不會增加匯流排負載率。

引入CAN FD將為開發過程帶來許多好處:

  • 匯流排負載率問題將大大減少
  • 不再需要使用多條CAN匯流排
  • 即使未能消除對閘道器的需求,也會大大減少
  • 由於每一幀可以承擔更多的有效負載,因此需要的資料段更少
  • 使用更少的幀,獲得更理想的有效負載與開銷資料比

但為了確保CAN FD正常工作,需要新的CAN FD控制器。CAN FD控制器是向下相容的,並且能夠處理經典CAN (Classical CAN)。CAN匯流排上的ECU可以逐步替換為支援CAN FD的ECU。當然,只要有一個具有常規CAN控制器的ECU,就必須使用經典CAN。這會導致硬體成本上升。

此外,與經典CAN類似,CAN FD同樣採用兩種型別的資料幀格式:具有11位識別符號的標準幀和具有29位識別符號的擴充套件幀。這可確保對CAN FD進行部分調整後即可使用CANopen和SAE J1939等基於CAN的高層協議。另外,CANFD沒有遠端幀,因為遠端幀沒有資料場,談不上資料場加速。

CANFD雖然對Classic CAN+LIN的汽車架構提出了很多挑戰,比如更高的EMC要求,更昂貴的收發器,更復雜的資料互動形式(PDU)。但CANFD仍能榮登殿室的原因是:千萬工程師多年以來的CAN經驗與相關知識仍然有效,這背後是數不清的教訓與鮮活又凋謝的生命,難以割捨。

CANFD機制

RRS代替RTR

由於沒有用於CAN FD的遠端幀,因此RTR位不是必需的,所以被始終呈顯性的RRS(Remote Request Substitution,遠端請求替代位)所取代。幀起始(SOF)、識別符號和識別符號擴充套件位(IDE)保持不變。此外,CAN FD幀末尾的應答位(ACK)、相應的界定符(DEL)、幀結束(EOF)以及幀間間隔場(ITM)仍與經典CAN幀相同。CANFD擴充幀仍使用RRS。

CAN FD相對於經典CAN在IDE位與應答位之間的部分進行了修改。

CANFD知識點整理

用於區分CANFD的FDF

經典CAN幀的保留位成為經典CAN幀和CAN FD幀的區別標識。如果是顯性值0,則表示經典CAN幀。如果是隱性值1,則表示CAN FD幀。

該位的新名稱是FDF(Flexible Data Rate Format,FD格式),它為傳輸更大的有效載荷創造了可能。實際的資料場長度以及是否切換為更快傳輸速率取決於FDF位的後面部分。

這也是為什麼傳統CAN控制器無法識別CANFD幀的原因:不允許保留位顯性。

CANFD知識點整理

速率切換BRS

CAN FD的保留位之後接位速率切換(BRS)位。當BRS位為顯性時,波特率2等同於波特率1,因此不會加速傳輸。對於一條匯流排上的所有CAN FD控制器,必須統一配置資料場與非資料場的波特率。

從波特率1到波特率2的轉換髮生在BRS的取樣點,從波特率2回到波特率1的轉換髮生在應答位之前的CRC界定符的取樣點。為了使接收方即使在傳輸速率很高的情況下也可以與傳送方完美同步,需要立即執行第二次硬同步。

CANFD知識點整理

錯誤狀態指示位

錯誤狀態指示位(ESI)在位速率切換(BRS)位之後。如果該位為顯性,則表明ECU處於主動錯誤狀態。如果該位為隱性,則表明ECU處於被動錯誤狀態。

該位旨在以更加透明的方式跟蹤錯誤,並簡化網路管理。網路節點的主動錯誤和被動錯誤狀態會在整個網路上傳播。

CANFD知識點整理

DLC長度變化

在經典CAN的基礎上,DLC中其餘的七個值(即9到15)用於CAN FD。如果DLC > 8,DLC與位元組數之間將不是線性對應的關係。

CANFD知識點整理

下表顯示了DLC對CAN和CAN FD中資料場大小的不同含義:

CANFD知識點整理

更長的CRC

相較於經典CAN,CAN FD幀中出現位錯誤的可能性有所增加。之所以如此,一方面是因為高速段的位時間更短,另一方面是因為資料場中的位數更多。解決此問題需要在CAN FD幀中實現更大的冗餘,否則,接收方無法檢測到錯誤的可能性就會增加。資料場不超過16個位元組的CAN FD幀將由17個CRC位保護。資料場超過16個位元組時,對應的CRC為21個位。

兩個生成多項式分別是CRC17的0x3685B,以及CRC21的0x302899。

CANFD知識點整理

Stuff Count填充計數規則:

格雷碼計算:CRC區域之前的填充位數除以8,得到的餘數(Stuff bit count modulo 8)進行格雷碼計算得到的值(Bit0-2)
奇偶校驗:透過格雷碼計算後的值的奇偶校驗(偶校驗,Parity)

CANFD知識點整理

位填充的變化

在傳統的CAN幀中,從幀起始(SOF)到校驗場末尾(CRC)新增填充位。在每五個相同的位之後插入一個相反的位。這些填充位不計入校驗場。

在CAN FD中,從幀起始(SOF)到資料場末尾新增填充位。在計算校驗場時,會將這些填充位也考慮進去。填充位計數器(對7取模)和奇偶校驗位在幀中緊接在資料場後。

CRC場本身也會被填充,且頻率更高。以下是適用規則:CRC場始終以與前面的位相反的填充位開頭。在接下來的每四個位(無論是否相同)之後,插入與前一位相反的填充位。

在CRC之後,不再插入填充位,這一點與經典CAN中相同。

CANFD知識點整理

更加容忍的ACK

CANFD的ACK應答位只有一位,但是有效應答可以傳輸2個位時間,即在ACK緊隨的DEL界定位時間內接收到應答仍視為有效應答。

設計此機制的原因與在ACK前一位的DEL進行速率切換有一定關係,目的是為了減少傳輸延遲帶來的錯誤。延遲的產生可以有很多種,速率切換延遲,物理傳輸延遲,片內處理延遲等。

第二取樣點

相關文章