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

2021-09-24 21:55:54 字數 3475 閱讀 1876

2023年02月28日 21:36:55 長弓的堅持 閱讀數 4225

我們先研究資料幀吧。

一,資料幀由 7 個不同位場組成(幀起始、仲裁場、控制場、資料場、crc場、應答場、幀結尾)。

這裡的位場,就是不同位的組合,這名字起的很爛,讓人看了感覺很抽象。我們來看看這些個不同的位場吧。一開始是一位幀起始,也叫sof。它用顯性位表示,也就是0;它告訴我們,兩個線上有電壓差了,也就是有資料了。

這個幀起始看起來只有一位,其實不簡單了。為了讓所有的分站都同步於傳送報文的傳送站,好接收資料,有很多要考慮的地方。

報文的資料幀結構

然後下乙個場是仲裁場。這個仲裁很抽象,其實在這裡就是為了解決乙個問題。如果2 個或2 個以上的單元同時開始傳送報文,那麼就會有匯流排訪問衝突,那麼仲裁機制就是用來根據識別符號優先順序來乙個乙個的去掉低階別的資料。我們可以詳細的描述這場生動的爭搶匯流排的戰鬥。

當匯流排處於空閒狀態時呈隱性電平,此時任何節點都可以向匯流排傳送顯性電平作為幀的開始。2 個或2 個以上的節點同時傳送開始爭搶匯流排,但是匯流排只能被乙個人搶走。這時候到底怎麼決定誰留下,誰滾蛋呢。我們開始思索,我們以前定義了識別符號,識別符號有優先順序,它越小,它優先順序越高。那麼怎麼實現的呢。看下面圖:

首先搞明白兩點,

一、下圖中, 低波形代表0(顯性),高波形代表1(隱性);

二、當隱性碰到顯性,就變為顯性。

如圖所示,節點 a 和節點b 的識別符號的第10、9、8 位電平相同,因此兩個節點偵聽到的資訊和它們發出的資訊相同。第7位節點b發出乙個「1」,但從節點上接收到的訊息卻是「0」。

為什麼呢,因為a 節點同時發出顯性位,讓匯流排也變成顯性了,也就是0。節點b 會退出傳送處於單純監聽方式而不傳送資料;節點a 成功傳送仲裁位從而獲得匯流排的控制權,繼而傳送全部訊息。

匯流排中的訊號持續跟蹤最後獲得匯流排控制權發出的報文,本例中節點a的報文將被跟蹤。這種非破壞性位仲裁方法的優點在於,在網路最終確定哪個節點被傳送前,報文的起始部分已經在網路中傳輸了,因此具有高優先順序的節點的資料傳輸沒有任何延時。

在獲得匯流排控制權的節點傳送資料過程中,其他節點成為報文的接收節點,並且不會在匯流排再次空閒之前傳送報文,在這逐位的比較中,最終節點b 因為第七位的偏差丟掉了匯流排。從此單純監聽,江山就拱手讓給了節點a 了。這就是仲裁機制

上面我們說過,報文有兩種格式,標準和擴充套件。這裡,不同的格式仲裁場是不一樣的。標準格式下,仲裁場由11 位識別符和rtr 位組成。

但在擴充套件格式裡,包括29 位識別符、srr 位、ide 位、rtr 位。

rtr 位,remote tra****sion request bit 全稱為遠端傳送請求位。它在資料幀裡必須為顯性0 ,但在遠端幀裡為隱性1。

我暈,為什麼這麼搞呢,不急,先留著這個問題。

srr 位,替代遠端請求位,srr 是一隱性位,也就是1,它在擴充套件格式的標準幀rtr 位位置,那麼標準幀怪不得優先於擴充套件幀了,因為在傳輸完11 位識別符號之後(擴充套件幀的後18 位在最後傳送,先傳送11 位識別符號),輪到標準幀的rtr 位和擴充套件幀的srr 位了。

這時候,標準幀的rtr 為顯性,而擴充套件幀srr 為隱性,這樣,匯流排自然就被標準幀佔據。

同時上面那個問題,也一目了然了,can 匯流排協議設計者,肯定是設計了資料幀優先於遠端幀。所以ide(identifier extension bit),全稱識別符擴充套件位,它屬於擴充套件格式的仲裁場

對於擴充套件格式,ide位屬於仲裁場;對於標準格式,ide位屬於控制場。標準格式的ide位為「顯性」,而擴充套件格式的ide

位為「隱性」。

標準格式中的資料幀

拓展格式中的資料幀

控制場控制場由6個位組成,標準格式和擴充套件格式的控制場格式不同。標準格式裡的幀包括資料長度**、ide位(為顯性位)及保留位r0。擴充套件格式裡的幀包括資料長度**和兩個保留位:r1和r0。其保留位必須傳送為顯性,但是接收器認可「顯性」和「隱性」位的任何組合。其結構如圖所示:

控制場結構

資料長度**(標準格式以及擴充套件格式)dlc,如下表所示

資料幀長度**dlc

資料長度**指示了資料場裡的位元組數量。其中:d—「顯性」, r—「隱性」,資料幀允許的資料位元組數為。其他的數值不允許使用。

資料場資料場由資料幀裡的傳送資料組成。它可以為0~8個位元組,每位元組包含了8個位,首先傳送最高有效位(msb)。

迴圈冗餘碼crc場

是資料通訊領域中最常用的一種差錯校驗碼,其特徵是資訊字段和校驗欄位的長度可以任意選定。

crc場包括crc序列(crc sequence),其後是crc界定符(crc delimiter),結構如圖:

生成 crc 碼的基本原理:

任意乙個由二進位制位串組成的**都可以和乙個係數僅為『0』和『1』取值的多項式一一對應。例如:**1010111 對應的多項式為x6+x4+x2+x+1,而多項式為x5+x3+x2+x+1 對應的**101111。

參考一下下面的例題,自已再領悟一下吧!已知資訊位為1101,生成多項式g(x)= x3+x+1,求crc 碼。

要傳輸的資訊序列為1101,在末尾新增所給多項式的最高次階個0,如本題為x^3,則新增3個0,變為:1101000;

由多項式g(x)=x3+x+1,得其階數為1的二進位制編碼為:1011;1101000對1011進行模二除法,所得到的餘數即為校驗碼,把校驗碼新增在原資料尾部即為所求的編碼,則實際傳送的資料序列為1101001。校驗碼計算過程如圖所示:

模二除法

應答場(ack field)

應答場長度為2個位,包含應答間隙(ack slot)和應答界定符(ack delimiter),如圖所示。在ack場(應答場)裡,傳送節點傳送兩個「隱性」位。

當接收器正確地接收到有效的報文,接收器就會在應答間隙(ack slot)期間向傳送器傳送一「顯性」位以示應答。

幀結尾每乙個資料幀和遠端幀均由一標誌序列界定。這個標誌序列由7個「隱性」位組成。

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

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

CAN匯流排簡明易懂教程 一

先看看工作原理 當 can 匯流排上的乙個節點 站 傳送資料時,它以報文的形式廣播給網路中所有節點,對每個節點來說,無論資料是否是發給自己的,都對其接收。每組報文開頭的11 位字元為識別符號,定義了報文的優先順序,這種報文格式成為面向內容的編制方案。同一系統中識別符號是唯一的,不可能有兩個站傳送具有...

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

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