CAN總線(物理層、協議層)

簡介

CAN是控制器局域網絡(Controller Area Network,CAN)的簡稱,是由以研發和生產汽車電子產品著稱的德國BOSCH公司開發的,並最終成爲國際標準(ISO11898),是國際上應用最廣泛的現場總線之一。在北美和西歐,CAN總線協議已經成爲汽車計算機控制系統和嵌入式工業控制局域網的標準總線,並且擁有以CAN爲底層協議專爲大型貨車和重工機械車輛設計的J1939協議。
現在,CAN 的高性能和可靠性已被認同,並被廣泛地應用於工業自動化、船舶、醫療設備、工業設備等方面。

一 can總線示例:

1

二 總線拓撲:

CAN 控制器根據兩根線上的電位差來判斷總線電平。總線電平分爲顯性電平(0)和隱性電平(1),二者必居其一。發送方通過使總線電平發生變化,將消息發送給接收方。
1

物理層

CAN通訊是異步通訊,只有CAN_High和CAN_Low兩條信號線,共同構成一組差分信號線,以差分信號的形式進行通訊。
一 閉環總線網絡:速度快,距離短,它的總線最大長度爲40m,通訊速度最高1Mbps,總線兩端各有一個120歐的電阻。
1
二 開環總線網絡:低速,遠距離,它的最大傳輸距離爲1km,最高的通訊速率爲125Kbps,兩根總線獨立的,兩根總線各串聯有一個2.2千歐的電阻。

2

三 通訊節點

  • can總線上可以掛載多個通訊節點,節點之間的信號進過總線傳輸,實現節點間通訊。由於 CAN 通訊協議不對節點進行地址編碼,而是對數據內容進行編碼的,所以網絡中的節點個數理論上不受限制,只要總線的負載足夠即可,可以通過中繼器增強負載。
  • CAN 通訊節點由一個 CAN 控制器及 CAN 收發器組成,控制器與收發器之間通過CAN_Tx 及CAN_Rx 信號線相連,收發器與 CAN 總線之間使用 CAN_High 及 CAN_Low信號線相連。其中 CAN_Tx 及 CAN_Rx 使用普通的類似 TTL 邏輯信號,而 CAN_High 及CAN_Low 是一對差分信號線,使用比較特別的差分信號,下一小節再詳細說明。
  • 當 CAN 節點需要發送數據時,控制器把要發送的二進制編碼通過 CAN_Tx 線發送到收發器,然後由收發器把這個普通的邏輯電平信號轉化成差分信號,通過差分線CAN_High 和 CAN_Low 線輸出到 CAN 總線網絡。而通過收發器接收總線上的數據到控制器時,則是相反的過程,收發器把總線上收到的 CAN_High 及 CAN_Low 信號轉化成普通的邏輯電平信號,通過 CAN_Rx 輸出到控制器中。

四 差分信號
差分信號又稱差模信號,與傳統使用單根信號線電壓表示邏輯的方式有區別,使用差分信號傳輸時,需要兩根信號線,這兩個信號線的振幅相等,相位相反,通過兩根信號線的電壓差值來表示邏輯 0 和邏輯 1。

1
相對於單信號線,差分信號傳輸的優點:

  • 抗干擾能力強,當外界存在噪聲干擾時,幾乎會同時耦合到兩條信號線上,而接收端只關心兩個信號的差值,所以外界的共模噪聲可以被完全抵消
  • 能有效抑制它對外部的電磁干擾,同樣的道理,由於兩根信號的極性相反,他們對外輻射的電磁場可以相互抵消,耦合的越緊密,泄放到外界的電磁能量越少。
  • 時序定位精確,由於差分信號的開關變化是位於兩個信號的交點,而不像普通單端信號依靠高低兩個閾值電壓判斷,因而受工藝,溫度的影響小,能降低時序上的誤差,同時也更適合於低幅度信號的電路。
    由於差分信號線具有這些優點,所以在 USB 協議、485 協議、以太網協議及 CAN 協議的物理層中,都使用了差分信號傳輸。

