一、簡介
CAN是一種串行通信協議,CAN控制器根據兩根線上的電位差來判斷總線電平。總線電平分為顯性電平和隱形電平。發送方通過使總線電平發生變化,將消息發送給接收方。與I2C、SPI等具有時鍾信號的同步通訊方式不同,CAN通訊並不是以時鍾信號來進行同步的, 它是一種異步通訊,只具有CAN_High 和CAN_Low 兩條信號線,共同構成一組差分信號線,以差分信號的形式進行通訊。can協議廣泛應用與工業自動化、船舶、醫療設備、工業設備等方面。下圖為總線拓撲圖:
(1)差分信號
差分信號又稱差模信號,與傳統使用單根信號線電壓表示邏輯的方式有區別,使用差分信號傳輸時,需要兩根信號線, 這兩個信號線的振幅相等,相位相反,通過兩根信號線的電壓差值來表示邏輯0 和邏輯1。見 下圖,它使用了V+與V-信號的差值表達出了圖下方的信號。
相對於單信號線傳輸的方式,使用差分信號傳輸具有如下優點:
-
抗干擾能力強,當外界存在噪聲干擾時,幾乎會同時耦合到兩條信號線上,而接收端只關心兩個信號的差值,所以外界的共模噪聲可以被完全抵消。
-
能有效抑制它對外部的電磁干擾,同樣的道理,由於兩根信號的極性相反,他們對外輻射的電磁場可以相互抵消,耦合的越緊密,泄放到外界的電磁能量越少。
-
時序定位精確,由於差分信號的開關變化是位於兩個信號的交點,而不像普通單端信號依靠高低兩個閾值電壓判斷, 因而受工藝,溫度的影響小,能降低時序上的誤差,同時也更適合於低幅度信號的電路。
由於差分信號線具有這些優點,所以在USB協議、485協議、以太網協議及CAN協議的物理層中,都使用了差分信號傳輸。
(2)CAN協議中的差分信號
CAN協議中對它使用的CAN_High及CAN_Low表示的差分信號做了規定,。以高速CAN協議為例,當表示邏輯1 時(隱性電平) ,CAN_High和CAN_Low線上的電壓均為2.5v, 即它們的電壓差VH-V:sub:L=0V;而表示邏輯0 時(顯性電平) ,CAN_High的電平為3.5V, CAN_Low線的電平為1.5V, 即它們的電壓差為VH-V:sub:L=2V。例如,當CAN收發器 從CAN_Tx線接收到來自CAN控制器的低電平 信號時(邏輯0), 它會使CAN_High輸出3.5V,同時CAN_Low輸出1.5V,從而輸出顯性電平表示邏輯0 。
二、can協議特點
(1)多主控制
在總線空閑時,所有的單元都可開始發送消息(多主控制)。最先訪問總線的單元可獲得發送權(CSMA/CA方式*)。多個單元同時開始發送時,發送高優先級ID消息的單元可獲得發送權。
(2)消息的發送
在CAN協議中,所有的消息都以固定的格式發送。總線空閑時,所有與總線相連的單元都可以開始發送新消息。兩個以上的單元同時開始發送消息時,根據標識符(Identifier 以下稱為ID)決定優先級。ID並不是表示發送的目的地址,而是表示訪問總線的消息的優先級。兩個以上的單元同時開始發送消息時,對各消息ID的每個位進行逐個仲裁比較。仲裁獲勝(被判定為優先級最高〉的單元可繼續發送消息,仲裁失利的單元則立刻停止發送而進行接收工作。
(3)系統的柔軟性
與總線相連的單元沒有類似於“地址”的信息。因此在總線上增加單元時,連接在總線上的其它單元的軟硬件及應用層都不需要改變。
(4)通信速度
根據整個網絡的規模,可設定適合的通信速度。在同一網絡中,所有單元必須設定成統一的通信速度。即使有一個單元的通信速度與其它的不一樣,此單元也會輸出錯誤信號,妨礙整個網絡的通信。不同網絡間則可以有不同的通信速度。
(5)遠程數據請求
可通過發送“遙控幀”請求其他單元發送數據。
(6)錯誤檢測功能·錯誤通知功能·錯誤恢復功能
所有的單元都可以檢測錯誤(錯誤檢測功能)。檢測出錯誤的單元會立即同時通知其他所有單元(錯誤通知功能)。正在發送消息的單元一旦檢測出錯誤,會強制結束當前的發送。強制結束發送的單元會不斷反復地重新發送此消息直到成功發送為止(錯誤恢復功能)。
(7)故障封閉
CAN可以判斷出錯誤的類型是總線上暫時的數據錯誤(如外部噪聲等)還是持續的數據錯誤(如單元內部故障、驅動器故障、斷線等)。由此功能,當總線上發生持續數據錯誤時,可將引起此故障的單元從總線上隔離出去。
(8)連接
CAN總線是可同時連接多個單元的總線。可連接的單元總數理論上是沒有限制的。但實際上可連接的單元數受總線上的時間延遲及電氣負載的限制。降低通信速度,可連接的單元數增加;提高通信速度,則可連接的單元數減少。
三、CAN協議的基本概念
CAN協議如表3所示涵蓋了ISO規定的OSI*基本參照模型中的傳輸層、數據鏈路層及物理層。
四、ISO11898和ISO11519-2的不同點
CAN收發器根據兩根總線(CAN_High和CAN_Low)的電位差來判斷總線電平。總線電平分為顯性電平和隱性電平兩種。總線必須處於兩種電平之一。總線上執行邏輯上的線“與"時,顯性電平為“0”,隱性電平為“1”。物理層的特征如圖9所示。
五、can和標准規格
六、幀的種類
數據通信是通過以下 5 種類型的幀進行的。
七、錯誤的種類
八、四種工作模式
各個工作模式介紹如下:
-
正常模式
正常模式下就是一個正常的CAN節點,可以向總線發送數據和接收數據。
-
靜默模式
靜默模式下,它自己的輸出端的邏輯0數據會直接傳輸到它自己的輸入端,邏輯1可以被發送到總線,所以它不能向總線發送顯性位(邏輯0),只能發送隱性位(邏輯1)。輸入端可以從總線接收內容。由於它只可發送的隱性位不會強制影響總線的狀態,所以把它稱為靜默模式。這種模式一般用於監測,它可以用於分析總線上的流量,但又不會因為發送顯性位而影響總線。
-
回環模式
回環模式下,它自己的輸出端的所有內容都直接傳輸到自己的輸入端,輸出端的內容同時也會被傳輸到總線上,即也可使用總線監測它的發送內容。輸入端只接收自己發送端的內容,不接收來自總線上的內容。使用回環模式可以進行自檢。
-
回環靜默模式
回環靜默模式是以上兩種模式的結合,自己的輸出端的所有內容都直接傳輸到自己的輸入端,並且不會向總線發送顯性位影響總線,不能通過總線監測它的發送內容。輸入端只接收自己發送端的內容,不接收來自總線上的內容。這種方式可以在“熱自檢”時使用,即自我檢查的時候,不會干擾總線。
以上說的各個模式,是不需要修改硬件接線的,例如,當輸出直接連輸入時,它是在STM32芯片內部連接的,傳輸路徑不經過STM32的CAN_Tx/Rx引腳,更不經過外部連接的CAN收發器,只有輸出數據到總線或從總線接收的情況下才會經過CAN_Tx/Rx引腳和收發器。