在之前的博文中分享過一系列一文搞懂:SPI協議、I2C協議、PID算法、Modbus協議等文章,也考慮過是否可以出一篇介紹CAN總線協議的文章,但是在之后的學習研究中,發覺CAN總線協議比較龐大和復雜,做為剛剛進入汽車電子行業的開發小白,一篇文章難以講解清晰,所以決定在汽車電子專欄中連載分享關于CAN總線協議的相關知識。
由于本人也處于學習和研究階段,如果對CAN總線協議有理解不到位的地方,還請各位大佬在文末留言指正一二。
CAN總線簡介
CAN總線協議(Controller Area Network),控制器局域網總線,是德國BOSCH(博世)公司研發的一種串行通訊協議總線,它可以使用雙絞線來傳輸信號,是世界上應用最廣泛的現場總線之一。
CAN通訊協議標準(ISO-11898:2003)介紹了設備間信息是如何傳遞以及符合開放系統互聯參考模型(OSI)的哪些分層項。實際CAN通訊是在連接設備的物理介質中進行,物理介質的特性由模型中的物理層定義。ISO11898體系結構定義七層,OSI模型中的最低兩層作為數據鏈路層和物理層,如下圖所示:
LLC用于接收濾波、超載通告、回復管理;
MAC用于數據封裝/拆封、幀編碼、媒體訪問管理、錯誤檢測與標定、應答、串轉發/并轉串;
PLS用于位編碼/解碼、位定時、同步;
PMA為收發器特性。
CAN協議主要用于汽車中各種不同元件之間的通信,以此取代昂貴而笨重的配電線束,該協議的健壯性使其同樣適用于自動化和工業環境中。
CAN總線協議距今已經發展40多年,如今,CAN總線已成為汽車(汽車、卡車、公共汽車、拖拉機等)、輪船、飛機、電動汽車電池、機械等的標準配置。
CAN之前的版本:汽車ECU是復雜的點對點布線
1986年:BOSCH(博世)開發了CAN協議作為解決方案
1991年:BOSCH(博世)發布了CAN 2.0(CAN 2.0A:11位,2.0B:29位)
1993年:CAN被采用為國際標準(ISO 11898)
2003年:ISO 11898成為標準系列
2012年:博世發布了CAN FD 1.0
2015年:CAN FD協議標準化(ISO 11898-1)
2016年:CAN物理層,數據速率高達5 Mbit/s,已通過ISO 11898-2標準化
CAN總線具有以下特點:
符合OSI開放式通信系統參考模型;
兩線式總線結構,電氣信號為差分式;
多主控制,在總線空閑時,所有的單元都可開始發送消息,最先訪問總線的單元可獲得發送權;多個單元同時開始發送時,發送高優先級ID消息的單元可獲得發送權;
點對點控制,一點對多點及全局廣播幾種傳送方式接收數據,網絡上的節點可分成不同的優先級,可以滿足不同的實時要求;
采用非破壞性位仲裁總線結構機制,當兩個節點同時向網絡上傳送信息時,優先級低的節點主動停止數據發送,而優先級高的節點可不受影響地繼續傳送數據
消息報文不包含源地址或者目標地址,僅通過標識符表明消息功能和優先級;
基于固定消息格式的廣播式總線系統,短幀結構;
事件觸發型,只有當有消息要發送時,節點才向總線上廣播消息;
可以通過發送遠程幀請求其它節點發送數據;
消息數據長度0~8Byte;
節點數最多可達110個;
錯誤檢測功能。所有節點均可檢測錯誤,檢測錯誤的單元會立即通知其它所有單元;
發送消息出錯后,節點會自動重發;
故障限制,具有自動關閉總線的功能,節點控制器可以判斷錯誤是暫時的數據錯誤還是持續性錯誤,當總線上發生持續數據錯誤時,控制器可將節點從總線上隔離,以使總線上的其他操作不受影響;
通信介質可采用雙絞線、同軸電纜和光導纖維,一般使用最便宜的雙絞線;
理論上,CAN總線用單根信號線就可以通信,但還是配備了第二根導線,第二根導線與第一根導線信號為差分關系,可以有效抑制電磁干擾;
直接通信距離最遠可達10KM(速率4Kbps以下),通信速率最高可達1MB/s(此時距離最長40M);
總線上可同時連接多個節點,可連接節點總數理論上是沒有限制的,但實際可連接節點數受總線上時間延遲及電氣負載的限制。
每幀信息都有CRC校驗及其他檢錯措施,數據錯誤率極低;
廢除了傳統的站地址編碼,取而代之的是對通信數據塊進行編碼。采用這種方法的優點是可使網絡內的節點個數在理論上不受限制,數據塊的標識碼可由11位或29位二進制數組成,因此可以定義211或229個不同的數據塊,這種數據塊編碼方式,還可使不同的節點同時接收到相同的數據,這一點在分步式控制中非常重要。
CAN總線具體以下優勢
CAN節點組成
CAN節點通常由三部分組成:CAN收發器、CAN控制器和MCU。
CAN總線通過差分信號進行數據傳輸,CAN收發器將差分信號轉換為TTL電平信號,或者將TTL電平信號轉換為差分信號,CAN控制器將TTL電平信號接收并傳輸給MCU,如下圖所示:
目前,我們常用的STM32、華大、瑞薩等單片機內部就集成了CAN控制器外設,通過配置就可實現對CAN報文數據的讀取和發送。
CAN總線結構
CAN總線是一種廣播類型的總線,可支持線形拓撲、星形拓撲、樹形拓撲和環形拓撲等。CAN網絡中至少需要兩個節點設備才可進行通信,無法僅向某一個特定節點設備發送消息,發送數據時所有節點都不可避免地接收所有流量。但是,CAN總線硬件支持本地過濾,因此每個節點可以設置對有效的消息做出反應。
線形拓撲是在一條主干總線分出各個節點支線,其優點在于布線施工簡單,接線方便,阻抗匹配規則固定,缺點是拓撲不夠靈活,在一定程度上影響通訊距離,如下圖所示:
星形拓撲是每個節點通過中央設備連到一起,其優點是容易擴展,缺點是一旦中央設備出故障會導致總線集體故障,而且分支線長不同,阻抗匹配復雜,可能需要通過一些中繼器或集線器進行擴展,如下圖所示:
樹形拓撲是節點分支比較多,且分支長度不同,其優點是布線方便,缺點是網絡拓撲復雜,阻抗匹配困難,通訊中極易出現問題,必須加一些集線器設備,如下圖所示:
環形拓撲是將CAN總線頭尾相連,形成環狀,其優點是線纜任意位置斷開,總線都不會出現問題,缺點是信號反射嚴重,無法用于高波特率和遠距離傳輸,如下圖所示:
雖然CAN總線可以支持多種網絡拓撲,但在實際應用中比較推薦使用線形拓撲,且在IOS 11898-2中高速CAN物理層規范推薦也是線形拓撲。
在ISO 11898-2和ISO 11898-3中分別規定了兩種CAN總線結構(在BOSCH CAN2.0規范中,并沒有關于總線拓撲結構的說明)。
ISO 11898-2中定義了通信速率為125Kbps~1Mbps的高速閉環CAN通信標準,當通信總線長度≤40米,最大通信速率可達到1Mbps,高速閉環CAN(高速CAN)通信如下圖所示:
ISO 11898-3中定義了通信速率為10~125Kbps的低速開環CAN通信標準,當傳輸速率為40Kbps時,總線距離可達到1000米。低速開環CAN(低速容錯CAN)通信如下圖所示:
CAN總線物理電氣特性
在CAN總線上,利用CAN_H和CAN_L兩根線上的電位差來表示CAN信號。CAN 總線上的電位差分為顯性電平(Dominant Voltage)和隱性電平(Recessive Voltage),其中顯性電平為邏輯 0,隱性電平為邏輯 1。
高速CAN總線(ISO 11898-2,通信速率為125Kbps~1Mbps)在傳輸顯性(0)信號時,會將 CAN_H端抬向5V高電平,將CAN_L拉向0V低電平。
當傳輸隱性(1)信號時,并不會驅動 CAN_H 或者 CAN_L 端。 顯性信號 CAN_H 和 CAN_L 兩端差分標稱電壓為 2V。 終端電阻在沒有驅動時,將差分標稱電壓降回 0V。顯性信號(0)的共模電壓需要在 1.5V 到 3.5V 之間。隱性信號(1)的共模電壓需要在+/-12V。
低速/容錯CAN(ISO 11898-3,通信速率為10~125Kbps)在傳輸顯性信號(0)時,驅動CANH端抬向5V,將CANL端降向0V。
在傳輸隱性信號(1)時并不驅動CAN 總線的任何一端。在電源電壓VCC為5V時,顯性信號差分電壓需要大于2.3V,隱性信號的差分電壓需要小于0.6V。CAN總線兩端未被驅動時,終端電阻使CAN L端回歸到RTH電壓(當電源電壓VCC為5V時,RTH電壓至少為Vcc-0.3V=4.7V),同時使CAN H端回歸至RTL電壓(RTL電壓最大為0.3V)。兩根線需要能夠承受-27V至40V的電壓而不被損壞。
在高速和低速CAN中從隱性信號向顯性信號過渡的速度更快,因為此時CAN線纜被主動積極地驅動,顯性向隱性的過渡速度主要取決于CAN網絡的長度和導線的電容。
編輯:黃飛
?
評論
查看更多