五 CAN協議中的差分信號
CAN 協議中對它使用的 CAN_High 及 CAN_Low 表示的差分信號做了規定。高速 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。
2
3
在 CAN 總線中,必須使它處於隱性電平(邏輯 1)或顯性電平(邏輯 0)中的其中一個狀態。假如有兩個 CAN 通訊節點,在同一時間,一個輸出隱性電平,另一個輸出顯性電平,類似 I2C 總線的“線與”特性將使它處於顯性電平狀態,顯性電平的名字就是這樣來的,即可以認爲顯性具有優先的意味
由於 CAN 總線協議的物理層只有 1 對差分線,在一個時刻只能表示一個信號,所以對通訊節點來說,CAN 通訊是半雙工的,收發數據需要分時進行。在 CAN 的通訊網絡中,因爲共用總線,在整個網絡中同一時刻只能有一個通訊節點發送信號,其餘的節點在該時刻都只能接收。

CAN的特點

一 多主控制

  • 在總線空閒時,所有的單元都可開始發送消息(多主控制)。
  • 最先訪問總線的單元可獲得發送權(CSMA/CA 方式*1)。
  • 多個單元同時開始發送時,發送高優先級 ID 消息的單元可獲得發送權。

二 消息的發送

  • 在 CAN 協議中,所有的消息都以固定的格式發送。
  • 總線空閒時,所有與總線相連的單元都可以開始發送新消息。兩個以上的單元同時開始發送消息時,根據標識符(Identifier 以下稱爲 ID)決定優先級。
  • ID 並不是表示發送的目的地址,而是表示訪問總線的消息的優先級。
  • 兩個以上的單元同時開始發送消息時,對各消息 ID 的每個位進行逐個仲裁比較。
  • 仲裁獲勝(被判定爲優先級最高)的單元可繼續發送消息,仲裁失利的單元則立刻停止發送而進行接收工作。

三 系統的柔軟性

  • 與總線相連的單元沒有類似於“地址”的信息。因此在總線上增加單元時,連接在總線上的其它單元的軟硬件及應用層都不需要改變。

四 通信速度

  • 根據整個網絡的規模,可設定適合的通信速度。
  • 在同一網絡中,所有單元必須設定成統一的通信速度。即使有一個單元的通信速度與其它的不一樣,此單元也會輸出錯誤信號,妨礙整個網絡的通信。不同網絡間則可以有不同的通信速度。

五 遠程數據請求

  • 可通過發送“遙控幀” 請求其他單元發送數據。

六 錯誤檢測功能·錯誤通知功能·錯誤恢復功能

  • 所有的單元都可以檢測錯誤(錯誤檢測功能)。
  • 檢測出錯誤的單元會立即同時通知其他所有單元(錯誤通知功能)。
  • 正在發送消息的單元一旦檢測出錯誤,會強制結束當前的發送。強制結束髮送的單元會不斷反覆地重新發送此消息直到成功發送爲止(錯誤恢復功能)。

七 故障封閉

  • CAN 可以判斷出錯誤的類型是總線上暫時的數據錯誤(如外部噪聲等)還是持續的數據錯誤(如單元內部故障、驅動器故障、斷線等)。
  • 當總線上發生持續數據錯誤時,可將引起此故障的單元從總線上隔離出去。

八 連接

  • CAN 總線是可同時連接多個單元的總線。
  • 實際上可連接的單元數受總線上的時間延遲及電氣負載的限制。降低通信速度,可連接的單元數增加;提高通信速度,則可連接的單元數減少。

協議層

