CAN總線

最近在看stm32的通訊部分由於can總線在工業上的應用,我選擇以can總線爲突破口進行學習。實際上在串口通訊所有的協議中,can總線也是我認爲最複雜的一個協議。看了幾天,爲了能夠更加通俗的理解can的原理和stm32中bxcan的配置因此寫此blog。

什麼是can?

CAN是Controller Area Network的縮寫,是ISO國際標準化的串行通信協議,由德國電氣商博世公司在1986年率先提出,現在在歐洲是汽車網絡的標準協議
CAN經ISO標準化後有兩個標準:ISO11898和ISO11519-2其中前者爲125Kbps~1Mbps的高速通信標準,而後者是針對通信速率爲125Kbps以下的低速通信標準。
CAN的通訊因爲差分原理具有很高的可靠性,而協議的確定也增加了這種可靠性。

CAN物理層特徵

CAN 控制器根據CAN_L和CAN_H上的電位差來判斷總線電平。總線電平分爲顯性電平和隱性電平,二者必居其一。發送方通過使總線電平發生變化,將消息發送給接收方。
顯性電平對應邏輯:0
CAN_H和CAN_L之差爲2V左右。
隱性電平對應邏輯:1
CAN_H和CAN_L之差爲0V。
這裏寫圖片描述
理解:在該系統中,只要有一個單元輸出的是 顯性則整個系統爲顯性,顯性電平具有優先權。只有所有單元都輸出隱形電平時,總線才爲隱形電平。此外CAN總線起始端有電阻,用來做阻抗匹配,以減少回波反射。至於爲什麼顯性是0而隱性是1是因爲在CAN通訊中0有更高的優先級而且別人就這設定的- -

CAN通訊的方式?

以幀的形式通訊:
1.數據幀:傳遞數據
2.遙控幀:請求發送數據
3.錯誤幀:標定錯誤
4.過載幀:被接收單元用來通知還沒有準備好接收幀
5.間隔幀:將數據遙控幀和錯誤過載幀分離
其中數據幀和遙控幀有標準格式和拓展格式兩種,區別在於標準格式有11位標識符,拓展格式有29位標識符

數據幀

(1)幀開始(SOF):這個域表示數據幀的開始。
(2)仲裁域:這個域表示一個幀的優先級
(3)控制域:這個域表示保留位和數據字節數
(4)數據域:這是數據內容,0-8個字節的數據能被髮送
(5)CRC域:這個域用於檢查幀的傳輸錯誤。
(6)ACK域:是對幀已經被正常接收的一個證實。
(7)幀結束:指示數據幀結束
這裏寫圖片描述
(1)幀開始(SOF),對標準的或擴展的格式都是一樣的。它指示一幀的開始,由1bit的顯性位組成。
(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)數據的字節數必須是0-8個字節,但接收方對DLC=9-15的情況並不視爲錯誤。
(4)數據域,對標準的或擴展的格式都是一樣的。這個域是傳輸的數據,可以是0到8個字節,字節數載控制域中指明。數據輸出開始於MSB。
(5)CRC域,對標準的或擴展的格式都是一樣的。這個域用來檢查幀是否有傳輸錯誤,它由15bit CRC碼和一個bitCRC定界符(delimiter)(separating bit分隔bit)CRC的產生方法是採用下面的多項式:,CRC的計算範圍是SOF、仲裁域、控制域、數據域。在接收側,會對接收到的數據幀的這些域進行CRC計算,如果計算結果與收到的CRC不一致,則表明存在傳輸錯誤。
(6)ACK域,是對一幀已被正常接收的一個確認信號,由2個bit組成,一個是ACK的slot,一個是ACK的定界符(delimiter),發送單元ACK段:發送2個隱性位。
接收單元ACK段:接收到正確消息的單元,在ACK槽發送顯性位,通知發送單元,正常接收結束。稱之爲發送ACK/返回ACK。
注意:發送 ACK 的是既不處於總線關閉態也不處於休眠態的所有接收單元中,接收到正常消息的單元(發送單元不發送ACK)。正常消息是指:不含填充錯誤、格式錯誤、CRC 錯誤的消息。
(7)幀結束,指示一幀結束,由7個隱性位組成。

遠程幀

