CAN總線基礎知識(三)

1.CAN協議

1.1 幀類型

通訊時使用下面5個類型的幀:

    數據幀

    遙控幀

    錯誤幀

    過載幀

    幀間空隙

    在所有這些幀中,數據幀和遙控幀由用戶設置,而其它幀則由CAN硬件設置。

    數據和遙控幀有兩種格式:標準和擴展格式。標準格式有11bit的ID,而擴展格式則是29bit的ID。

    每個幀的用處見表6,每個幀的結構見圖10到圖14

表6 幀類型和每種類型幀的作用





2.2 數據幀

數據幀由發送單元使用,用來發送信息給接收單元,這是用戶操作的基本幀。

數據幀有7個域組成。圖15顯示了數據幀的結構。

(1)幀開始(SOF):這個域表示數據幀的開始。

(2)仲裁域:這個域表示一個幀的優先級

(3)控制域:這個域表示保留位和數據字節數

(4)數據域:這是數據內容,0-8個字節的數據能被髮送

(5)CRC域:這個域用於檢查幀的傳輸錯誤。

(6)ACK域:是對幀已經被正常接收的一個證實。

(7)幀結束:指示數據幀結束


 

(1)幀開始(SOF),對標準的或擴展的格式都是一樣的。它指示一幀的開始,由1bit的顯性位組成。


    顯性電平和隱性電平:

    總線上的電平有顯性電平和隱性電平兩種。

    總線上執行邏輯上的線“與”時,顯性電平的邏輯值爲“0”,隱性電平爲“1”。

    “顯性”具有“優先”的意味,只要有一個單元輸出顯性電平,總線上即爲顯性電平,並且,“隱性”具有“包容”的意味,只有所有的單元都輸出隱性電平,總線上才爲隱性電平。(顯性電平比隱性電平更強)

 

(2)仲裁域,這個域表示數據的優先級別。這個域的結構,對標準和擴展的格式是有差別的。


注1:關於ID:

    標準格式的ID有11bit,從ID28到ID18被依次發送,禁止高7位全爲隱性。(禁止設定:ID=1111111xxxx)。這樣總共有(2048-16)個ID能被使用。

    擴展格式的ID有29個bit。基本ID從ID28到ID18,擴展ID由ID17到ID0表示,基本ID和標準格式ID相同,禁止高7bit全都爲隱性,(禁止設定:基本ID=1111111xxxx)。這樣總共有(2048-16)個ID能被使用。

    在任何情況下,總線上不可能有多個設備在同一時刻使用同一個ID傳輸數據幀。

(3)控制域,佔6個bit,指示要傳輸信息的數據字節數,這個域的結構,對標準和擴展的格式是有差別的。如圖18所示


    注1:保留位(r0,r1),保留位必須以顯性電平傳送,然而,在接收側可以接收顯性、隱性集任意組合的電平。

    注2:數據長度碼(DLC),數據長度碼與數據的字節對應關係見表7所示。數據的字節數必須是0-8個字節,但接收方對DLC=9-15的情況並不視爲錯誤。


(4)數據域,對標準的或擴展的格式都是一樣的。這個域是傳輸的數據,可以是0到8個字節,字節數載控制域中指明。數據輸出開始於MSB。如圖19所示:


(5)CRC域,對標準的或擴展的格式都是一樣的。這個域用來檢查幀是否有傳輸錯誤,它由15bit CRC碼和一個bitCRC定界符(delimiter)(separating bit分隔bit)


    CRC的產生方法是採用下面的多項式:,CRC的計算範圍是SOF、仲裁域、控制域、數據域。在接收側,會對接收到的數據幀的這些域進行CRC計算,如果計算結果與收到的CRC不一致,則表明存在傳輸錯誤。

(6)ACK域,是對一幀已被正常接收的一個確認信號,由2個bit組成,一個是ACK的slot,一個是ACK的定界符(delimiter),如圖21所示:


    注1:發送單元的ACK域,發送單元以隱性bit發送ACK slot和ACK 的delimiter。

    注2:接收單元的ACK域,正確接收到信息的接收單元在接收幀的ACK slot裏發送一個顯性bit,以通知發送單元其已經正確接收完畢,這又稱“sending ACK”或“returning ACK”。