一 位時序的分解

  • 爲了實現位同步,CAN 協議把每一個數據位的時序分解成 SS 段、PTS 段、PBS1 段、PBS2 段,這四段的長度加起來即爲一個 CAN 數據位的長度。分解後最小的時間單位是 Tq,而一個完整的位由 8~25 個 Tq 組成。爲方便表示,下圖中的高低電平直接代表信號邏輯 0 或邏輯 1(不是差分信號)。
  • 下圖中表示的 CAN 通訊信號每一個數據位的長度爲 19Tq,其中 SS 段佔 1Tq,PTS 段 佔 6Tq,PBS1 段佔 5Tq,PBS2 段佔 7Tq。信號的採樣點位於 PBS1 段與 PBS2 段之間,通過控制各段的長度,可以對採樣點的位置進行偏移,以便準確地採樣。
    1
  1. SS 段(SYNC SEG)
    SS 譯爲同步段,若通訊節點檢測到總線上信號的跳變沿被包含在 SS 段的範圍之內,則表示節點與總線的時序是同步的,當節點與總線同步時,採樣點採集到的總線電平即可被確定爲該位的電平。SS 段的大小固定爲 1Tq。
  2. PTS 段(PROP SEG)
    PTS 譯爲傳播時間段,這個時間段是用於補償網絡的物理延時時間。是總線上輸入比較器延時和輸出驅動器延時總和的兩倍。PTS 段的大小可以爲 1~8Tq。
  3. PBS1 段(PHASE SEG1),
    PBS1 譯爲相位緩衝段,主要用來補償邊沿階段的誤差,它的時間長度在重新同步的時候可以加長。PBS1 段的初始大小可以爲 1~8Tq。
  4. PBS2 段(PHASE SEG2)
    PBS2 這是另一個相位緩衝段,也是用來補償邊沿階段誤差的,它的時間長度在重新同步時可以縮短。PBS2 段的初始大小可以爲 2~8Tq。

二 幀的種類及用途

幀用途
數據幀 用於發送單元向接收單元傳送數據的幀。
遙控幀 用於接收單元向具有相同 ID 的發送單元請求數據的幀。
錯誤幀 用於當檢測出錯誤時向其它單元通知錯誤的幀。
過載幀 用於接收單元通知其尚未做好接收準備的幀。
幀間隔 用於將數據幀及遙控幀與前面的幀分離開來的幀。

三 數據幀的結構
數據幀是在CAN通訊中最主要、最複雜的報文。結構如下

1
數據幀以一個顯性位(邏輯 0)開始,以 7 個連續的隱性位(邏輯 1)結束,在它們之間,分別有仲裁段、控制段、數據段、CRC 段和 ACK 段

  • 幀起始
    SOF 段(Start Of Frame),譯爲幀起始,幀起始信號只有一個數據位,是一個顯性電平,它用於通知各個節點將有數據傳輸,其它節點通過幀起始信號的電平跳變沿來進行硬同步。

  • 仲裁段
    當同時有兩個報文被髮送時,總線會根據仲裁段的內容決定哪個數據包能被傳輸,這也是它名稱的由來。
    仲裁段的內容主要是數據段的ID信息,數據幀有標準格式和擴展格式兩種,區別在於ID信息的長度。ID信息決定着數據幀發送的優先級,也決定着其他節點是否會接受這個數據幀。
    報文的優先級,是通過對 ID 的仲裁來確定的。根據前面對物理層的分析我們知道如果總線上同時出現顯性電平和隱性電平,總線的狀態會被置爲顯性電平,CAN 正是利用這個特性進行仲裁。
    如下圖兩個節點同時競爭CAN總線佔有權,很明顯ID信息越低優先級越高。
    2
    仲裁段除了ID信息外,還有RTR、IDE和SSR位:
    1、RTR位(Remote Transmission Request Bit),譯作遠程傳輸請求位,它是用於區分數據幀和遙控幀的,當它爲顯性電平時表示數據幀,隱性電平時表示遙控幀。
    2、IDE 位(Identifier Extension Bit),譯作標識符擴展位,它是用於區分標準格式與擴展格式,當它爲顯性電平時表示標準格式,隱性電平時表示擴展格式。
    3、SRR 位(Substitute Remote Request Bit),只存在於擴展格式,它用於替代標準格式中的RTR 位。由於擴展幀中的 SRR 位爲隱性位,RTR 在數據幀爲顯性位,所以在兩個 ID相同的標準格式報文與擴展格式報文中,標準格式的優先級較高。

  • 控制段
    在控制段中的 r1 和 r0 爲保留位,默認設置爲顯性位。它最主要的是 DLC 段(Data Length Code),譯爲數據長度碼,它由 4 個數據位組成,用於表示本報文中的數據段含有多少個字節,DLC 段表示的數字爲 0~8。

  • 數據段
    數據段爲數據幀的核心內容,它是節點要發送的原始信息,由 0~8 個字節組成,MSB先行。

  • CRC段
    爲了保證報文的正確傳輸,CAN 的報文包含了一段 15 位的 CRC 校驗碼,一旦接收節點算出的 CRC 碼跟接收到的 CRC 碼不同,則它會向發送節點反饋出錯信息,利用錯誤幀請求它重新發送。CRC 部分的計算一般由 CAN 控制器硬件完成,出錯時的處理則由軟件控制最大重發數。
    在 CRC 校驗碼之後,有一個 CRC 界定符,它爲隱性位,主要作用是把 CRC 校驗碼與後面的 ACK 段間隔起來。

  • ACK段
    ACK 段包括一個 ACK 槽位,和 ACK 界定符位。類似 I2C 總線,在 ACK 槽位中,發送節點發送的是隱性位,而接收節點則在這一位中發送顯性位以示應答。在 ACK 槽和幀結束之間由 ACK 界定符間隔開。

  • 幀結束
    EOF 段(End Of Frame),譯爲幀結束,幀結束段由發送節點發送的 7 個隱性位表示結束。


