CAN匯流排簡明易懂教程 一

2021-08-15 22:18:25 字數 1662 閱讀 9458

先看看工作原理

當 can 匯流排上的乙個節點(站)傳送資料時,它以報文的形式廣播給網路中所有節點,對每個節點來說,無論資料是否是發給自己的,都對其接收。

每組報文開頭的11 位字元為識別符號,定義了報文的優先順序,這種報文格式成為面向內容的編制方案。同一系統中識別符號是唯一的,不可能有兩個站傳送具有相同識別符號的報文,當幾個站同時競爭匯流排讀取時,這種配置十分重要。

大體的工作原理我們搞清了,但是根本的協議我們還要花一番功夫。下面介紹乙個重要的名詞,「顯性」和「隱性」:

在我看到的很多文章裡,有很多顯性和隱性的地方,為此我頭痛不已,最終我把它們徹底弄明白了。

首先 can 資料匯流排有兩條導線,一條是黃色的,一條是綠色的------分別是can_high 線和can_low 線,當靜止狀態時,這兩條導線上的電平一樣,這個電平稱為靜電平,大約為2.5 伏。

這個靜電平狀態就是**狀態,也稱隱性電平,也就是沒有任何干擾的時候的狀態稱為隱性狀態。當有訊號修改時,can_high 線上的電壓值變高了,一般來說會公升高至少1v;而can_low 線上的電壓值會降低乙個同樣值,也是1v。

那麼這時候,can_high 就是 2.5v+1v=3.5v,它就處於啟用狀態了。而can_low 降為2.5v-1v=1.5v。可以看看這個圖

由此我們得到

在隱性狀態下,can_high 線與can_low 沒有電壓差,這樣我們看到沒有任何變化也就檢測不到訊號。但是在顯性狀態時,改值最低為2v,我們就可以利用這種變化才傳輸資料了。所以出現了那些幀,那些幀中的場,那些場中的位,云云~~~~~~~~~~~

在匯流排上通常邏輯1 表示隱性。而0 表示顯性。這些1 啊,0 啊,就可以利用起來為我們傳資料了。利用這種電壓差,我們可以接收訊號。

一般來說,控制單元通過收發器連線到 can 驅動匯流排上,這個收發器(顧名思義,可傳送,可接收)內有乙個接收器,該接收器是安裝在接收一側的差動訊號放大器。然後,這個放大器很自然地就放大了can_high 和can_low 線的電平差,然後傳到接收區。如下圖

由上圖可知,當有電壓差,差動訊號放大器放大傳輸,將相應的資料位轉化為0。

下面我們進入重點難點-----報文

所謂報文,就是can 匯流排上要傳輸的資料報,為了安全,我們要給我們傳輸的資料報編碼定一下協議,這樣才能不容易出錯,所以出現了很多的幀,以及仲裁啊,crc 效驗。這些都是難點。

識別符的概念

識別符顧名思義,就是為了區分不同報文的可以鑑別的好多字元位。有標準的,和擴充套件的。標準的是11 位,擴充套件的是29 位。他有乙個功能就是可以提供優先順序,也就是決定哪個報文優先被傳輸,報文識別符號的值越小,報文具有越高的優先權。

can 的報文格式有兩種,不同之處其實就是識別符長度不同,具有11 位識別符的幀稱為標準幀,而還有29 位識別符的幀為擴充套件幀,can 報文有以下4 個不同的幀型別。分別是:

(1) 資料幀:資料幀將資料從傳送器傳輸到接收器;

(2) 遠端幀:匯流排節點發出遠端幀,請求傳送具有同一識別符號的資料幀;

(3) 錯誤幀:任何節點檢測到匯流排錯誤就發出錯誤幀;

(4) 過載幀:過載幀用已在先行的後續的資料幀(或遠端幀)之間提供一附加的延時。

CAN匯流排簡明易懂教程(二)

我們先研究資料幀吧。一,資料幀由 7 個不同位場組成 幀起始 仲裁場 控制場 資料場 crc場 應答場 幀結尾 這裡的位場,就是不同位的組合,這名字起的很爛,讓人看了感覺很抽象。我們來看看這些個不同的位場吧。一開始是一位幀起始,也叫sof。它用顯性位表示,也就是0 它告訴我們,兩個線上有電壓差了,也...

CAN匯流排簡明易懂教程(二)

2018年02月28日 21 36 55 長弓的堅持 閱讀數 4225 我們先研究資料幀吧。一,資料幀由 7 個不同位場組成 幀起始 仲裁場 控制場 資料場 crc場 應答場 幀結尾 這裡的位場,就是不同位的組合,這名字起的很爛,讓人看了感覺很抽象。我們來看看這些個不同的位場吧。一開始是一位幀起始,...

CAN匯流排簡明易懂教程(三)

2018年02月28日 21 42 53 長弓的堅持 閱讀數 5188 二 遠端幀 通過傳送遠端幀,匯流排的節點發出遠端幀,請求以前傳送給它資料幀的節點再傳送一遍。具體傳送哪個資料幀,由遠端幀的識別符號決定。與資料幀類似,遠端幀也有標準格式和擴充套件格式,而且都由6個不同的位場組成 幀起始 仲裁場 ...