1. 概述
CAN(Controller Area Network)和CANFD(Controller Area Network Flexible Data-rate)是一種常用于汽車和工業領域的通信協議。
CAN協議最初是由德國的博世公司(Bosch)在20世紀80年代開發的,旨在解決汽車電子設備之間的通信需求。它是一種高效可靠的串行通信協議,可支持在短距離上的高速數據傳輸。CAN協議以事件觸發的方式進行通信,允許多個設備同時參與通信,并通過優先級機制確保數據傳輸的實時性和可靠性。Classic CAN,傳統CAN,有時也稱為經典CAN或普通CAN。
CAN協議的特點包括
雙線制:CAN總線由CAN_H和CAN_L兩根傳輸線組成,用差分信號傳輸數據,以提高抗干擾性能。
沖突檢測與沖突解決:多個設備同時發送數據時,CAN協議能夠檢測到沖突并通過優先級機制解決。
幀格式簡單:CAN消息由ID、數據、控制位和CRC校驗組成,具有較小的開銷和較高的數據傳輸效率。
容錯能力強:CAN協議使用位級錯誤檢測和錯誤恢復機制,能夠實現高可靠性的數據傳輸。
隨著汽車電子系統的發展和數據通信需求的增加,CANFD協議應運而生。CANFD在保持CAN協議基本特性的同時,增加了一些新的特性,主要是在數據傳輸速率和數據長度上的增強。相對于傳統的CAN協議,CANFD支持更高的數據傳輸速率(最高可達到8Mbps)和更大的數據長度(最多可傳輸64字節的數據)。這使得CANFD能夠滿足對數據帶寬要求更高的應用場景,如高級駕駛輔助系統(ADAS)和自動駕駛領域。
CAN FD協議是由Bosch以及行業專家預研開發的,并于2012年發布。通過標準化對其進行了改進,現已納入ISO 11898-1:2015。原始的Bosch CAN FD版本(非ISO CAN FD)與ISO CAN FD是不兼容。CAN FD具有四個主要優點:
增加了數據的長度:CAN FD每個數據幀最多支持64個數據字節,而傳統CAN最多支持8個數據字節。這減少了協議開銷,并提高了協議效率。
增加傳輸的速度:CAN FD支持雙比特率;與傳統CAN一樣,標稱(仲裁)比特率限制為1 Mbit/s,而數據比特率則取決于網絡拓撲/收發器。實際上,可以實現高達5 Mbit/s的數據比特率(實際應用中可以達到8 Mbit/s,但沒有標準)。
更好的可靠性:CAN FD使用改進的循環冗余校驗(CRC)和“受保護的填充位計數器”,從而降低了未被檢測到的錯誤的風險。這在汽車和工業自動化等安全攸關的應用中至關重要。
平滑過渡:在一些特定的情況下CAN FD能用在僅使用傳統CAN的ECU上,這樣就可以逐步引入CAN FD節點,從而為OEM簡化程序和降低成本。
與傳統CAN相比,CAN FD可以將網絡帶寬提高3到8倍,效率可從50%提升到90%,從而為數據的增長提供了一種簡單的解決方案。
2. CAN協議
2.1 物理層
與I2C、SPI等具有時鐘信號的同步通訊方式不同,CAN通訊并不是以時鐘信號來進行同步的,它是一種異步通訊,只具有CAN_High和CAN_Low兩條信號線, 共同構成一組差分信號線,以差分信號的形式進行通訊。
CAN物理層的形式主要有兩種:閉環總線網絡和開環總線網絡。
2.1.1 閉環總線網絡
如下所示的圖中的CAN通訊網絡是一種遵循ISO11898標準的高速、 短距離“閉環網絡”,它的總線最大長度為40m,通信速度最高為1Mbps,總線的兩端各要求有一個“120歐”的電阻。
2.1.2 開環總線網絡
如下所示的圖中的是遵循ISO11519-2標準的低速、遠距離“開環網絡”,它的最大傳輸距離為1km, 最高通訊速率為125kbps,兩根總線是獨立的、不形成閉環,要求每根總線上各串聯有一個“2.2千歐”的電阻。
2.1.3 ISO11898(閉環總線網絡)和11519-2 (開環總線網絡)協議的不同點
ISO11898 和 ISO11519-2 標準對于數據鏈路層的定義相同,但物理層不同。
ISO11898是通信速度為125kbps-1Mbps的CAN高速通信標準。
ISO11519是通信速度為125kbps以下的CAN低速通信標準。
下圖描述了ISO11898和11519-2物理層的主要不同點。
用戶需根據系統需要設定通信速度及總線長度。
2.1.4 CAN協議中的差分信號
差分信號又稱差模信號,與傳統使用單根信號線電壓表示邏輯的方式有區別,使用差分信號傳輸時,需要兩根信號線,這兩個信號線的振幅相等, 相位相反,通過兩根信號線的電壓差值來表示邏輯0和邏輯1。
CAN協議中對它使用的CAN_High及CAN_Low表示的差分信號做了規定, CAN協議標準表示的信號邏輯參見下表。
以高速CAN協議為例,當表示邏輯1時(隱性電平),CAN_High和CAN_Low線上的電壓均為2.5v, 即它們的電壓差VH-VL=0V;而表示邏輯0時(顯性電平), CAN_High的電平為3.5V,CAN_Low線的電平為1.5V, 即它們的電壓差為VH-VL=2V。例如,當CAN收發器從CAN_Tx線接收到來自CAN控制器的低電平信號時(邏輯0), 它會使CAN_High輸出3.5V,同時CAN_Low輸出1.5V,從而輸出顯性電平表示邏輯0。
在CAN總線中,必須使它處于隱性電平(邏輯1)或顯性電平(邏輯0)中的其中一個狀態。假如有兩個CAN通訊節點,在同一時間,一個輸出隱性電平, 另一個輸出顯性電平,類似I2C總線的“線與”特性將使它處于顯性電平狀態,顯性電平的名字就是這樣來的,即可以認為顯性具有優先的意味。
由于CAN總線協議的物理層只有1對差分線,在一個時刻只能表示一個信號,所以對通訊節點來說,CAN通訊是半雙工的,收發數據需要分時進行。在CAN的通訊網絡中,因為共用總線,在整個網絡中同一時刻只能有一個通訊節點發送信號,其余的節點在該時刻都只能接收。
-
mcu
+關注
關注
146文章
17148瀏覽量
351186 -
CAN
+關注
關注
57文章
2754瀏覽量
463698 -
CANFD
+關注
關注
0文章
58瀏覽量
4945
發布評論請先 登錄
相關推薦
評論