CAN通讯方式--秉火STM32学习笔记
首先非常感謝秉火團隊為我們提供學習STM32的豐富資料及詳細教程。本筆記僅用作個人學習記錄,以此加深記憶,如感覺有幫助,可感謝支持秉火團隊。
CAN 協議簡介
CAN 是控制器局域網絡(Controller Area Network)的簡稱,它是由研發和生產汽車電子產品著稱的德國BOSCH 公司開發的,并最終成為國際標準(ISO11519),是國際上應用
最廣泛的現場總線之一。
CAN 總線協議已經成為汽車計算機控制系統和嵌入式工業控制局域網的標準總線,并且擁有以CAN 為底層協議專為大型貨車和重工機械車輛設計的J1939 協議。近年來,它具有的高可靠性和良好的錯誤檢測能力受到重視,被廣泛應用于汽車計算機控制系統和環境溫度惡劣、電磁輻射強及振動大的工業環境。
CAN 特點
| 串行通訊 | 半雙工 | 異步通訊 | 高速1M/低速125Kbps | 高速40m/低速1km |
CAN 物理層
與I2C、SPI 等具有時鐘信號的同步通訊方式不同,CAN 通訊并不是以時鐘信號來進行同步的,它是一種異步通訊,只具有CAN_High 和CAN_Low 兩條信號線,共同構成一組差分信號線,以差分信號的形式進行通訊。
1. 閉環總線網絡
CAN 物理層的形式主要有兩種,圖 42-1 中的CAN 通訊網絡是一種遵循ISO11898 標準的高速、短距離“閉環網絡”,它的總線最大長度為40m,通信速度最高為1Mbps,總線的兩端各要求有一個“120 歐”的電阻。
2. 開環總線網絡
下圖是遵循ISO11519-2 標準的低速、遠距離“開環網絡”,它的最大傳輸距離為1km,最高通訊速率為125kbps,兩根總線是獨立的、不形成閉環,要求每根總線上各串聯有一個“2.2 千歐”的電阻。
3. 通訊節點
從CAN 通訊網絡圖可了解到,CAN 總線上可以掛載多個通訊節點,節點之間的信號經過總線傳輸,實現節點間通訊。由于CAN 通訊協議不對節點進行地址編碼,而是對數據內容進行編碼的,所以網絡中的節點個數理論上不受限制,只要總線的負載足夠即可,可以通過中繼器增強負載。
CAN 通訊節點由一個CAN 控制器及CAN 收發器組成,控制器與收發器之間通過CAN_Tx 及CAN_Rx 信號線相連,收發器與CAN 總線之間使用CAN_High 及CAN_Low信號線相連。其中CAN_Tx 及CAN_Rx 使用普通的類似TTL 邏輯信號,而CAN_High 及CAN_Low 是一對差分信號線,使用比較特別的差分信號。
4. 差分信號
差分信號又稱差模信號,與傳統使用單根信號線電壓表示邏輯的方式有區別,使用差分信號傳輸時,需要兩根信號線,這兩個信號線的振幅相等,相位相反,通過兩根信號線的電壓差值來表示邏輯0 和邏輯1。見圖 42-3,它使用了V+與V-信號的差值表達出了圖下方的信號。
相對于單信號線傳輸的方式,使用差分信號傳輸具有如下優點:
- 抗干擾能力強,當外界存在噪聲干擾時,幾乎會同時耦合到兩條信號線上,而接
收端只關心兩個信號的差值,所以外界的共模噪聲可以被完全抵消。 - 能有效抑制它對外部的電磁干擾,同樣的道理,由于兩根信號的極性相反,他們
對外輻射的電磁場可以相互抵消,耦合的越緊密,泄放到外界的電磁能量越少。 - 時序定位精確,由于差分信號的開關變化是位于兩個信號的交點,而不像普通單
端信號依靠高低兩個閾值電壓判斷,因而受工藝,溫度的影響小,能降低時序上
的誤差,同時也更適合于低幅度信號的電路。
由于差分信號線具有這些優點,所以在USB 協議、485 協議、以太網協議及CAN 協議的物理層中,都使用了差分信號傳輸。
5. CAN 協議中的差分信號
CAN 協議中對它使用的CAN_High 及CAN_Low 表示的差分信號做了規定,以高速CAN 協議為例。
當CAN_High 和CAN_Low線上的電壓均為2.5v,即它們的電壓差VH-VL=0V時,表示邏輯1 (隱性電平);
當CAN_High 的電平為3.5V,CAN_Low 線的電平為1.5V,即它們的電壓差為VH-VL=2V時,而表示邏輯0 (顯性電平)。
在CAN 總線中,必須使它處于隱性電平(邏輯1)或顯性電平(邏輯0)中的其中一個狀態。假如有兩個CAN 通訊節點,在同一時間,一個輸出隱性電平,另一個輸出顯性電平,類似I2C 總線的“線與”特性將使它處于顯性電平狀態,顯性電平的名字就是這樣來的,即可以認為顯性具有優先的意味。
由于CAN 總線協議的物理層只有1 對差分線,在一個時刻只能表示一個信號,所以對通訊節點來說,CAN 通訊是半雙工的,收發數據需要分時進行。在CAN 的通訊網絡中,因為共用總線,在整個網絡中同一時刻只能有一個通訊節點發送信號,其余的節點在該時刻都只能接收。
總結
以上是生活随笔為你收集整理的CAN通讯方式--秉火STM32学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ListView的分割线相关属性
- 下一篇: 给幼儿园小朋友看的网络安全扫盲篇