“Returning an ACK”:

    所有接收單元只要不是處於bus-off或休眠狀態,只有正確接收信息的單元才能發送ACK。發送單元並不發送ACK。如果總線上除了發送單元,沒有其它單元能接收信息,則No ACK被返回。爲了通訊的建立,除了發送單元外,至少需要有一個單元能夠接收信息。如果總線上有2個或更多個單元能接收到信息,如果它們中任意一個正常接收到信息,則會有ACK被返回。

(7)幀結束,指示一幀結束,由7個隱性位組成。如圖22



1.3 遙控幀

    遙控幀是接收單元請求發送單元發送一個信息,遙控幀有6個域組成。如圖23顯示的那樣,除了沒有數據域外其它與數據幀的結構是一樣的。

(1) 幀開始(SOF):這個域表示數據幀的開始。

(2) 競爭域:這個域表示數據的優先級,具有同樣ID的數據幀被請求。

(3) 控制域:這個域表示保留位和數據字節數

(4) CRC域:這個域用於檢查幀的傳輸錯誤。

(5) ACK域:是對幀已經被正常接收的一個證實。

(6) 幀結束:指示遙控幀的結束


 

遙控幀和數據幀:

  • 數據幀和遙控幀之間的不同
  1. 遙控幀沒有數據域,在仲裁域裏的RTR位是隱性電平,而數據幀RTR則爲顯性的。
  2. 沒有數據的數據幀與遙控幀可以通過RTR爲來區分
  • 遙控幀沒有數據域,其數據長度碼用來幹什麼?
  1. 遙控幀的數據長度碼的值表示對應請求的數據幀的數據長度碼。
  • 沒有數據域的數據幀用來幹什麼?
  1. 例如,數據幀可以被各單元用來作爲週期連接確認/應答,或者仲裁域本身帶有實質性信息。

1.4 錯誤幀

    這個幀用來通知在傳輸期間發生了一個錯誤,錯誤幀由一個錯誤標誌和一個錯誤定界符組成,錯誤幀由CAN的硬件來發送。圖24顯示了錯誤幀的結構。

     (1) 錯誤標誌:有2種錯誤標誌類型:主動錯誤和被動錯誤標誌

      a)主動錯誤標誌:6個顯性位

      b) 被動錯誤標誌:6個隱性位

     (2) 錯誤定界符:由8個隱性位組成。


    注1:錯誤標誌重疊:取決於連接到總線上的各單元檢測出錯誤的時間,錯誤標誌可能一個重疊在另一個上,總共可達12bit長度。

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

    注3:被動錯誤標誌:處於被動錯誤狀態的單元檢測出錯誤時輸出的錯誤標誌。

1.5 過載幀

    這個幀被接收單元用來通知還沒有準備好接收幀。它由一個過載標誌和一個過載定界符組成。圖25顯示了錯誤幀的結構。


    (1) 過載標誌:由6個顯性位組成,過載標誌與錯誤幀的主動錯誤標誌具有相同的結構。

    (2) 過載定界符:由8個隱性位組成,過載定界符與錯誤幀的錯誤定界符具有相同的結構。

    注1:錯誤標誌重疊:向錯誤標誌一樣,取決於時間,過載標誌可能一個重疊在另一個上,總共可達12bit長度。

1.6 幀間間隔

    這個幀用來隔開數據幀和遙控幀。數據和遙控幀可通過插入幀間間隔與前面傳輸的任何幀(數據幀、遙控幀、錯誤幀、過載幀)分開。

過載幀和錯誤幀前不能插入幀間間隔。如圖26所示。


(1)間隔:由3個隱性位組成。在間隔期間如果檢測到顯性電平,則必須發送過載幀,然而,如果間隔的第3bit是顯性電平,間隔被認爲是SOF

(2)總線空閒:是隱性電平,長度沒有限制(它可以是0bit長)。當總線處於這種狀態的時候,總線被認爲是自由空閒的,任何單元都可以啓動發送信息。

(3)暫停傳輸(傳輸暫停期):有8個隱性位組成。只在處於被動錯誤狀態的單元剛發送一個消息後的幀間隔中包含的段。

