一、CAN總線是什么?
CAN(Controller Area Network)是ISO國際標(biāo)準(zhǔn)化的串行通信協(xié)議。廣泛應(yīng)用于汽車、船舶等。具有已經(jīng)被大家認(rèn)可的高性能和可靠性。
CAN控制器通過組成總線的2根線(CAN-H和CAN-L)的電位差來確定總線的電平,在任一時刻,總線上有2種電平:顯性電平和隱性電平。
“顯性”具有“優(yōu)先”的意味,只要有一個單元輸出顯性電平,總線上即為顯性電平,并且,“隱性”具有“包容”的意味,只有所有的單元都輸出隱性電平,總線上才為隱性電平。(顯性電平比隱性電平更強(qiáng))。
總線上執(zhí)行邏輯上的線“與”時,顯性電平的邏輯值為“0”,隱性電平為“1”。
下圖顯示了一個典型的CAN拓?fù)溥B接圖。
連接在總線上的所有單元都能夠發(fā)送信息,如果有超過一個單元在同一時刻發(fā)送信息,有最高優(yōu)先級的單元獲得發(fā)送的資格,所有其它單元執(zhí)行接收操作。
二、CAN總線的特點(diǎn)
CAN總線協(xié)議具有下面的特點(diǎn):
1) 多主控制
當(dāng)總線空閑時,連接到總線上的所有單元都可以啟動發(fā)送信息,這就是所謂的多主控制的概念。
先占有總線的設(shè)備獲得在總線上進(jìn)行發(fā)送信息的資格。這就是所謂的CSMA/CR(Carrier Sense MultipleAccess/Collosion Avoidance)方法
如果多個設(shè)備同時開始發(fā)送信息,那么發(fā)送最高優(yōu)先級ID消息的設(shè)備獲得發(fā)送資格。
2) 信息的發(fā)送
在CAN協(xié)議中,所有發(fā)送的信息要滿足預(yù)先定義的格式。當(dāng)總線沒有被占用的時候,連接在總線上的任何設(shè)備都能起動新信息的傳輸,如果兩個或更多個設(shè)備在同時刻啟動信息的傳輸,通過ID來決定優(yōu)先級。ID并不是指明信息發(fā)送的目的地,而是指示信息的優(yōu)先級。如果2個或者更多的設(shè)備在同一時刻啟動信息的傳輸,在總線上按照信息所包含的ID的每一位來競爭,贏得競爭的設(shè)備(也就是具有最高優(yōu)先級的信息)能夠繼續(xù)發(fā)送,而失敗者則立刻停止發(fā)送并進(jìn)入接收操作。因?yàn)榭偩€上同一時刻只可能有一個發(fā)送者,而其它均處于接收狀態(tài),所以,并不需要在底層協(xié)議中定義地址的概念。
3) 系統(tǒng)的靈活性
連接到總線上的單元并沒有類似地址這樣的標(biāo)識,所以,添加或去除一個設(shè)備,無需改變軟件和硬件,或其它設(shè)備的應(yīng)用層軟件。
4) 通信速度
可以設(shè)置任何通訊速度,以適應(yīng)網(wǎng)絡(luò)規(guī)模。
對一個網(wǎng)絡(luò),所有單元必須有相同的通訊速度,如果不同,就會產(chǎn)生錯誤,并妨礙網(wǎng)絡(luò)通訊,然而,不同網(wǎng)絡(luò)間可以有不同的通訊速度。
5) 遠(yuǎn)程數(shù)據(jù)請求
可以通過發(fā)送“遙控幀”,請求其他單元發(fā)送數(shù)據(jù)。
6) 錯誤檢測、錯誤通知、錯誤恢復(fù)功能
所有單元均可以檢測出錯誤(錯誤檢測功能)。
檢測到錯誤的單元立刻同時通知其它所有的單元(錯誤通知功能)。如果一個單元發(fā)送信息時檢測到一個錯誤,它會強(qiáng)制終止信息傳輸,并通知其它所有設(shè)備發(fā)生了錯誤,然后它會重傳直到信息正常傳輸出去(錯誤恢復(fù)功能)。
7) 錯誤隔離
在CAN總線上有兩種類型的錯誤:暫時性的錯誤(總線上的數(shù)據(jù)由于受到噪聲的影響而暫時出錯);持續(xù)性的錯誤(由于設(shè)備內(nèi)部出錯(如驅(qū)動器壞了、連接有問題等)而導(dǎo)致的)。CAN能夠區(qū)別這兩種類型,一方面降低常出錯單元的通訊優(yōu)先級以阻止對其它正常設(shè)備的影響,另一方面,如果是一種持續(xù)性的錯誤,將這個設(shè)備從總線上隔離開。
8) 連接
CAN總線允許多個設(shè)備同時連接到總線上且在邏輯上沒有數(shù)目上的限制。然而由于延遲和負(fù)載能力的限制,實(shí)際可連接得設(shè)備還是有限制的,可以通過降低通訊速度來增加連接的設(shè)備個數(shù)。相反,如果連接的設(shè)備少,通訊的速度可以增加。
三、CAN總線狀態(tài)有三種:
1、主動錯誤狀態(tài)——(通常說的正常狀態(tài)也應(yīng)該包含在內(nèi))處于該狀態(tài)的節(jié)點(diǎn)可以不受任何限制地發(fā)送報文和主動錯誤幀(由顯性位構(gòu)成)。
2、被動錯誤狀態(tài)——處于被動錯誤狀態(tài)的節(jié)點(diǎn)可以發(fā)送報文和被動錯誤幀
?。ㄓ呻[性位構(gòu)成)。
3、總線關(guān)閉狀態(tài)——處于總線關(guān)閉狀態(tài)的節(jié)點(diǎn)暫時不能參與總線通訊。這一
狀態(tài)下,既無法發(fā)送報文,也無法接收報文。只有發(fā)送器能夠進(jìn)入總線關(guān)閉狀態(tài)?!托枰M(jìn)行錯誤處理了。
轉(zhuǎn)換和發(fā)送計數(shù)器、接收計數(shù)器的值相關(guān),轉(zhuǎn)換關(guān)系參見下圖:

四、如何判斷總線忙還是空閑呢
判斷總線狀態(tài)可以監(jiān)測總線電壓,簡單來說CAN_H和CAN_L之間的差分電壓大的(一般在2V左右)就是顯性狀態(tài),差分電壓小的(理論上是0V)就是隱性,當(dāng)然容錯CAN要復(fù)雜很多,就不是這樣的。當(dāng)你一值監(jiān)測到總線都處于隱性狀態(tài)(就是兩根線電壓值差不多)那就說明總線處于空閑狀態(tài),如果是顯隱交替,那就是總線不處于空閑狀態(tài)。
CAN總線空閑的定義是連續(xù)11個位的隱性電平(邏輯為1),一般用于總線關(guān)閉時的自動恢復(fù)。而CAN的顯性電平邏輯為0,一旦有顯性就說明肯定至少有1個節(jié)點(diǎn)在發(fā)送波形,那就不是空閑了。CAN的幀間隙是連續(xù)3個以上隱性電平。
電子發(fā)燒友App





















評論