以下不展開描述
四 遙控幀
1
接收單元向發送單元請求發送數據所用的幀。遙控幀由 6 個段組成。遙控幀沒有數據幀的數據段。

  • 幀起始(SOF)
    表示幀開始的段。
  • 仲裁段
    表示該幀優先級的段。可請求具有相同 ID 的數據幀。
  • 控制段
    表示數據的字節數及保留位的段。
  • CRC 段
    檢查幀的傳輸錯誤的段。
  • ACK 段
    表示確認正常接收的段。
  • 幀結束
    表示遙控幀結束的段。
  1. 數據幀和遙控幀的不同
    遙控幀的 RTR 位爲隱性位,沒有數據段。
    沒有數據段的數據幀和遙控幀可通過 RTR 位區別開來。
  2. 遙控幀沒有數據段,數據長度碼該如何表示?
    遙控幀的數據長度碼以所請求數據幀的數據長度碼錶示。
  3. 沒有數據段的數據幀有何用途?
    例如,可用於各單元的定期連接確認/應答、或仲裁段本身帶有實質性信息的情況下。

五 錯誤幀
1
用於在接收和發送消息時檢測出錯誤通知錯誤的幀。錯誤幀由錯誤標誌和錯誤界定符構成。

  • 錯誤標誌
    錯誤標誌包括主動錯誤標誌和被動錯誤標誌兩種。
    主動錯誤標誌:6 個位的顯性位。
    被動錯誤標誌:6 個位的隱性位。
  • 錯誤界定符
    錯誤界定符由 8 個位的隱性位構成。

*1 主動錯誤標誌
處於主動錯誤狀態的單元檢測出錯誤時輸出的錯誤標誌。
*2 被動錯誤標誌
處於被動錯誤狀態的單元檢測出錯誤時輸出的錯誤標誌。

六 過載幀
`
過載幀是用於接收單元通知其尚未完成接收準備的幀。過載幀由過載標誌和過載界定符構成。
過載幀的構成如圖 26 所示。

  • 過載標誌
    6 個位的顯性位。
    過載標誌的構成與主動錯誤標誌的構成相同。
  • 過載界定符
    8 個位的隱性位。
    過載界定符的構成與錯誤界定符的構成相同。
    七 幀間隔
    1

幀間隔是用於分隔數據幀和遙控幀的幀。數據幀和遙控幀可通過插入幀間隔將本幀與前面的任何幀(數據幀、遙控幀、錯誤幀、過載幀)分開。
過載幀和錯誤幀前不能插入幀間隔。

  • 間隔
    3 個位的隱性位。
  • 總線空閒
    隱性電平,無長度限制(0 亦可)。
    本狀態下,可視爲總線空閒,要發送的單元可開始訪問總線。
  • 延遲傳送(發送暫時停止)
    8 個位的隱性位。
    只在處於被動錯誤狀態的單元剛發送一個消息後的幀間隔中包含的段。

待續。。。


參考:瑞薩電子 CAN 入門書下載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章