CAN總線學習筆記:CAN總線的相關概念編程 在這信息爆炸的年代,學習同樣新的知識,尤爲是IT技術的學習,網絡是必不可少的。一陣狂搜事後,發現基於CAN總線的介紹確實很多,可是大多好像都雷同了,也許是不斷轉貼的結果吧。並且這些知識點也都太零散了,讓人看了,尤爲是初學者有點找不着北的感受。因此,本着謙虛好學腳踏實地的菜鳥精神,決定把網上搜的,書上看的,再添油加醋的作一番比較系統的整理。算是爲學習CAN總線理清思路,快速上手打基礎吧。安全 1、什麼是CAN總線?網絡 CAN,全稱爲「Controller Area Network」,即控制器局域網,是國際上應用最普遍的現場總線之一。最初,CAN被設計做爲汽車環境中的微控制器通信,在車載各電子控制裝置ECU之間交換信息,造成汽車電子控制網絡。好比:發動機管理系統、變速箱控制器、儀表裝備、電子主幹系統中,均嵌入CAN控制裝置。dom 一個由CAN 總線構成的單一網絡中,理論上能夠掛接無數個節點。實際應用中,節點數目受網絡硬件的電氣特性所限制。例如,當使用Philips P82C250做爲CAN收發器時,同一網絡中容許掛接110個節點。CAN 可提供高達1Mbit/s的數據傳輸速率,這使實時控制變得很是容易。另外,硬件的錯誤檢定特性也加強了CAN的抗電磁干擾能力。模塊化 2、CAN 總線是如何發展的?函數 CAN最初出如今80年代末的汽車工業中,由德國Bosch公司最早提出。當時,因爲消費者對於汽車功能的要求愈來愈多,而這些功能的實現大可能是基於電子操做的,這就使得電子裝置之間的通信愈來愈複雜,同時意味着須要更多的鏈接信號線。提出CAN總線的最初動機就是爲了解決現代汽車中龐大的電子控制裝置之間的通信,減小不斷增長的信號線。因而,他們設計了一個單一的網絡總線,全部的外圍器件能夠被掛接在該總線上。1993年,CAN 已成爲國際標準ISO11898(高速應用)和ISO11519(低速應用)。性能 CAN是一種多主方式的串行通信總線,基本設計規範要求有高的位速率,高抗電磁干擾性,並且可以檢測出產生的任何錯誤。當信號傳輸距離達到10Km時,CAN 仍可提供高達50Kbit/s的數據傳輸速率信盈達嵌入式企鵝要妖氣嗚嗚吧久零就要。學習 因爲CAN總線具備很高的實時性能,所以,CAN已經在汽車工業、航空工業、工業控制、安全防禦等領域中獲得了普遍應用。編碼 3、CAN 總線是如何工做的?設計 CAN通信協議主要描述設備之間的信息傳遞方式。CAN層的定義與開放系統互連模型(OSI)一致。每一層與另外一設備上相同的那一層通信。實際的通信發生在每一設備上相鄰的兩層,而設備只經過模型物理層的物理介質互連。CAN的規範定義了模型的最下面兩層:數據鏈路層和物理層。下表中展現了OSI開放式互連模型的各層。應用層協議能夠由CAN用戶定義成適合特別工業領域的任何方案。已在工業控制和製造業領域獲得普遍應用的標準是DeviceNet,這是爲PLC和智能傳感器設計的。在汽車工業,許多製造商都應用他們本身的標準。
7 |
應用層 |
最高層。用戶、軟件、網絡終端等之間用來進行信息交換。如:DeviceNet |
6 |
表示層 |
將兩個應用不一樣數據格式的系統信息轉化爲能共同理解的格式 |
5 |
會話層 |
依靠低層的通訊功能來進行數據的有效傳遞。 |
4 |
傳輸層 |
兩通信節點之間數據傳輸控制。操做如:數據重發,數據錯誤修復 |
3 |
網絡層 |
規定了網絡鏈接的創建、維持和拆除的協議。如:路由和尋址 |
2 |
數據鏈路層 |
規定了在介質上傳輸的數據位的排列和組織。如:數據校驗和幀結構 |
1 |
物理層 |
規定通信介質的物理特性。如:電氣特性和信號交換的解釋 |
表1 OSI開放系統互連模型 CAN可以使用多種物理介質,例如雙絞線、光纖等。最經常使用的就是雙絞線。信號使用差分電壓傳送,兩條信號線被稱爲「CAN_H」和「CAN_L」,靜態時均是2.5V左右,此時狀態表示爲邏輯「1」,也能夠叫作「隱性」。用CAN_H比CAN_L高表示邏輯「0」,稱爲「顯形」,此時,一般電壓值爲:CAN_H = 3.5V 和CAN_L = 1.5V。 4、CAN 有哪些特性? CAN具備十分優越的特色,令人們樂於選擇。這些特性包括: 一、低成本; 二、極高的總線利用率; 三、很遠的數據傳輸距離(長達10Km); 四、高速的數據傳輸速率(高達1Mbit/s); 五、可根據報文的ID決定接收或屏蔽該報文; 六、可靠的錯誤處理和檢錯機制; 七、發送的信息遭到破壞後,可自動重發; 八、節點在錯誤嚴重的狀況下具備自動退出總線的功能; 九、報文不包含源地址或目標地址,僅用標誌符來指示功能信息、優先級信息。 5、Philips製造的CAN芯片有哪些?
類別 |
型號 |
備註 |
CAN微控制器 |
P87C591 |
替代P87C592 |
CAN獨立控制器 |
SJA1000 |
替代82C200 |
CAN收發器 |
PCA82C250 |
高速CAN收發器 |
|
PCA82C251 |
高速CAN收發器 |
|
PCA82C252 |
容錯CAN收發器 |
|
TJA1040 |
高速CAN收發器 |
|
TJA1041 |
高速CAN收發器 |
|
TJA1050 |
高速CAN收發器 |
|
TJA1053 |
容錯CAN收發器 |
|
TJA1054 |
容錯CAN收發器 |
LIN收發器 |
TJA1020 |
LIN收發器 |
表2 CAN芯片一覽表 6、CAN總線如何進行位仲裁? CSMA/CD是「載波偵聽多路訪問/衝突檢測」(Carrier Sense Multiple Access with Collision Detect)的縮寫。 利用CSMA訪問總線,可對總線上信號進行檢測,只有當總線處於空閒狀態時,才容許發送。利用這種方法,能夠容許多個節點掛接到同一網絡上。當檢測到一個衝突位時,全部節點從新回到‘監聽’總線狀態,直到該衝突時間事後,纔開始發送。在總線超載的狀況下,這種技術可能會形成發送信號通過許多延遲。爲了不發送時延,可利用CSMA/CD方式訪問總線。當總線上有兩個節點同時進行發送時,必須經過「無損的逐位仲裁」方法來使有最高優先權的的報文優先發送。在CAN總線上發送的每一條報文都具備惟一的一個11位或29位數字的ID。CAN總線狀態取決於二進制數‘0’而不是‘1’,因此ID號越小,則該報文擁有越高的優先權。所以一個爲全‘0’標誌符的報文具備總線上的最高級優先權。可用另外的方法來解釋:在消息衝突的位置,第一個節點發送0而另外的節點發送1,那麼發送0的節點將取得總線的控制權,而且可以成功的發送出它的信息。 7、CAN的高層協議 CAN的高層協議(也可理解爲應用層協議)是一種在現有的底層協議(物理層和數據鏈路層)之上實現的協議。高層協議是在CAN規範的基礎上發展起來的應用層。許多系統(像汽車工業)中,能夠特別制定一個合適的應用層,但對於許多的行業來講,這種方法是不經濟的。一些組織已經研究並開放了應用層標準,以使系統的綜合應用變得十分容易。 一些可以使用的CAN高層協議有: 一、制定組織主要高層協議 二、CiA CAL協議 三、CiA CANOpen協議 四、ODVA DeviceNet 協議 五、Honeywell SDS 協議 六、Kvaser CANKingdom協議 8、什麼是標準格式CAN和擴展格式CAN? 標準CAN的標誌符長度是11位,而擴展格式CAN的標誌符長度可達29位。CAN 協議的2.0A版本規定CAN控制器必須有一個11位的標誌符。同時,在2.0B版本中規定,CAN控制器的標誌符長度能夠是11位或29位。遵循CAN2.0B協議的CAN控制器能夠發送和接收11位標識符的標準格式報文或29位標識符的擴展格式報文。若是禁止CAN2.0B,則CAN 控制器只能發送和接收11位標識符的標準格式報文,而忽略擴展格式的報文結構,但不會出現錯誤。 目前,Philips公司主要推廣的CAN獨立控制器均支持CAN2.0B協議,即支持29位標識符的擴展格式報文結構。 9、CAN的報文格式: (關於這部份內容,對於我下一步要進行編程實驗控制CAN總線是很重要的一個知識點。很鬱悶的是搜了老半天只看見有文字敘述這部份內容的,不只說得不繫統完整,並且遠沒有貼圖說明來的具體直觀。不過還好,搜到了一份E文版的CAN總線資料,再把這個資料詳細看了下,再作了整理,仍是用圖來講明CAN傳輸的報文格式比較容易理解。老外寫的東西確實比國內的好,這個不是我吹出來的,有興趣下了看看就知道了,見附件下載。) CAN通訊是一種點對多點的傳輸協議,不是基於地址的傳統的點對點傳輸協議。當一個點傳輸數據時,總線上的其它點均可覺得接受方,它們能夠經過ID來做出對總線上傳送數據的處理(接收或者丟棄)。而且當數據被正確接收到之後,接收方便會做出應答響應。CAN協議還有一個很實用的功能,就是總線上的任一個節點能夠請求其它節點向其發送數據,這被稱做遠程發送請求(RTR)。除此之外,CAN協議還有一個優勢,當總線新加入一個節點進行通訊時無需更改原有的程序,新節點只要經過ID就能夠知道是接收仍是丟棄數據。 CAN協議定義了四種不一樣的幀。 一、數據幀,這個幀被用於當一個節點把信息傳送給系統的任何其它節點。數據幀由7個不一樣的位場組成,即幀起始、仲裁場、控制場、數據場、CRC場、應答場、幀結束。 二、遠程幀,此幀是基於數據幀格式,只要把RTR位設置成遠程發送請求(Remote Transmit Request),而且沒有數據場。總線上發送此幀後,表示請求接收與該幀ID相符的數據幀。遠程幀由6個不一樣的位場組成,即幀起始、仲裁場、控制場、CRC場、應答場、幀結束。 三、錯誤幀,任何單元監測到錯誤時就發送錯誤幀。錯誤幀由兩個不一樣的場組成。第一個場是錯誤標誌,用作爲不一樣站提供錯誤標誌的疊加;第二個場是錯誤界定符。 四、超載幀,節點須要增長時間來處理接收到的數據時便發送過載幀。超載幀包括兩個位場:超載標誌和超載界定符。 圖1 幀起始位 CAN總線傳輸的起始幀如圖1。幀起始標誌數據幀或遠程幀的起始,由一個單獨的「顯性」位(0)組成。由控制芯片完成。 圖2 標準數據幀格式 圖3 擴展數據幀格式 由圖2和圖3能夠看到數據幀的兩種不一樣格式,兩種格式的差異只是它們的ID位數不一樣。 一、幀起始。 二、仲裁場,仲裁場包括標識符和遠程發送請求位(RTR)。 對於CAN2.0A標準,標識符的長度爲11位。RTR位在數據幀中必須是顯性位,而在遠程幀必須爲隱性位。 對於CAN2.0,標準格式和擴展格式的仲裁場不一樣。在標準格式中,仲裁場由11位標識符和遠程發送請求位組成。在擴展格式中,仲裁場由29位標識符和替代遠程請求位(SRR) 、標誌位(IDE)和遠程發送請求位組成。 仲裁場的做用之一是說明數據幀或遠程幀發送目的地;之二是指出是數據幀仍是遠程幀。 三、控制場,控制場由6個位組成,說明數據幀中有效數據的長度。標準幀的最高位是IDE位,擴展幀的最高位是保留位RB1,它們的次高位都是保留位RB0。低四位是DLC(Data Length Code)位,標識傳送的數據字節數(0-8字節)。 四、數據場,數據場由數據幀中的發送數據組成。它能夠爲0-8個字節。 五、CRC場,CRC場包括CRC序列,這部分由SJA1000控制芯片完成。 六、應答場,應答場長度爲兩個位,包括應答間隙和應答界定符。由SJA1000控制芯片自動完成。 七、幀結束,每個數據幀和遠程幀均由一標誌序列界定,這個標誌序列由7個「隱性」位組成。這部分由SJA1000控制芯片自動完成。 仲裁場、控制場、數據場由軟件編程配置SJA1000完成;幀起始、CRC場、應答場、幀結束由CAN總線控制芯片SJA1000自動完成。 10、CAN的數據錯誤檢測: 不一樣於其它總線,CAN協議不能使用應答信息。事實上,它能夠將發生的任何錯誤用信號發出。CAN協議可以使用五種檢查錯誤的方法,其中前三種爲基於報文內容檢查。 一、循環冗餘檢查(CRC) 在一幀報文中加入冗餘檢查位可保證報文正確。接收站經過CRC可判斷報文是否有錯。 二、幀檢查 這種方法經過位場檢查幀的格式和大小來肯定報文的正確性,用於檢查格式上的錯誤。 三、應答錯誤 如前所述,被接收到的幀由接收站經過明確的應答來確認。若是發送站未收到應答,那麼代表接收站發現幀中有錯誤,也就是說,ACK場已損壞或網絡中的報文無站接收。CAN協議也可經過位檢查的方法探測錯誤。 四、總線檢測 有時,CAN中的一個節點可監測本身發出的信號。所以,發送報文的站能夠觀測總線電平並探測發送位和接收位的差別。 五、位填充 一幀報文中的每一位都由不歸零碼錶示,可保證位編碼的最大效率。然而,若是在一幀報文中有太多相同電平的位,就有可能失去同步。爲保證同步,同步沿用位填充產生。在五個生。在五個連續相等位後,發送站自動插入一個與之互補的補碼位;接收時,這個填充位被自動丟掉。例如,五個連續的低電平位後,CAN自動插入一個高電平位。CAN經過這種編碼規則檢查錯誤,若是在一幀報文中有6個相同位,CAN就知道發生了錯誤。 若是至少有一個站經過以上方法探測到一個或多個錯誤,它將發送出錯標誌終止當前的發送。這能夠阻止其它站接收錯誤的報文,並保證網絡上報文的一致性。當大量發送數據被終止後,發送站會自動地從新發送數據。做爲規則,在探測到錯誤後23個位週期內從新開始發送。在特殊場合,系統的恢復時間爲31個位週期。 但這種方法存在一個問題,即一個發生錯誤的站將致使全部數據被終止,其中也包括正確的數據。所以,若是不採起自監測措施,總線系統應採用模塊化設計。爲此,CAN協議提供一種將偶然錯誤從永久錯誤和局部站失敗中區別出來的辦法。這種方法能夠經過對出錯站統計評估來肯定一個站自己的錯誤並進入一種不會對其它站產生不良影響的運行方法來實現,即站能夠經過關閉本身來阻止正常數據因被錯誤地當成不正確的數據而被終止。 六、CAN可靠性 爲防止汽車在使用壽命期內因爲數據交換錯誤而對司機形成危險,汽車的安全系統要求數據傳輸具備較高的安全性。若是數據傳輸的可靠性足夠高,或者殘留下來的數據錯誤足夠低的話,這一目標不難實現。從總線系統數據的角度看,可靠性能夠理解爲,對傳輸過程產生的數據錯誤的識別能力。 殘餘數據錯誤的機率能夠經過對數據傳輸可靠性的統計測量得到。它描述了傳送數據被破壞和這種破壞不能被探測出來的機率。殘餘數據錯誤機率必須很是小,使其在系統整個壽命週期內,按平均統計時幾乎檢測不到。計算殘餘錯誤機率要求可以對數據錯誤進行分類 ,而且數據傳輸路徑可由一模型描述。若是要肯定CAN的殘餘錯誤機率,咱們可將殘留錯誤的機率做爲具備80~90位的報文傳送時位錯誤機率的函數,並假定這個系統中有5~10個站,而且錯誤率爲1/1000,那麼最大位錯誤機率爲10—13數量級。例如,CAN網絡的數據傳輸率最大爲1Mbps,若是數據傳輸能力僅使用50%,那麼對於一個工做壽命4000小時、平均報文長度爲 80位的系統,所傳送的數據總量爲9×1010。在系統運行壽命期內,不可檢測的傳輸錯誤的統計平均小於10—2量級。換句話說,一個系統按每一年365 天,天天工做8小時,每秒錯誤率爲0. 7計算,那麼按統計平均,每1000年纔會發生一個不可檢測的錯誤。 |