概述安全
汽車電子設備的不斷增多,對汽車上的線束分佈以及信息共享與交流提出了更高的要求。傳統的電氣系統每每採用單一鏈接的方式通訊,這必將帶來線束的冗餘以及維修的成本的提升。網絡
傳統的單一通訊的對接方式,已經不能知足現代汽車電子發展的需求,採用更爲先進的總線技術勢在必行。總線技術能夠實現信息的實時共享、解決了傳統佈線方式中線束多、佈線難、成本高等問題,從而提升整車通訊的質量與品質。異步
CAN總線(Controller Area Network,控制器局域網絡)由德國博世公司於上世紀80年代提出,近20年來,隨着CAN總線在工業測控與汽車領域的普及,CAN網絡技術不斷優化,取得了長足發展。現在CAN總線已經成爲了汽車上不可或缺的重要環節,ECU內部的CAN總線開發也佔到了ECU開發中的很大份量。在汽車中爲了知足車載系統的不一樣要求,主要採用高速CAN和低速CAN。這二者以不一樣的總線速率工做以得到最佳的性價比,在兩條總線之間採用CAN網關進行鏈接。性能
(1)高速CAN(動力總線)優化
高速CAN總線的傳輸速率範圍在125kbit/s - 1Mbit/s之間,主要用於傳動係數傳輸的實時性要求(如發動機控制、自動變速箱控制、行駛穩定系統、組合儀表等)。編碼
(2)低速CAN(溫馨總線)設計
低速CAN總線的傳輸速率範圍在5kbit/s - 125kbit/s之間。主要用於溫馨系統和車身系統的數據傳輸的實時性要求(如空調控制、座椅調節、車窗升降等)。3d
CAN總線特色orm
CAN總線是一種串行數據通信協議,其中包含了CAN協議的物理層以及數據鏈路層。能夠完成對數據的位填充,數據塊編碼,循環冗餘效驗,幀優先級的判別等工做。其主要特色以下:blog
(1)多主機方式工做,網絡上任意一個節點(未脫離總線)都可以隨時向總線網絡上發佈報文幀。
(2)節點發送的報文幀能夠分爲不一樣的優先級,知足不一樣實時要求。
(3)採用載波偵聽多路訪問/衝突檢測(CSMA/CD)技術,當兩個節點同時發佈信息時,高優先級報文可不受影響地傳輸數據。
(4)節點總數實際可達110個。
(5)採用短幀結構,每一幀最多有8個有效字節。
(6)當某個節點錯誤嚴重時,具備自動關閉功能,切斷與總線的聯繫,導致總線上的其餘操做不受影響。
CAN總線物理層
(1)總線結構
CAN總線採用雙線傳輸,兩根導線分別做爲CAN_H、CAN_L,並在終端配備有120Ω的電阻。收到總線信號時,CAN收發器將信號電平轉化爲邏輯狀態,即CAN_H與CAN_L電平相減後,獲得一個插值電平。各類干擾(如點火系統)在兩根導線上的做用相同,相減後獲得的插值電平能夠濾過這些干擾。
(2)總線電平
CAN總線有兩種邏輯電平狀態,即顯性與隱性。顯性電平表明「0」,隱性電平表明「1」。採用非歸零碼編碼,即在兩個相同電平之間並不強制插入一個零狀態電平。
高速CAN在傳輸隱性位時,CAN_H與CAN_L上的電平位均爲2.5V;在傳輸顯性位時分別爲3.5V與1.5V。
低速CAN在傳輸隱性狀態位時,CAN_H上的電平爲0V,CAN_L上的電平位5V。在傳輸顯性狀態位時,CAN_H上的電平位3.6V,CAN_L的位1.4V。
爲了確保通信的正確性,總線信號必須在必定時間內出如今總線上,而且保證被正確採樣。總線信號傳輸有必定的時間延遲,最大的可靠的總線波特率與總線長度有關。ISO11898中對各類總線長度有着如下定義:
★ 1Mbit/s 總線長度爲40m(規範)。
★ 500kbit/s 總線長度最大值爲100m(建議值)。
★ 250kbit/s 總線長度最大值爲250m。
★ 125kbit/s 總線長度最大值爲500m。
★ 40kbit/s 總線長度最大值爲1000m。
CAN總線硬件設備
(1)CAN通訊線纜,實現節點的互聯,是傳輸數據的通道。主要有:普通雙絞線,同軸電纜,光纖。
(2)CAN驅動/接收器,將信息封裝爲幀後發送,接收到的幀將其還原爲信息、標定並報告節點狀態。
(3)CAN控制器,專按協議要求設計製造,經簡單總線鏈接便可實現CAN的所有功能。包括:SJA1000(Philips),82527(Intel)。
(4)CAN微控制器,嵌有部分或所有CAN控制模塊及相關接口的通用型微控制器現現在不少芯片都配備CAN接口。
CAN報文幀結構
在CAN總線上,報文是以「幀」來發送的,每一幀都包含如下幾個部分:
(1)幀起始
在總線空閒時,總線爲隱性狀態。幀起始由單個顯性位構成,標誌着報文的開始,並在總線上起着同步做用。
(2)仲裁段
仲裁的主要是定義了報文的標識符,也俗稱ID。在CAN2.0A規範中,標識符爲11位,而在CAN2.0B中變爲了29位。這意味着在2.0B中能夠存在更多不一樣類型的報文,可是也下降了總線的利用率。
(3)控制段
主要定義了數據域字節的長度。經過數據長度碼,接收節點能夠判斷報文數據是否完整。
(4)數據域
包含有0~8個字節數據。
(5)CRC域
CRC又稱循環冗餘碼效驗(Cyclical Redundancy Check),是數據通訊中常見的查錯方法。
(6)ACK域
用於接收節點的反饋應答。
(7)幀結束
由一串7個隱性位組成,表示報文幀的結束。
Ps:在CAN總線的開發中,核心的關注點就是CAN報文ID以及其數據域。根據客戶的要求,ECU接收本身感興趣的ID報文的同時,也向外發送別的ECU所須要的ID報文。通常不一樣整車廠在開發本身的CAN協議規範的同時,也會有本身的checksum機制,不知足checksum的報文,數據將不會被ECU所接收。
仲裁機制
仲裁是總線應用中一個至關重要的概念,在CAN總線採用載波偵聽多路訪問/衝突檢測(CSMA/CD)技術。若是總線空閒(隱性位),有報文準備發送,那麼每個節點均可以開始發送報文。報文以顯性位(報文幀開始位)開始,接着是標識符。若是多個節點同時開始發送報文,那麼使用「線與」仲裁機制(仲裁用邏輯「與」)來解決總線衝突,肯定優先級最高的報文,而不須要損失時間或數據(非破壞性仲裁)。仲裁機制使用標識符爲判斷依據,不只表明報文幀的內容,還表明報文幀發送的優先級。二進制數越小的標識符,優先級越高;反之亦然。
如上圖,ECU單元1和ECU單元2同時開始向總線發送數據,開始部分他們的數據格式是同樣的,故沒法區分優先級,直到T時刻,單元1輸出隱性電平,而單元2輸出顯性電平,此時單元1仲裁失利,馬上轉入接收狀態工做,再也不與單元2競爭,而單元2則順利得到總線使用權,繼續發送本身的數據。
CAN報文幀種類
CAN總線報文傳輸有如下4種不一樣的格式:
(1)數據幀:由發送節點發出,包含0 - 8個數據字節。
(2)遠程幀:發送遠程幀向網絡節點請求發送某一標識符的數據幀。
(3)錯誤幀:總線節點發現錯誤時,以錯誤幀的方式通知網絡上的其餘節點。
(4)過載幀:發送過載幀,表示當前節點不能處理後續的報文(如幀延遲等)。
Ps:爲了保持總線的利用率,在車載總線上數據幀的報文通常均爲8字節。
CAN總線錯誤
CAN總線將錯誤分爲臨時性錯誤和長期性錯誤。前者主要由外部因素引發,如總線上驅動電壓波形不規整、有尖峯或毛刺時,其數據傳輸性能會受到必定程度的短時間干擾。長期性錯誤則主要由網絡組建非正常情況引發,好比接觸不良、線路故障、發送器或接收器失效等。CAN中每一個具備數據通訊能力的網絡單元內部都集成有一個發送錯誤計數器和接受錯誤計數器,當該單元在數據發送階段出現一次錯誤時,其發送錯誤計數器自加8;在數據接收階段出現一次錯誤時,其接收錯誤計數器自加1。在相應計數器內容非0的狀況下,網絡單元每成功發送一幀,發送錯誤計數器自減1;每成功接收一幀,接收錯誤計數內容本來小於127時自減1,大於127時被置爲119 - 127之間任意值。這樣,若是某個網絡單元的錯誤計數在不斷增加,就說明該單元的數據通訊在頻繁發生故障。當計數器內容超過必定閾值時,能夠認爲該故障是由長期性錯誤引發的。這種機制保證了當某一個節點出現故障的時候,不會形成總線長時間癱瘓。
上世紀八十年代以來,汽車ECU愈來愈多,如ABS,電控門窗,電子燃油噴射裝置。若是仍然採用常規的點對點佈線方式,即電線一段與開關相接,另外一端與用電設備相通,將會致使車上電線數目的急劇增長,從而帶來線束的冗餘及維修成本的提升。這就對汽車的線束分佈及信息通信提出了更高的要求。總線技術能夠實現信息的實時共享,解決了傳統佈線方式中線束多,佈線難,成本高等問題,CAN(Controller Area Network)總線技術應運而生。
點對點通訊
總線通訊
CAN總線是由德國研發和生產汽車電子產品著稱的BOSCH公司開發的,並最終成爲國際標準(ISO11519),是國際上應用最普遍的現場總線之一。CAN總線是一種多主控(Multi-Master)的總線系統。傳統總線系統如USB或以太網等是在總線控制器的協調下,實現從A節點到B節點大量數據的傳輸。CAN網絡的消息是廣播式的,即在同一時刻網絡上全部節點偵測的數據是一致的,它是一種基於消息廣播模式的串行通訊總線。
CAN總線的不少優勢,使得它獲得了普遍的應用,如傳輸速度最高到1Mbps, 通訊距離最遠到10km,無損位仲裁機制,多主結構。
CAN總線標準
CAN總線標準之規定了物理層和數據鏈路層,至於應用層須要用戶自定義。不一樣的CAN標準僅物理層不一樣。物理層和數據鏈路層:ISO11898;應用層:不一樣的應用領域使用不一樣的應用層標準。
CAN拓撲網絡
鏈接在CAN總線上的設備叫作節點設備(CAN Node),CAN網絡的拓撲通常爲線型。線束最經常使用的是雙絞線,線上傳輸爲對稱的差分電平信號。下圖爲CAN總線網絡示意圖,節點主要包括Host、控制器和收發器。Host常集成有CAN控制器,CAN控制器負責處理協議相關功能,以減輕Host的負擔。CAN收發器將控制器鏈接到傳輸媒介。一般控制器和總線收發器經過光耦或磁耦隔離,這樣即便總線上過壓損壞收發器,控制器和Host設備也能夠獲得保護。
在發送數據時,CAN控制器把要發送的二進制編碼經過CAN_Tx線發送到CAN收發器,而後由收發器把這個普通的邏輯電平信號轉化成差分信號,經過差分線CAN_High和CAN_Low輸出到CAN總線網絡。接收數據過程,相反。採用差分信號,能夠取得更好的電磁兼容效果。所以,CAN總線物理傳輸媒介只須要兩根線。
高速CAN總線最高信號傳輸速率爲1Mbps,支持最長距離40m。ISO11898-2要求在高速CAN總線兩段安裝端接電阻RL(端接電阻通常爲120Ω,由於電纜的特性阻抗爲120 Ω,爲了模擬無限遠的傳輸線。)以消除反射。低速CAN最高速度只有125Kbps,因此ISO11898-3沒有端接要求。
由於傳輸距離越大,信號時延也越大,爲了保證消息的正確採樣,總線上的信號速率相應也要降低。下圖是推薦的信號速率與距離的關係。
CAN收發器
CAN總線分高速CAN和低速CAN,收發器也分爲高速CAN收發器(1Mbps)和低速CAN收發器(125Kbps)。低速CAN也叫Fault
Tolerance CAN,指的是即便總線上一根線失效,總線依然能夠通訊。如同串口中的MAX3232用做電平轉換,CAN收發器的做用則是把邏輯信號轉換爲差分信號。
差分信號
CAN總線採用差分信號傳輸,一般狀況下只須要兩根信號線就能夠進行正常的通訊。在差分信號中,邏輯0和邏輯1是用兩根差分信號線的電壓差來表示。當處於邏輯1,CAN_High和CAN_Low的電壓差小於0.5V時,稱爲隱性電平(Recessive);當處於邏輯0,CAN_High和CAN_Low的電壓差大於0.9V,稱爲顯性電平(Dominant)。
高速CAN
低速容錯CAN (Fault Tolerance CAN)
CAN總線聽從「線與」機制:「顯性」位能夠覆 蓋「隱性」位;只有全部節點都發 送「隱性」位, 總線才處於「隱性」 狀態。這種「線與」機制使CAN總線呈現顯性優先的特性。
CAN總線鏈接器
下一部分將介紹CAN總線數據鏈路層,和CAN總線同步機制。
上一篇文章講了CAN總線的歷史、標準、物理層,如今接着介紹CAN總線數據鏈路層,和CAN總線同步機制。
在SPI通訊中,片選、時鐘信號、數據輸入及數據輸出這四個信號都有單獨的信號線。而CAN使用的是兩條差分信號線,只能表達一個信號。簡潔的物理層決定了CAN必然要配上一套更爲複雜的協議。如何用一個信號通道實現一樣甚至更強大的功能,答案就是對數據或操做命令進行打包。
通訊機制
多主機(Multi-Master)
安全敏感的應用(如汽車動力)對通訊系統的可靠性要求很高。將總線可否正常工做歸結到單一節點是很是危險的,比較合理的方案是對總線接入的去中心化,即每一個節點都有接入總線的能力。這也是CAN總線採用多主控(Multi-Master)線性拓撲結構的緣由。
在CAN總線上,每一個節點都有往總線上發送消息的能力,而消息的發送沒必要聽從任何預先設定的時序,通訊是事件驅動的。只有當有新的信息傳遞時,CAN總線才處於忙碌的狀態,這使得節點接入總線速度很是快。CAN總線理論最高數據傳輸速率爲1Mbps,對於異步事件反應迅速,基本對於ms級別的實時應用沒有任何問題。
尋址機制
不一樣於其它類型的總線,CAN總線不設定節點的地址,而是經過消息的標識符(Identifier)來區別消息。這種機制雖然會增長消息的複雜度(增長標識符),可是節點在此狀況下能夠無需瞭解其餘節點的情況,而相互間獨立工做。在總線上增長節點時僅需關注消息類型,而非系統上其餘節點的情況。這種以消息標識符尋址的方式,讓總線上增長節點變得更加靈活。
總線訪問CSMA/CD+AMP
CAN總線通訊原理可簡單描述爲多路載波偵聽+基於消息優先級的衝突檢測和非破壞性的仲裁機制(CSMA/CD+AMP)。CSMA(Carrie
Sense Multiple Access)指的是全部節點必須都等到總線處於空閒狀態時才能往總線上發送消息;CD+AMP(Collision
Detection + Arbitration on Message Priority)指的是若是多個節點往總線上發送消息時,具有最高優先級的消息得到總線。
發送低優先級報文的節點退出仲裁後,在下次總線空閒時自動重發報文。
高優先級的報文不能中斷低優先級報文的發送。
報文接收過濾
CAN控制器大多具備根據ID過濾報文的功能,即只接收某些ID的報文。節點對接收到的報文進行過濾:比較消息ID與選擇器(Accepter)中和接受過濾相關位是否相同。若是相同,接收;若是不相同,則過濾。
CAN的報文種類及結構
報文的種類
在原始數據段的前面加上傳輸起始標籤、片選(識別)標籤、控制標籤,在數據的尾段加上CRC校驗標籤、應答標籤和傳輸結束標籤。把這些內容按特定的格式打包好,就能夠用一個通道表達各類信號了。各類各樣的標籤,起到了協同傳輸的做用。當整個數據包被傳輸到其餘設備時,只要這些設備按格式去解讀,就能還原出原始數據。相似這樣的數據包就被稱爲CAN的數據幀。
爲了更有效的控制通訊,CAN一共規定了5中類型的幀,幀也稱爲報文。
數據幀
數據幀在CAN通訊中最主要,也最複雜。數據幀以一個顯性位(邏輯0)開始,以7個連續的隱性位(邏輯1)結束。CAN總線的數據幀有標準格式(Standard
Format)和擴展格式(Extended
Format)的區分。
數據幀能夠分爲七段:
標識一個數據幀的開始,固定一個顯性位。
用於同步, 總線空閒期間的任何隱性到顯性的跳變都將引發節點進行 硬同步。只有總線在空閒期間節點纔可以發送SOF。
仲裁段的內容主要爲本數據幀的ID信息。數據幀分爲標準格式和擴展格式兩種,區別就在於ID信息的長度:標準格式的ID爲11位;擴展格式爲29位。在CAN協議中,ID決定着數據幀發送的優先級,也決定着其餘設備是否會接收這個數據幀。
仲裁段除了報文ID外,還有RTR, IDE, SRR位。
在控制段,r1(reserved1)和r0(reserved0)爲保留位,默認設置爲顯性位。最主要的是DLC(Data Length Code)段,它是用二進制編碼表示本報文中的數據段包含多少個字節。DLC段由4位組成,DLC3−DLC0,表示的數字爲0-8.
數據幀的核心內容,有0-8個字節長度,由DLC肯定。
爲了保證報文的正確傳輸,CAN的報文包含了一段15位的CRC校驗碼,一旦接收端計算出的CRC碼跟接收到的CRC碼不一樣,就會向發送端反饋出錯信息以及從新發送。CRC部分的計算和出錯處理通常由CAN控制器硬件完成,或由軟件控制最大重發數。
在CRC校驗碼以後,有一個CRC界定符,它爲隱性位,主要做用是把CRC校驗碼與後面的ACK段隔開。
包含確認位(ACK slot)和界定符(Delimiter,
DEL)。ACK在發送節點發送時,爲隱性位。當接收節點正確接收到報文時,對其用顯性位覆蓋。DEL界定符一樣爲隱性位,用於隔開。
幀結束段由發送端發送7個隱性位表示結束。
CAN總線使用位同步的方式來確保通訊時序,以及對總線的電平進行正確採樣。
位時序
在講位時序以前,先介紹幾個基本概念。
Time Quantum 時間份額tQ :CAN控制器工做的最小時間單位,一般對系統時鐘分頻獲得。
波特率:單位時間內(1s)傳輸的數據位,公式:1/位時間。舉個栗子,系統時鐘頻率36MHz,預分頻因子爲4,則CAN時鐘頻率9MHz,則Tq=1/9M。假設一個CAN位包含10個Tq,則一個位週期T=10Tq,從而波特率爲1/T=0.9MHz.
爲了實現位同步,CAN協議把每一位的時序分解成下圖所示的四段。這四段的長度加起來即爲一個CAN數據位的長度。一個完整的位由8-25個Tq組成。
一個位的輸出從同步段開始。若總線的跳變沿被包含在SS段的範圍以內,則表示節點與總線的時序同步。節點與總線同步時,採樣點採集到的總線電平便可被肯定爲該電平的電位。SS段的大小爲1Tq.
用於補償信號在網絡和節點傳播的物理延時時間,是總線上輸入比較器延時和輸出驅動器延時總和的兩倍。一般1-8Tq
主要用於補償邊沿階段的偏差,其時間長度在從新同步時能夠加長。初始大小1-8Tq.
也是用於補償邊沿階段的偏差,其時間長度在從新同步時能夠縮短。初始大小2-8Tq.
同步
CAN同步分爲硬同步和從新同步。
同步規則:
硬同步
當總線上出現幀起始信號(SOF,即隱性到顯性的邊沿)時,其餘節點的控制器根據總線上的這個降低沿對本身的位時序進行調整,把該降低沿包含到SS段內。這樣根據起始幀來進行的同步稱爲硬同步。
能夠看到在總線出現幀起始信號時,該節點原來的位時序與總線時序不一樣步,於是這個狀態的採樣點採集到的數據是不正確的。因此節點以硬同步的方式調整,把本身的位時序中的SS段平移至總線出現降低沿的部分,得到同步,這時採樣點採集到的數據是正確數據。
同步前
同步後
從新同步
由於硬同步時只是在有幀起始信號時起做用,沒法確保後續一連串的位時序都是同步的,因此CAN引入了從新同步的方式。在檢測到總線上的時序與節點使用的時序有相位差時(即總線上的跳變沿不在節點時序的SS段範圍),經過延長PBS1段或縮短PBS2段來得到同步,這樣的方式稱爲從新同步。
分兩種狀況:第一種, 節點從總線的邊沿跳變中,檢測到它的時序比總線的時序相對滯後2個Tq,這是控制器在下一個時序中的PBS1段增長2Tq的時間長度,使得節點與總線時序從新同步。
第二種,節點從總線的邊沿跳變中,檢測到它的時序相對超前2Tq,這時控制器在前一個位時序中的PBS2段減小2Tq的時間長度,得到同步。
在從新同步的時候,PBS1和PBS2段的容許加長或縮短的時間長度定義爲,從新同步補償寬度(SJW,reSynchronization Jump Width)。這裏設置的PBS1和PBS2可以增減的最大時間長度SJW=2Tq,若SJW設置的過小則從新同步的調整速度慢,若太大,則影響傳輸速率。