1.7 優先級的決定

    在總線空閒狀態,最先開始發送消息的單元獲得發送權。

    多個單元同時開始發送時,各發送單元從仲裁域的第一位開始進行仲裁。連續輸出顯性電平最多的單元可繼續發送。丟失競爭的單元在下一bit進入接收操作。

    仲裁的過程如圖27所示。


    (1)數據幀和遙控幀的優先級

    具有相同 ID 的數據幀和遙控幀在總線上競爭時,仲裁段的最後一位(RTR)爲顯性位的數據幀具有優先權,可繼續發送。

    數據幀和遙控幀的仲裁過程如圖28所示。


(2)標準格式和擴展格式的優先級

    標準格式 ID 與具有相同ID 的遙控幀或者擴展格式的數據幀在總線上競爭時,標準格式的RTR 位爲顯性位的具有優先權,可繼續發送。

    標準格式和擴展格式的仲裁過程如圖29所示。

1.8 位填充

    位填充是一種週期性重同步收/發操作的功能,爲了防止接收節點間時序由於累積而導致的錯誤,如果5個bit持續了同樣的電平,則添加1個bit的反向數據位。

    如圖30顯示的位填充機制:


(1)發送單元的操作

    在發送數據幀和遙控幀的時候,SOF-CRC段間的數據,相同電平如果持續5bit,在下一bit(第6bit)則要插入1bit與前5bit反向的電平。

(2)接收單元的操作

    在接收數據幀和遙控幀的時候,SOF-CRC段間的數據,相同電平如果持續5bit,需要刪除下一bit(第6bit)再接收。如果這第6bit的電平與前5bit相同,則被視爲錯誤,且發送錯誤幀。

1.9 錯誤的種類

    有5種類型的錯誤,可能有2個或更多的錯誤同時發生:

  • 位錯誤
  • 填充錯誤
  • CRC錯誤
  • 格式錯誤
  • ACK錯誤

    表8列出了這些錯誤的種類、內容、錯誤檢測幀和檢測單元。

  • 位錯誤由向總線上輸出數據幀、遙控幀、錯誤幀、過載幀的單元和輸出ACK的單元、輸出錯誤的單元來檢測。
  • 在仲裁段輸出隱性電平,但檢測出顯性電平時,將被視爲仲裁失利,而不是位錯誤。
  • 在仲裁段作爲填充位輸出隱性電平時,但檢測出顯性電平時,將不視爲位錯誤,而是填充錯誤。
  • 發送單元在ACK 段輸出隱性電平,但檢測到顯性電平時,將被判斷爲其它單元的ACK 應答,而非位錯誤。
  • 輸出被動錯誤標誌(6 個位隱性位)但檢測出顯性電平時,將遵從錯誤標誌的結束條件,等待檢測出連續相同6 個位的值(顯性或隱性),並不視爲位錯誤。

(2) 格式錯誤

  • 即使接收單元檢測出EOF(7 個位的隱性位)的最後一位(第8 個位)爲顯性電平,也不視爲格式錯誤。
  • 即使接收單元檢測出數據長度碼(DLC)中9∼15 的值時,也不視爲格式錯誤。

1.10 錯誤幀的輸出時序

    檢測到發生錯誤的單元輸出一個錯誤標誌,以通知其它單元。

    處於主動錯誤狀態的單元輸出的錯誤標誌爲主動錯誤標誌;處於被動錯誤狀態的單元輸出的錯誤標誌爲被動錯誤標誌。

    發送單元發送完錯誤幀之後,將再次發送數據幀或遙控幀。

    錯誤標誌輸出時序如表9:

1.11 位時序

    在沒有重新同步情況下,發送單元每秒傳輸的位數稱之爲位速率。1位由下面4個段組成。

  • 同步段(SS)
  • 傳播時間段(PTS)
  • 相位緩衝段1(PBS1)
  • 相位緩衝段2(PBS2)

    這些段又由稱之爲Time Quantum(以下稱爲Tq)的最小時間單位構成。

    1位分爲4個段,每個段由若干個Tq構成,這稱爲位時序。

    1位由多少個Tq構成、每個段由多少個Tq構成等是可以設定的。通過設置bit時序。使得可以設定一個採樣點以使總線上多個單元可同時採樣,所謂採樣點就是在這一時刻總線上的電平被鎖存,這個鎖存的電平作爲位的值。採樣點的位置在PBS1的結束處。

    表10描述了各段的作用和Tq 數。1個位的構成如圖31所示。

段名稱

段的作用

Tq數

同步段(SS)

多個連接在總線上的單元通過此段實現時序的定時調整,以便同步進行接收和發送的工作。

