CAN匯流排基礎知識(一)
1.1 CAN匯流排是什麼?
CAN(Controller Area Network)是ISO國際標準化的序列通訊協議。廣泛應用於汽車、船舶等。具有已經被大家認可的高效能和可靠性。
根線(CAN-H和CAN-L)的電位差來確定匯流排的電平,在任一時刻,總線上有2種電平:顯性電平和隱性電平。
"顯性"具有"優先"的意味,只要有一個單元輸出顯性電平,總線上即為顯性電平,並且,"隱性"具有"包容"的意味,只有所有的單元都輸出隱性電平,總線上才為隱性電平。(顯性電平比隱性電平更強)。
總線上執行邏輯上的線"與"時,顯性電平的邏輯值為"0",隱性電平為"1"。
下圖顯示了一個典型的CAN拓撲連線圖。
連線在總線上的所有單元都能夠傳送資訊,如果有超過一個單元在同一時刻傳送資訊,有最高優先順序的單元獲得傳送的資格,所有其它單元執行接收操作。
1.2 CAN匯流排的特點
CAN匯流排協議具有下面的特點:
1) 多主控制
當匯流排空閒時,連線到總線上的所有單元都可以啟動傳送資訊,這就是所謂的多主控制的概念。
先佔有匯流排的裝置獲得在總線上進行傳送資訊的資格。這就是所謂的CSMA/CR(Carrier Sense MultipleAccess/Collosion Avoidance)方法
如果多個裝置同時開始傳送資訊,那麼傳送最高優先順序ID訊息的裝置獲得傳送資格。
2) 資訊的傳送
個或者更多的裝置在同一時刻啟動資訊的傳輸,在總線上按照資訊所包含的ID的每一位來競爭,贏得競爭的裝置(也就是具有最高優先順序的資訊)能夠繼續傳送,而失敗者則立刻停止傳送並進入接收操作。因為總線上同一時刻只可能有一個傳送者,而其它均處於接收狀態,所以,並不需要在底層協議中定義地址的概念。
3) 系統的靈活性
連線到總線上的單元並沒有類似地址這樣的標識,所以,新增或去除一個裝置,無需改變軟體和硬體,或其它裝置的應用層軟體。
4) 通訊速度
可以設定任何通訊速度,以適應網路規模。
對一個網路,所有單元必須有相同的通訊速度,如果不同,就會產生錯誤,並妨礙網路通訊,然而,不同網路間可以有不同的通訊速度。
5) 遠端資料請求
可以通過傳送"遙控幀",請求其他單元傳送資料。
6) 錯誤檢測、錯誤通知、錯誤恢復功能
所有單元均可以檢測出錯誤(錯誤檢測功能)。
檢測到錯誤的單元立刻同時通知其它所有的單元(錯誤通知功能)。如果一個單元傳送資訊時檢測到一個錯誤,它會強制終止資訊傳輸,並通知其它所有裝置發生了錯誤,然後它會重傳直到資訊正常傳輸出去(錯誤恢復功能)。
7) 錯誤隔離
在CAN總線上有兩種型別的錯誤:暫時性的錯誤(總線上的資料由於受到噪聲的影響而暫時出錯);持續性的錯誤(由於裝置內部出錯(如驅動器壞了、連線有問題等)而導致的)。CAN能夠區別這兩種型別,一方面降低常出錯單元的通訊優先順序以阻止對其它正常裝置的影響,另一方面,如果是一種持續性的錯誤,將這個裝置從總線上隔離開。
8) 連線
CAN匯流排允許多個裝置同時連線到總線上且在邏輯上沒有數目上的限制。然而由於延遲和負載能力的限制,實際可連線得裝置還是有限制的,可以通過降低通訊速度來增加連線的裝置個數。相反,如果連線的裝置少,通訊的速度可以增加。
1.3錯誤
1.3.1 錯誤狀態
裝置總是處於下面三個狀態之一:
1)主動錯誤狀態
章的"CAN協議"。
2)被動錯誤狀態
是指易於引起錯誤的狀態。
儘管處於被動錯誤狀態的裝置能夠參加總線上的通訊,但是在接收期間,它不可能主動地向其它裝置傳送錯誤通知,以避免影響它們的通訊。處於被動錯誤狀態的裝置即使檢測到一個錯誤,如果其它處於主動錯誤狀態的裝置沒曾檢測到錯誤,那麼也認為在總線上未曾出現過任何錯誤。
當處於被動錯誤狀態的裝置檢測到一個錯誤的時候,它傳送一個被動錯誤標誌。
個位的隱性位組成)。
章的"CAN協議"。
3)匯流排切斷狀態
處於此狀態下時,裝置不能參加匯流排的通訊。裝置所有的收發操作都被禁止。
和圖4。
1.3.2 錯誤計數器的值
傳送和接收錯誤計數器的值按照規定的條件來改變。
小結了錯誤計數器值改變的條件。
在一個數據收發操作中可能會發生多個條件重疊。
錯誤計數器增加的時間發生在錯誤標誌的第一bit位置。
1.4.CAN協議的基本概念
顯示了CAN協議每個層的定義。
資料鏈路層劃分為MAC(Medium Access Control媒體存取控制)和LLC(Logical Link Control羅輯鏈路控制)。MAC子層組成CAN協議的核心。資料鏈路層的功能是將從物理層接收到的訊號組織成有意義的資訊,提供如傳輸錯誤控制等資料傳輸控制流程。更具體來說,包括:資訊如何封裝成一幀,資料衝突仲裁、應答、錯誤的檢測或通知。資料鏈路層的這些功能通常由CAN控制器硬體來實現。
物理層定義訊號的實際傳輸方式、位的時序、位的編碼、同步的過程步驟,然而,CAN協議並沒有定義了訊號電平、通訊速度、取樣點值、驅動器和匯流排電氣特徵、聯結器形式。對每個系統,這些特徵由使用者自行確定。
在BOSCH公司的CAN協議中,並沒有關於收發器和匯流排的電氣特徵的定義,而在ISO CAN協議中,如ISO11898和ISO11519-2卻對此有明確的定義。
CAN匯流排基礎知識(二)
2.CAN協議和標準規範
2.1 由ISO標準化的CAN協議
個版本,如ISO11898和ISO11519-2,它們之間在資料鏈路層沒什麼不同,但是在物理層有些區別。
(1) 關於ISO11898:這個標準用於高速CAN通訊。開始的時候,資料鏈路層和物理層都在標準ISO11898中規定,後來被拆分為ISO11898-1(僅涉及資料鏈路層)和ISO11898-2(僅涉及物理層)
(2) 關於ISO11519:這個標準用於低速(最高125kbps)CAN通訊
2.2 ISO11898和ISO11519-2之間的不同
顯示了CAN規範的規定範圍。三個物理層的子層:PLS(Physucal Signaling Sublayer物理訊號子層)子層,PMA(Physical Medium Attachment物理介質連線)子層,MDI(Medium Dependent Interface介質相關介面)子層,PMA和MDI子層的定義是不一樣的。
列出了ISO11898和ISO11519-2之間的物理層上的不同,圖7現實了通訊速度和匯流排長度之間的關係。
通訊速度和匯流排長度需要由使用者按照系統要求進行設定。
匯流排拓撲:
根線(CAN_High和CAN_Low)組成,CAN控制器通過一個收發器連線到總線上,匯流排的電平由CAN_High和CAN_Low的電位差來確定,匯流排有2個電平:顯性和隱性,在任一給定的時間內,匯流排總是處於這2個電平之一。對於邏輯上"線與"的匯流排,顯性和隱性電平被看作邏輯0和邏輯1,一個傳送單元能夠通過改變匯流排電平來送一個資訊給接收單元。
ISO11898和ISO11519-2規定的物理層終端阻抗、顯性電平、隱性電平差分電壓是不同的。
顯示了ISO11898和ISO11519-2物理層的特點,注意ISO11898和ISO11519-2要求一個收發器滿足對應的標準,表4列出了滿足ISO11898和ISO11519-2的主要收發器IC。
2.3 CAN和標準規範
除了ISO,CAN規範由工業標準組織如SAE標準化,以及由一些私立研究機構和公司進行了標準化。
類除了一些基本的標準規範,圖9顯示了通訊協議用於汽車按照通訊速度分級
CAN匯流排基礎知識(三)
3.1.CAN協議
3.1.1 幀型別
個型別的幀:
資料幀
遙控幀
錯誤幀
過載幀
幀間空隙
在所有這些幀中,資料幀和遙控幀由使用者設定,而其它幀則由CAN硬體設定。
資料和遙控幀有兩種格式:標準和擴充套件格式。標準格式有11bit的ID,而擴充套件格式則是29bit的ID。
,每個幀的結構見圖10到圖14
表6 幀型別和每種型別幀的作用
3.1.2 資料幀
資料幀由傳送單元使用,用來發送資訊給接收單元,這是使用者操作的基本幀。
個域組成。圖15顯示了資料幀的結構。
)幀開始(SOF):這個域表示資料幀的開始。
)仲裁域:這個域表示一個幀的優先順序
)控制域:這個域表示保留位和資料位元組數
)資料域:這是資料內容,0-8個位元組的資料能被髮送
)CRC域:這個域用於檢查幀的傳輸錯誤。
)ACK域:是對幀已經被正常接收的一個證實。
)幀結束:指示資料幀結束
)幀開始(SOF),對標準的或擴充套件的格式都是一樣的。它指示一幀的開始,由1bit的顯性位組成。
顯性電平和隱性電平:
總線上的電平有顯性電平和隱性電平兩種。
總線上執行邏輯上的線"與"時,顯性電平的邏輯值為"0",隱性電平為"1"。
"顯性"具有"優先"的意味,只要有一個單元輸出顯性電平,總線上即為顯性電平,並且,"隱性"具有"包容"的意味,只有所有的單元都輸出隱性電平,總線上才為隱性電平。(顯性電平比隱性電平更強)
)仲裁域,這個域表示資料的優先級別。這個域的結構,對標準和擴充套件的格式是有差別的。
:關於ID:
位全為隱性。(禁止設定:ID=1111111xxxx)。這樣總共有(2048-16)個ID能被使用。
個bit。基本ID從ID28到ID18,擴充套件ID由ID17到ID0表示,基本ID和標準格式ID相同,禁止高7bit全都為隱性,(禁止設定:基本ID=1111111xxxx)。這樣總共有(2048-16)個ID能被使用。
在任何情況下,總線上不可能有多個裝置在同一時刻使用同一個ID傳輸資料幀。
)控制域,佔6個bit,指示要傳輸資訊的資料位元組數,這個域的結構,對標準和擴充套件的格式是有差別的。如圖18所示
:保留位(r0,r1),保留位必須以顯性電平傳送,然而,在接收側可以接收顯性、隱性集任意組合的電平。
:資料長度碼(DLC),資料長度碼與資料的位元組對應關係見表7所示。資料的位元組數必須是0-8個位元組,但接收方對DLC=9-15的情況並不視為錯誤。
)資料域,對標準的或擴充套件的格式都是一樣的。這個域是傳輸的資料,可以是0到8個位元組,位元組數載控制域中指明。資料輸出開始於MSB。如圖19所示:
)CRC域,對標準的或擴充套件的格式都是一樣的。這個域用來檢查幀是否有傳輸錯誤,它由15bit CRC碼和一個bitCRC定界符(delimiter)(separating bit分隔bit)
CRC的產生方法是採用下面的多項式:,CRC的計算範圍是SOF、仲裁域、控制域、資料域。在接收側,會對接收到的資料幀的這些域進行CRC計算,如果計算結果與收到的CRC不一致,則表明存在傳輸錯誤。
)ACK域,是對一幀已被正常接收的一個確認訊號,由2個bit組成,一個是ACK的slot,一個是ACK的定界符(delimiter),如圖21所示:
:傳送單元的ACK域,傳送單元以隱性bit傳送ACK slot和ACK 的delimiter。
:接收單元的ACK域,正確接收到資訊的接收單元在接收幀的ACK slot裡傳送一個顯性bit,以通知傳送單元其已經正確接收完畢,這又稱"sending ACK"或"returning ACK"。
"Returning an ACK":
個或更多個單元能接收到資訊,如果它們中任意一個正常接收到資訊,則會有ACK被返回。
)幀結束,指示一幀結束,由7個隱性位組成。如圖22
3.1.3 遙控幀
個域組成。如圖23顯示的那樣,除了沒有資料域外其它與資料幀的結構是一樣的。
(1) 幀開始(SOF):這個域表示資料幀的開始。
(2) 競爭域:這個域表示資料的優先順序,具有同樣ID的資料幀被請求。
(3) 控制域:這個域表示保留位和資料位元組數
(4) CRC域:這個域用於檢查幀的傳輸錯誤。
(5) ACK域:是對幀已經被正常接收的一個證實。
(6) 幀結束:指示遙控幀的結束
遙控幀和資料幀:
- 資料幀和遙控幀之間的不同
- 遙控幀沒有資料域,在仲裁域裡的RTR位是隱性電平,而資料幀RTR則為顯性的。
- 沒有資料的資料幀與遙控幀可以通過RTR為來區分
- 遙控幀沒有資料域,其資料長度碼用來幹什麼?
- 遙控幀的資料長度碼的值表示對應請求的資料幀的資料長度碼。
- 沒有資料域的資料幀用來幹什麼?
- 例如,資料幀可以被各單元用來作為週期連線確認/應答,或者仲裁域本身帶有實質性資訊。
3.1.4 錯誤幀
顯示了錯誤幀的結構。
種錯誤標誌型別:主動錯誤和被動錯誤標誌
個顯性位
個隱性位
個隱性位組成。
:錯誤標誌重疊:取決於連線到總線上的各單元檢測出錯誤的時間,錯誤標誌可能一個重疊在另一個上,總共可達12bit長度。
:主動錯誤標誌:處於主動錯誤狀態的單元檢測出錯誤時輸出的錯誤標誌。
:被動錯誤標誌:處於被動錯誤狀態的單元檢測出錯誤時輸出的錯誤標誌。
3.1.5 過載幀
顯示了錯誤幀的結構。
個顯性位組成,過載標誌與錯誤幀的主動錯誤標誌具有相同的結構。
個隱性位組成,過載定界符與錯誤幀的錯誤定界符具有相同的結構。
:錯誤標誌重疊:向錯誤標誌一樣,取決於時間,過載標誌可能一個重疊在另一個上,總共可達12bit長度。
3.1.6 幀間間隔
這個幀用來隔開資料幀和遙控幀。資料和遙控幀可通過插入幀間間隔與前面傳輸的任何幀(資料幀、遙控幀、錯誤幀、過載幀)分開。
所示。
)間隔:由3個隱性位組成。在間隔期間如果檢測到顯性電平,則必須傳送過載幀,然而,如果間隔的第3bit是顯性電平,間隔被認為是SOF
)匯流排空閒:是隱性電平,長度沒有限制(它可以是0bit長)。當匯流排處於這種狀態的時候,匯流排被認為是自由空閒的,任何單元都可以啟動傳送資訊。
)暫停傳輸(傳輸暫停期):有8個隱性位組成。只在處於被動錯誤狀態的單元剛傳送一個訊息後的幀間隔中包含的段。
3.1.7 優先順序的決定
在匯流排空閒狀態,最先開始傳送訊息的單元獲得傳送權。
多個單元同時開始傳送時,各發送單元從仲裁域的第一位開始進行仲裁。連續輸出顯性電平最多的單元可繼續傳送。丟失競爭的單元在下一bit進入接收操作。
所示。
(1)資料幀和遙控幀的優先順序
具有相同 ID 的資料幀和遙控幀在總線上競爭時,仲裁段的最後一位(RTR)為顯性位的資料幀具有優先權,可繼續傳送。
所示。
(2)標準格式和擴充套件格式的優先順序
標準格式 ID 與具有相同ID 的遙控幀或者擴充套件格式的資料幀在總線上競爭時,標準格式的RTR 位為顯性位的具有優先權,可繼續傳送。
所示。
3.1.8 位填充
個bit持續了同樣的電平,則新增1個bit的反向資料位。
顯示的位填充機制:
)傳送單元的操作
在傳送資料幀和遙控幀的時候,SOF-CRC段間的資料,相同電平如果持續5bit,在下一bit(第6bit)則要插入1bit與前5bit反向的電平。
)接收單元的操作
在接收資料幀和遙控幀的時候,SOF-CRC段間的資料,相同電平如果持續5bit,需要刪除下一bit(第6bit)再接收。如果這第6bit的電平與前5bit相同,則被視為錯誤,且傳送錯誤幀。
3.1.9 錯誤的種類
種類型的錯誤,可能有2個或更多的錯誤同時發生:
- 位錯誤
- 填充錯誤
- CRC錯誤
- 格式錯誤
- ACK錯誤
列出了這些錯誤的種類、內容、錯誤檢測幀和檢測單元。
- 位錯誤由向總線上輸出資料幀、遙控幀、錯誤幀、過載幀的單元和輸出ACK的單元、輸出錯誤的單元來檢測。
- 在仲裁段輸出隱性電平,但檢測出顯性電平時,將被視為仲裁失利,而不是位錯誤。
- 在仲裁段作為填充位輸出隱性電平時,但檢測出顯性電平時,將不視為位錯誤,而是填充錯誤。
- 傳送單元在ACK 段輸出隱性電平,但檢測到顯性電平時,將被判斷為其它單元的ACK 應答,而非位錯誤。
- 輸出被動錯誤標誌(6 個位隱性位)但檢測出顯性電平時,將遵從錯誤標誌的結束條件,等待檢測出連續相同6 個位的值(顯性或隱性),並不視為位錯誤。
(2) 格式錯誤
- 即使接收單元檢測出EOF(7 個位的隱性位)的最後一位(第8 個位)為顯性電平,也不視為格式錯誤。
- ∼15 的值時,也不視為格式錯誤。
3.1.10 錯誤幀的輸出時序
檢測到發生錯誤的單元輸出一個錯誤標誌,以通知其它單元。
處於主動錯誤狀態的單元輸出的錯誤標誌為主動錯誤標誌;處於被動錯誤狀態的單元輸出的錯誤標誌為被動錯誤標誌。
傳送單元傳送完錯誤幀之後,將再次傳送資料幀或遙控幀。
:
3.1.11 位時序
位由下面4個段組成。
- 同步段(SS)
- 傳播時間段(PTS)
- (PBS1)
- (PBS2)
這些段又由稱之為Time Quantum(以下稱為Tq)的最小時間單位構成。
個段,每個段由若干個Tq構成,這稱為位時序。
1位由多少個Tq構成、每個段由多少個Tq構成等是可以設定的。通過設定bit時序。使得可以設定一個取樣點以使總線上多個單元可同時取樣,所謂取樣點就是在這一時刻總線上的電平被鎖存,這個鎖存的電平作為位的值。取樣點的位置在PBS1的結束處。
描述了各段的作用和Tq 數。1個位的構成如圖31所示。
段名稱 |
段的作用 |
Tq數 |
|
同步段(SS) |
多個連線在總線上的單元通過此段實現時序的定時調整,以便同步進行接收和傳送的工作。 隱性電平到顯性電平或顯性電平到隱性電平變化的邊沿被期望出現在本段。 |
8-25 |
|
傳播時間段(PTS) |
用於吸收網路上的物理延遲的段。包括髮送單元的輸出延遲、總線上訊號的傳播延遲、接收單元的輸入延遲。 這個段的時間是以上延遲時間累加和的兩倍。 |
1-8 |
|
(PBS1) |
當訊號邊沿不能出現在SS 段時,此段用來矯正誤差。 由於各單元以各自獨立的時鐘來工作,細微的時鐘誤差都會累積起來,PBS 段可用於吸收此誤差。 為了吸收一個時鐘誤差,在SJW設定的範圍內增減PBS1和PBS2,PBS1和PBS2越大,允許誤差越大,但是通訊速度會降低。 |
1-8 |
|
(PBS2) |
和2) |
||
重新同步跳轉寬度(SJW) |
因時鐘頻率偏差、傳送延遲等原因,某些單元可能會失去同步。SJW是所能校正的最大失去同步的寬度。 |
1-4*PBS1 |
:IPT代表資訊處理時間,是以取樣點作為起始的時間段,用於計算後續位的位電平。這是硬體在一個取樣點後立刻改變位的電平所必須要的。這個時間等於或小於2Tq,。
:因為取樣點是處於PBS1結束處,所以IPT和PBS2重疊。當IPT = 2Tq時,PBS2不可能選為1,因此,PBS2必須是2到8Tq。
:重新同步的結果使相位緩衝段1增長,或使相位緩衝段2 縮短。相位緩衝段加長或縮短的數量有一個上限,此上限由SJW(重新同步跳轉寬度)給定。重新同步跳轉寬度應設置於1和最小值之間(此最小值為4*PBS1)。
個位時間。
3.1.12 同步是如何獲得的?
)碼,資料本身並不攜帶時鐘資訊,也即在每一位的開始或結束沒有同步訊號,傳送單元以位時序同步的方式開始傳送幀資料,接收單元根據匯流排電平的變化進行同步並進行接收工作。
然而,傳送器和接收器之間由於彼此的時鐘誤差或傳輸路徑的相位誤差可能會失去同步關係,因此接收單元在接收幀的時候,必須通過硬體同步或重新同步調整它的操作時序。
3.1.13 硬體同步
在匯流排空閒狀態時,接收單元檢測到SOF,就會執行這個同步調整過程。"隱式"電平跳變到"顯式"電平的邊緣的時間點被認為是SS,而不管SJW的值
顯示了硬體同步機制。
- 如果沿出現在SS裡,沿的相位誤差e=0;
- 如果沿位於採集點(PBS1結束之前)之前,e>0;
- 如果沿位於採集點之後,e<0;
3.1.14 重新同步機制
在接收過程中檢測到匯流排電平發生了改變時執行重新同步操作。
每當檢測到一個邊沿(匯流排電平的改變),收發單元根據SJW值通過增加PBS1段或減少PBS2段,來調整同步。但,如果發生了超出SJW值的誤差時,最大調整量不能超過SJW值。
顯示了重新同步機制。
1.15 調整同步的規則
硬體同步和再同步的執行遵從如下規則:
個位時間裡(或者說在2個取樣點之間),只允許一個同步(或者說只進行一次同步調整)。
2) 只有當取樣點之前的匯流排電平和邊沿後的匯流排電平不同時,該邊沿才能用於調整同步。
)和(2)滿足,將進行同步。
4) 如果在幀間間隙期間發生隱性電平到顯性電平的訊號邊沿(除了間隙裡的第一位),則總會執行硬體同步。
5) 如果發生從所有其它隱性電平到顯性電平的訊號邊沿,則執行再同步。
6) 如果傳送單元自身輸出的顯性電平被檢測到有延遲,則不執行再同步。
SAE:代表汽車工程師協會(Societyof Automotive Engineers)
NMEA:代表國家海洋教育者協會(NationalEducators Association)
SDS:代表智慧分佈系統(SmartDistributed System)
Class:SAE的分類名稱