遠程幀是接收單元請求發送單元發送一個信息,遙控幀有6個域組成。如圖顯示的那樣,除了沒有數據域外其它與數據幀的結構是一樣的。
(1) 幀開始(SOF):這個域表示數據幀的開始。
(2) 競爭域:這個域表示數據的優先級,具有同樣ID的數據幀被請求。
(3) 控制域:這個域表示保留位和數據字節數
(4) CRC域:這個域用於檢查幀的傳輸錯誤。
(5) ACK域:是對幀已經被正常接收的一個證實。
(6) 幀結束:指示遙控幀的結束
這裏寫圖片描述
遠程幀和數據幀理解:
1.遠程幀和遙控幀之間的不同:
遠程幀沒有數據域,在仲裁域裏的RTR位是隱性電平,而數據幀RTR則爲顯性的。
沒有數據的數據幀與遠程幀可以通過RTR爲來區分
2.遙控幀沒有數據域,其數據長度碼用來幹什麼?
遠程幀的數據長度碼的值表示對應請求的數據幀的數據長度碼。
3.沒有數據域的數據幀用來幹什麼?
例如,數據幀可以被各單元用來作爲週期連接確認/應答,或者仲裁域本身帶有實質性信息。

錯誤幀

這個幀用來通知在傳輸期間發生了一個錯誤,錯誤幀由一個錯誤標誌和一個錯誤定界符組成,錯誤幀由CAN的硬件來發送。圖顯示了錯誤幀的結構。
(1) 錯誤標誌:有2種錯誤標誌類型:主動錯誤和被動錯誤標誌
a)主動錯誤標誌:6個顯性位
b) 被動錯誤標誌:6個隱性位
(2) 錯誤分隔符:由8個隱性位組成。
這裏寫圖片描述
注1:錯誤回聲:取決於連接到總線上的各單元檢測出錯誤的時間,錯誤標誌可能一個重疊在另一個上,總共可達12bit長度。
注2:主動錯誤標誌:處於主動錯誤狀態的單元檢測出錯誤時輸出的錯誤標誌。
注3:被動錯誤標誌:處於被動錯誤狀態的單元檢測出錯誤時輸出的錯誤標誌。

過載幀

這個幀被接收單元用來通知還沒有準備好接收幀。它由一個過載標誌和一個過載分隔符組成。
這裏寫圖片描述
(1) 過載標誌:由6個顯性位組成,過載標誌與錯誤幀的主動錯誤標誌具有相同的結構。
(2) 過載分隔符:由8個隱性位組成,過載分隔符與錯誤幀的錯誤分隔符具有相同的結構。
注1:錯誤回聲:向錯誤標誌一樣,取決於時間,過載標誌可能一個重疊在另一個上,總共可達12bit長度。

間隔幀

這個幀用來隔開數據幀和遙控幀。數據和遙控幀可通過插入幀間間隔與前面傳輸的任何幀(數據幀、遙控幀、錯誤幀、過載幀)分開。
這裏寫圖片描述
過載幀和錯誤幀前不能插入幀間間隔。
(1)間隔:由3個隱性位組成。在間隔期間如果檢測到顯性電平,則必須發送過載幀,然而,如果間隔的第3bit是顯性電平,間隔被認爲是SOF
(2)總線空閒:是隱性電平,長度沒有限制(它可以是0bit長)。當總線處於這種狀態的時候,總線被認爲是自由空閒的,任何單元都可以啓動發送信息。
(3)暫停傳輸(傳輸暫停期):有8個隱性位組成。只在處於被動錯誤狀態的單元剛發送一個消息後的幀間隔中包含的段。

誰先發?

當有幀在同時發送時,這時就涉及到優先級問題,稱爲總線仲裁。
①在總線空閒狀態,最先開始發送消息的單元獲得發送權。
②多個單元同時開始發送時,各發送單元從仲裁域的第一位開始進行仲裁。連續輸出顯性電平最多的單元可繼續發送。從ID開始比較
這裏寫圖片描述
理解:
(1)數據幀和遙控幀的優先級
具有相同 ID 的數據幀和遙控幀在總線上競爭時,仲裁段的最後一位(RTR)爲顯性位的數據幀具有優先權,可繼續發送。
(2)標準格式和擴展格式的優先級
標準格式 ID 與具有相同ID 的遙控幀或者擴展格式的數據幀在總線上競爭時,標準格式的RTR 位爲顯性位的具有優先權,可繼續發送。

位時序基本概念

