1. 程式人生 > >CAN匯流排小結

CAN匯流排小結

概述 CAN(Controller Area Network)即控制器區域網,是一種能夠實現分散式實時控制的序列通訊網路

想到CAN就要想到德國的Bosch公司,因為CAN就是這個公司開發的(和Intel)

CAN有很多優秀的特點,使得它能夠被廣泛的應用。比如:傳輸速度最高到1Mbps,通訊距離最遠到10km,無損位仲裁機制,多主結構。

近些年來,CAN控制器價格越來越低,很多MCU也集成了CAN控制器。現在每一輛汽車上都裝有CAN匯流排。

一個典型的CAN應用場景: CAN匯流排標準只規定了物理層資料鏈路層,需要使用者自定義應用層。不同的CAN標準僅物理層不同。

CAN收發器負責邏輯電平和物理訊號之間的轉換。

將邏輯訊號轉換成物理訊號(差分電平),或者將物理訊號轉換成邏輯電平。

CAN標準有兩個,即IOS11898和IOS11519,兩者差分電平特性不同。

高低電平幅度低,對應的傳輸速度快; *雙絞線共模消除干擾,是因為電平同時變化,電壓差不變。 多個節點連線,只要有一個為低電平,匯流排就為低電平,只有所有節點輸出高電平時,才為高電平。所謂"線與"。

CAN匯流排有5個連續相同位後,就插入一個相反位,產生跳變沿,用於同步。從而消除累積誤差。 CAN匯流排,終端電阻的接法:

為什麼是120Ω,因為電纜的特性阻抗為120Ω,為了模擬無限遠的傳輸線

資料鏈路層 CAN匯流排傳輸的是CAN幀,CAN的通訊幀分成五種,分別為資料幀、遠端幀、錯誤幀、過載幀和幀間隔。

資料幀用來節點之間收發資料,是使用最多的幀型別;遠端幀用來接收節點向傳送節點接收資料;錯誤幀是某節點發現幀錯誤時用來向其他節點通知的幀;過載幀是接收節點用來向傳送節點告知自身接收能力的幀;用於將資料幀、遠端幀與前面幀隔離的幀。

資料幀根據仲裁段長度不同分為標準幀(2.0A)和擴充套件幀(2.0B)

幀起始由一個顯性位(低電平)組成,傳送節點發送幀起始,其他節點同步於幀起始;

幀結束由7個隱形位(高電平)組成。 仲裁段 CAN匯流排是如何解決多點競爭的問題?

由仲裁段給出答案。

CAN匯流排控制器在傳送資料的同時監控匯流排電平,如果電平不同,則停止傳送並做其他處理。如果該位位於仲裁段,則退出匯流排競爭;如果位於其他段,則產生錯誤事件。 幀ID越小,優先順序越高。由於資料幀的RTR位為顯性電平,遠端幀為隱性電平,所以幀格式和幀ID相同的情況下,資料幀優先於遠端幀;由於標準幀的IDE位為顯性電平,擴充套件幀的IDE位為隱形電平,對於前11位ID相同的標準幀和擴充套件幀,標準幀優先順序比擴充套件幀高。

控制段 共6位,標準幀的控制段由擴充套件幀標誌位IDE、保留位r0和資料長度程式碼DLC組成;擴充套件幀控制段則由IDE、r1、r0和DLC組成。

CRC段 CRC校驗段由15位CRC值和CRC界定符組成。 ACK段 當接收節點接收到的幀起始到CRC段都沒錯誤時,它將在ACK段傳送一個顯性電平,傳送節點發送隱性電平,線與結果為顯性電平。

遠端幀 遠端幀分為6個段,也分為標準幀和擴充套件幀,且RTR位為1(隱性電平) CAN是可靠性很高的匯流排,但是它也有五種錯誤。

CRC錯誤:傳送與接收的CRC值不同發生該錯誤;

格式錯誤:幀格式不合法發生該錯誤;

應答錯誤:傳送節點在ACK階段沒有收到應答資訊發生該錯誤;

位傳送錯誤:傳送節點在傳送資訊時發現匯流排電平與傳送電平不符發生該錯誤;

位填充錯誤:通訊線纜上違反通訊規則時發生該錯誤。

當發生這五種錯誤之一時,傳送節點或接受節點將傳送錯誤幀

為防止某些節點自身出錯而一直髮送錯誤幀,干擾其他節點通訊,CAN協議規定了節點的3種狀態及行為

**CAN收發器和控制器分別對應CAN的物理層和資料鏈路層,**完成CAN報文的收發;功能電路,完成特定的功能,如訊號採集或控制外設等;主控制器與應用軟體按照CAN報文格式解析報文,完成相應控制。

CAN硬體驅動是執行在主控制器(如P89V51)上的程式,它主要完成以下工作:基於暫存器的操作,初始化CAN控制器、傳送CAN報文、接收CAN報文;

如果直接使用CAN硬體驅動,當更換控制器時,需要修改上層應用程式,移植性差。在應用層和硬體驅動層加入虛擬驅動層,能夠遮蔽不同CAN控制器的差異。

一個CAN節點除了完成通訊的功能,還包括一些特定的硬體功能電路,功能電路驅動向下直接控制功能電路,向上為應用層提供控制功能電路函式介面。特定功能包括訊號採集、人機顯示等。

CAN匯流排網路主要掛在CAN_H和CAN_L,各個節點通過這兩條線實現訊號的序列差分傳輸,為了避免訊號的反射和干擾,還需要在CAN_H和CAN_L之間接上120歐姆的終端電阻,但是為什麼是120歐姆呢?那是因為電纜的特性阻抗為120歐。

CAN匯流排採用不歸零碼位填充技術,也就是說CAN總線上的訊號有兩種不同的訊號狀態,分別是顯性的(Dominant)邏輯0和隱形的(recessive)邏輯1,訊號每一次傳輸完後不需要返回到邏輯0(顯性)的電平。

位填充規則:傳送器只要檢測到位流裡有5個連續相同值的位,便自動在位流裡插入補充位。