首頁>技術>

1 CAN 協議中的幀

在瞭解CAN匯流排的通訊機制之前,首先需要了解CAN協議中五種型別的幀結構:

資料幀遙控幀錯誤幀過載幀幀間隔

在講述五種幀結構的過程中,穿插講述CAN匯流排的通訊機制。

2 資料幀與遙控幀

在CAN協議中,資料幀和遙控幀有著諸多相同之處,所以,在這裡,我們將資料幀和遙控幀放在一起來講。顧名思義,所謂資料幀,就是包含了我們要傳輸的資料的幀,其作用當然也就是承載傳送節點要傳遞給接收節點的資料。而遙控幀的作用可以描述為:請求其它節點發出與本遙控幀具有相同ID號的資料幀。比如:在某一個時刻,節點Node_A向匯流排傳送了一個ID號為ID_2的遙控幀,那麼就意味著Node_A請求總線上的其他節點發送ID號為ID_2的資料幀。節點Node_B能夠發出ID號為ID_2的資料幀,那麼Node_B就會在收到Node_A發出的遙控幀之後,立刻向總線上傳送ID號為ID_2的資料幀。

資料幀 的幀結構如下圖所示,包含七個段:幀起始、仲裁段、控制段、資料段、CRC段、ACK段、幀結束

遙控幀 相比於資料幀,從幀結構上來看,只是少了資料段,包含六個段:幀起始、仲裁段、控制段、CRC段、ACK段、幀結束

資料幀和遙控幀都分為標準幀(CAN2.0A)擴充套件幀(CAN2.0B)兩種結構。遙控幀相比於資料幀除了缺少資料段之外,遙控幀的RTR位恆為隱性1,資料幀的RTR位恆為顯性0

2.1 幀起始

幀的最開始的一位是幀起始,也叫SOF(Start Of Frame),SOF恆為顯性位,即邏輯 0 。幀起始表示CAN_H 和 CAN_L上有了電位差,也就是說,一旦總線上有了SOF就表示總線上開始有報文了。

2.2 仲裁段

仲裁段是用來判定一幀報文優先順序的依據,仲裁段中的ID號也是實現報文過濾機制的基礎。仲裁段由以下幾個部分組成,資料幀仲裁段:

遙控幀仲裁段:

可以看到相比於資料幀仲裁段RTR位恆為顯性0,遙控幀仲裁段的RTR位恆為隱性1。

2.2.1仲裁過程

在CAN匯流排通訊中,有一種回讀機制:指的是節點在向總線上傳送報文的過程中,同時也對總線上的二進位制位進行“回讀”。透過這種機制,節點就可以判斷出本節點發出的二進位制位總線上當前的二進位制位是否一致。

還有一種叫做線與機制:指的是在總線上,顯性位能夠覆蓋隱性位。舉個例子:在某一個時刻,節點Node_A向匯流排傳送了一個顯性位0,Node_B向匯流排傳送了一個隱性位1,那麼在該時刻,總線上的電平為顯性0。

下面將以標準資料幀的一個例子來分析CAN匯流排的非破壞性逐位仲裁機制

一條CAN總線上有Node_A 和 Node_B兩個節點,在匯流排空閒時,總線上為隱性電平,就在這個時候Node_A 和 Node_B 這兩個節點同時向總線上傳送資料,如下圖:

從圖中可以看出,在Node_A 和 Node_B 傳輸資料前,匯流排處於空閒狀態,為隱性電平1,這也就意味著,此時總線上的任意節點都可以向匯流排傳送資料。在某一時刻,Node_A 和Node_B兩個節點同時向總線上傳送資料。按照線與機制,總線上的電位為:

節點/ID號ID10ID9ID8ID7ID6…Node_A10101…Node_B1011……匯流排10101…

在Node_A和Node_B兩個節點向匯流排傳送資料時,他們同時回讀總線上的電平。從圖中我們可以看到,Node_A 和Node_B的ID10 、ID9、ID8電位相同,因此這兩個節點從總線上聽到的電位與他們自己發出的電位也相同,這個時候還沒有分出勝負。當Node_B回讀總線上的 ID7 這一位時,發現總線上的電平跟它自己傳送到總線上的不一樣,此時,Node_B知道自己在爭奪匯流排的仲裁中失敗了,那麼它主動地轉換為接收狀態,不再發出資訊。於是在此之後,總線上的電平和Node_A發出的電平一致,也就是說,Node_A佔據了匯流排的傳送權。透過上面的分析我們可以看到,在整個仲裁過程中:

在Node_A獲取匯流排的傳送權之後,Node_A接著傳送自己的Msg_A,因此在競爭匯流排的過程中不會對Msg_A的傳輸造成延時;在兩個節點競爭匯流排的過程中,不會破壞Msg_A;

正是由於上面的兩點,才稱之為非破壞性仲裁機制

Tips: 透過上面仲裁過程的分析,我們可以解釋CAN匯流排通訊的三個特點:1)多主控制方式:只要匯流排空閒,總線上的任意節點都可以向總線上傳送資料,直到節點在仲裁中一個個失敗,最後只留下一個節點獲得匯流排的傳送權。2)非破壞性仲裁機制:仲裁段逐位總裁,依靠回讀機制、線與機制得以實現。3)半雙工通訊:所謂半雙工通訊,指的是節點不能在自己傳送報文的時候,同時接收其他節點發送來的報文。這是顯然的,一個節點正在傳送報文時,已經佔據了匯流排的傳送權,其他節點肯定不能向總線上傳送報文。