隱性電平到顯性電平或顯性電平到隱性電平變化的邊沿被期望出現在本段。

1

8-25

傳播時間段(PTS)

用於吸收網絡上的物理延遲的段。包括髮送單元的輸出延遲、總線上信號的傳播延遲、接收單元的輸入延遲。

這個段的時間是以上延遲時間累加和的兩倍。

1-8

相位緩衝段1(PBS1)

當信號邊沿不能出現在SS 段時,此段用來矯正誤差。

由於各單元以各自獨立的時鐘來工作,細微的時鐘誤差都會累積起來,PBS 段可用於吸收此誤差。

爲了吸收一個時鐘誤差,在SJW設置的範圍內增減PBS1和PBS2,PBS1和PBS2越大,允許誤差越大,但是通訊速度會降低。

1-8

相位緩衝段2(PBS2)

PBS1或IPT中較大者(見注1和2)

重新同步跳轉寬度(SJW)

因時鐘頻率偏差、傳送延遲等原因,某些單元可能會失去同步。SJW是所能校正的最大失去同步的寬度。

1-4*PBS1

    注1:IPT代表信息處理時間,是以採樣點作爲起始的時間段,用於計算後續位的位電平。這是硬件在一個採樣點後立刻改變位的電平所必須要的。這個時間等於或小於2Tq,。

    注2:因爲採樣點是處於PBS1結束處,所以IPT和PBS2重疊。當IPT = 2Tq時,PBS2不可能選爲1,因此,PBS2必須是2到8Tq。

    注3:重新同步的結果使相位緩衝段1增長,或使相位緩衝段2 縮短。相位緩衝段加長或縮短的數量有一個上限,此上限由SJW(重新同步跳轉寬度)給定。重新同步跳轉寬度應設置於1和最小值之間(此最小值爲4*PBS1)。

    可以從一位值轉換到另一位值的過渡過程得到時鐘信息。這裏有一個屬性,即:只有後續位的一固定最大數值才具有相同的數值。這個屬性使總線單元在幀期間重新同步於位流成爲可能。可用於重新同步的兩個過渡過程之間的最大的長度爲29個位時間。

 

1.12 同步是如何獲得的?

    CAN總線的通訊是採用NRZ(Non-Return to Zero,非歸0)碼,數據本身並不攜帶時鐘信息,也即在每一位的開始或結束沒有同步信號,發送單元以位時序同步的方式開始發送幀數據,接收單元根據總線電平的變化進行同步並進行接收工作。

    然而,發送器和接收器之間由於彼此的時鐘誤差或傳輸路徑的相位誤差可能會失去同步關係,因此接收單元在接收幀的時候,必須通過硬件同步或重新同步調整它的操作時序。

1.13 硬件同步

    在總線空閒狀態時,接收單元檢測到SOF,就會執行這個同步調整過程。“隱式”電平跳變到“顯式”電平的邊緣的時間點被認爲是SS,而不管SJW的值

    圖32顯示了硬件同步機制。


  • 如果沿出現在SS裏,沿的相位誤差e=0;
  • 如果沿位於採集點(PBS1結束之前)之前,e>0;
  • 如果沿位於採集點之後,e<0;

1.14 重新同步機制

    在接收過程中檢測到總線電平發生了改變時執行重新同步操作。

    每當檢測到一個邊沿(總線電平的改變),收發單元根據SJW值通過增加PBS1段或減少PBS2段,來調整同步。但,如果發生了超出SJW值的誤差時,最大調整量不能超過SJW值。

    圖33顯示了重新同步機制。


1.15 調整同步的規則

    硬件同步和再同步的執行遵從如下規則:

    1) 在1個位時間裏(或者說在2個採樣點之間),只允許一個同步(或者說只進行一次同步調整)。

    2) 只有當採樣點之前的總線電平和邊沿後的總線電平不同時,該邊沿才能用於調整同步。

    3) 如果出現隱性電平到顯性電平變化的邊沿,且條件(1)和(2)滿足,將進行同步。

    4) 如果在幀間間隙期間發生隱性電平到顯性電平的信號邊沿(除了間隙裏的第一位),則總會執行硬件同步。

    5) 如果發生從所有其它隱性電平到顯性電平的信號邊沿,則執行再同步。

    6) 如果發送單元自身輸出的顯性電平被檢測到有延遲,則不執行再同步。

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