現在假設這麼一個場景主機以101010..的數據發送給從機,而從機的採樣時間如何和主機一致則數據就是101010..但是如果從機採樣時間和主機不一樣則信息的傳輸會出現混亂比如說從機可能接收到到的數據是00000…這個問題是通訊雙方通過約定波特率解決的。
在CAN通訊中,非同步狀態下每秒發送的位數稱爲位數率,依據時間片的概念將1個bit的時間分爲四個部分
1.同步段(SS)
2.傳播時間段(PTS)
3.相位緩衝段1(PBS1)
4.相位緩衝段2(PBS2)
這些又由可稱爲Time Quantum(以下稱爲Tq)的最小時間單位構成。1 位分爲4 個段,每個段又由若干個Tq 構成,這稱爲位時序。位時間=1/波特率,因此,知道位時間,我們就可以知道波特率。1 位由多少個Tq 構成、每個段又由多少個Tq 構成等,可以任意設定位時序。通過設定位時序,多個單元可同時採樣,也可任意設定採樣點。
位時序各段作用和Tq如下表:
這裏寫圖片描述
注1:IPT代表信息處理時間,是以採樣點作爲起始的時間段,用於計算後續位的位電平。這是硬件在一個採樣點後立刻改變位的電平所必須要的。這個時間等於或小於2Tq,。
注2:因爲採樣點是處於PBS1結束處,所以IPT和PBS2重疊。當IPT = 2Tq時,PBS2不可能選爲1,因此,PBS2必須是2到8Tq。
注3:重新同步的結果使相位緩衝段1增長,或使相位緩衝段2 縮短。相位緩衝段加長或縮短的數量有一個上限,此上限由SJW(重新同步跳轉寬度)給定。重新同步跳轉寬度應設置於1和最小值之間(此最小值爲4*PBS1)。
可以從一位值轉換到另一位值的過渡過程得到時鐘信息。這裏有一個屬性,即:只有後續位的一固定最大數值才具有相同的數值。這個屬性使總線單元在幀期間重新同步於位流成爲可能。可用於重新同步的兩個過渡過程之間的最大的長度爲29個位時間。
列表內容

同步如何取得

CAN總線的通訊是採用NRZ(Non-Return to Zero,非歸0)碼,數據本身並不攜帶時鐘信息,也即在每一位的開始或結束沒有同步信號,發送單元以位時序同步的方式開始發送幀數據,接收單元根據總線電平的變化進行同步並進行接收工作。
然而,發送器和接收器之間由於彼此的時鐘誤差或傳輸路徑的相位誤差可能會失去同步關係,因此接收單元在接收幀的時候,必須通過硬件同步或重新同步調整它的操作時序。

①首先進行硬同步
在總線空閒狀態時,接收單元檢測到SOF,就會執行這個同步調整過程。“隱式”電平跳變到“顯式”電平的邊緣的時間點被認爲是SS,而不管SJW的值 硬同步只發生在幀的起始
這裏寫圖片描述
如果沿出現在SS裏,沿的相位誤差e=0;
如果沿位於採集點(PBS1結束之前)之前,e>0;
如果沿位於採集點之後,e<0;

②假如輸出沒有延遲,但是主機和從機晶振不同,雖然已實現硬同步,但是採集信息仍有問題,這是就進行重同步解決問題
重同步的本質爲增加或減少位定位時間來和總線上的其他節點同步
在接收過程中檢測到總線電平發生了改變時執行重新同步操作。

每當檢測到一個邊沿(總線電平的改變),收發單元根據SJW值通過增加PBS1段或減少PBS2段,來調整同步。但,如果發生了超出SJW值的誤差時,最大調整量不能超過SJW值。
這裏寫圖片描述
調整同步的規則
硬件同步和再同步的執行遵從如下規則:
1) 在1個位時間裏(或者說在2個採樣點之間),只允許一個同步(或者說只進行一次同步調整)。
2) 只有當採樣點之前的總線電平和邊沿後的總線電平不同時,該邊沿才能用於調整同步。
3) 如果出現隱性電平到顯性電平變化的邊沿,且條件(1)和(2)滿足,將進行同步。
4) 如果在幀間間隙期間發生隱性電平到顯性電平的信號邊沿(除了間隙裏的第一位),則總會執行硬件同步。
5) 如果發生從所有其它隱性電平到顯性電平的信號邊沿,則執行再同步。
6) 如果發送單元自身輸出的顯性電平被檢測到有延遲,則不執行再同步。
最後推薦一個很好的PPT

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