看一個CAN報文傳送的例項,CAN總線上有四個節點:Node_A、Node_B、Node_C、Node_D。傳送的報文的ID號分別為5、7、3、6.

2.2.2 仲裁段中的RTR,SRR和IDE位

透過上面標準資料幀的仲裁過程分析,我們已經理解了CAN匯流排的仲裁機制。但同時也注意到仲裁段除了ID號之外,還有其他的位。

1)RTR位:

Tranmission Request Bit (遠端傳送請求位)。在資料幀中,RTR位恆為顯性位0,在遙控幀中,恆為隱性1

Tips: 這麼做的原因是保證資料幀優先順序高於遙控幀。比如:在某一時刻t,節點Node_A發出了ID號為ID_2遙控幀報文來請求總線上的其它節點發出ID號為ID_2的資料幀報文。但是就在同一時刻t,節點Node_B發出了ID號為ID_2的資料幀報文。這個時候怎麼辦呢,顯然依靠ID號不能仲裁出這兩幀報文(一個遙控幀,一個數據幀,ID號相同)誰能佔據匯流排的傳送權,這種情況下,RTR位就起作用了,由於RTR在資料幀中恆為顯性0,在遙控幀中恆為隱性1,所以在ID號相同的情況下,一定是資料幀仲裁獲勝。這就解釋了 RTR位的作用:在ID號相同的情況下,保證資料幀的優先順序高於遙控幀。

2)SRR位

Substitutes for Remote Requests Bit(替代遠端請求位),在擴充套件幀(資料幀或遙控幀)中,SRR恆為隱性位1,並且可以發現,擴充套件幀的隱性SRR位正好對應標準幀的顯性RTR位,這就解釋了 SRR位的作用:在前11位ID號相同的情況下,標準資料幀的優先順序高於擴充套件資料幀

3)IDE位

全稱:Identifier Extension Bit(識別符號擴充套件位)。在擴充套件幀中恆為隱性1,在標準幀中,IDE位於控制段,且恆為顯性0。且擴充套件幀IDE位和標準幀IDE位位置對應,這就保證了: 在前11位ID號相同的情況下,標準遙控幀的優先順序一定高於擴充套件遙控幀

總結:在ID號前11位相同的情況下:

RTR:保證資料幀優先順序高於遙控幀;SRR :保證標準資料幀的優先順序高於擴充套件資料幀。IDE :保證標準遙控幀的優先順序高於擴充套件遙控幀。2.2.3 報文過濾

在CAN匯流排中沒有地址的概念,CAN匯流排是透過報文ID來實現收發資料的。CAN節點上都會有一個驗收濾波ID表,其位於CAN節點的驗收濾波器中,如果總線上的報文的ID號在某個節點的驗收濾波ID表中,那麼這一幀報文就能透過該節點驗收濾波器的驗收,該節點就會接收這一幀報文。比如:Node_A傳送了一幀ID號為ID_1的報文Msg_1,Node_B的驗收濾波ID表中恰好有ID_1,於是乎Msg_1就會被Node_B接收。

Tips: 報文過濾機制體現了CAN通訊的兩條特點:1)一對一、組播和廣播2)系統的柔性:正是因為CAN總線上收發報文是基於報文ID實現的,所以總線上新增節點時不會對總線上已有的節點造成影響。

2.3 控制段

資料幀和遙控幀的控制段結構相同:

標準幀中IDE位對應擴充套件幀中的IDE位,保證在前11位ID號相同的情況下,標準幀的優先順序一定高於擴充套件幀;然後是保留位r0和r1(擴充套件幀),保留位r0和r1必須以顯性電平傳送,但是接受方可以接受顯性、隱性及其任意組合的電平;最後是4個位元組的DLC(DLC3、DLC2、DLC1、DLC0)代表資料長度,指示了資料段中的位元組數。對於沒有資料段的遙控幀,DLC表示該遙控幀對應的資料幀的資料段的位元組數。2.4 資料段

資料段可以包含0~8個位元組的資料,從MSB(最高位)開始輸出。

2.5 CRC段

CRC段包含CRC校驗序列和CRC界定符。

CRC校驗序列是根據多項式生成的CRC值,其計算範圍包括:幀起始、仲裁段、控制段和資料段。CRC界定符恆為隱性1

2.6 ACK段

ACK段包含ACK槽ACK界定符兩個位。

傳送節點在ACK段傳送兩個隱性位,即傳送方發出的報文中ACK槽為隱性1;接收節點在接收到正確的報文之後會在ACK槽傳送顯性位0,通知傳送節點正常接收結束。所謂接收到正確的報文指的是接收到的報文沒有填充錯誤、格式錯誤、CRC錯誤。

Tips: 我們以標準資料幀為例來分析ACK段的工作方式:如圖所示,Node_A為傳送節點,Node_B為接收節點。Node_A在ACK段傳送兩個隱性位1。Node_B正確接收到這一報文後,在ACK段的ACK槽中填充了一個顯性位0。注意,這個時候Node_A回讀到的總線上的額電平為顯性0,於是這個時候,Node_A就知道自己發出去的報文至少有一個節點正確接收了。

2.7 幀結束

幀結束段表示該幀報文的結束,由7個隱性位構成。

22
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 分散式排程框架 elastic-job 實踐詳解(超詳細)