CAN數據鏈路層的幀格式介紹——數據幀和遠程幀


前言:

年紀大就會發現之前學習過的內容,如果不常使用,不久就會忘個精光,為了方便日后查看,便將其記錄起來。不積跬步,無以至千里。本章主要介紹數據鏈路層的幀格式。

CAN協議中4中類型的幀結構:

  1. 數據幀
  2. 遠程幀
  3. 錯誤幀
  4. 過載幀

數據幀(Data frame):

數據幀,顧名思義攜帶數據從發送節點A到接收節點B,使節點A與節點B能進行數據交互。

數據幀分兩種類型:①標准幀②擴展幀

 

 

 

標准幀使用的是CAN2.0A,CAN ID是11bit,ID最大也就是0x7FF,擴展幀使用的是CAN2.0B,CAN ID是29bit,ID最大可達到0x1FFFFFFFx(一般擴展幀ID后加x表示擴展幀);

數據幀,無論是標准幀還是擴展幀都主要包含七個部分:①幀起始、②仲裁場、③控制場、④數據場、⑤CRC場、⑥ACK場、⑦幀結束

幀起始:

說明:幀的最開始的一位是幀起始,也叫SOF(Star of Frame),固定為顯性位,即邏輯0.標志着數據幀的幀開始了。幀起始只有在總線空閑期間節點才能夠發送。

作用:用於同步,總線空閑期間的任何隱性到顯性的跳變都將引起節點進行硬同步

仲裁場:

說明:標准幀的仲裁場主要有CAN ID和RTR組成,而擴展幀在標准幀的基礎上,則多了SRR和IDE

作用:仲裁場主要作用在於區分哪個節點更優先,讓更優先的節點掌握發送權,其他節點在靜默等待總線空閑再進行下一回合的仲裁。           

仲裁過程:在CAN總線中有一種回讀機制,指節點在發送到總線報文的同時也對總線上當前的報文進行回讀(為了判斷自己發出的東西與總線上的東西是否一致);

還有一種線與機制,指總線上接收到多節點報文時,顯性位(邏輯0)能覆蓋隱形位(邏輯1)

例子:在總線上目前有兩節點在發送報文,A和B 在ID8前發送的都一樣,回讀總線上報文也與自己發送出去的一致,但A節點在發ID8時,發現自己發送出去的和回讀總線上的電平不一致,從而判斷出總線上有其他比自己優先級高的節點也在發送報文,則A節點會主動退出發送,轉換為接收,從而使B節點,掌握了總線的發送權,發送的報文也不存在延時,報文完整不被破壞,這也被稱作非破壞性仲裁機制。

節點 SOF ID10 ID9 ID8 ID7 ...
A節點 0 1 0 1 - -
B節點 0 1 0 0 0 1
總線 0 1 0 0 0 1

 

 

CAN ID:可確定唯一標識符,利用CAN ID 可對總線上報文進行仲裁優先級,ID值越小,優先級越高。

RTR:在標准幀中用於區別是數據幀還是遠程幀,當RTR位為顯性時,即邏輯0,為數據幀,當RTR位為隱性,即邏輯1時,為遠程幀。RTR作用:在ID相同的情況下,保證數據幀優先級高於遠程幀。

SRR:在擴展幀中(數據幀或遠程幀),SRR橫為隱性,即邏輯1,擴展幀的SRR位剛好對上標准幀的RTR位。SRR作用:在前11位ID相同的情況下,標准數據幀優先級高於擴展數據幀。

IDE:在擴展幀中恆為隱性,即邏輯1;

           在數據幀中IDE位於控制段,且橫為顯性,即邏輯0;剛好標准幀的IDE和擴展幀的IDE位置對應上,IDE作用:在前11位ID相同的情況下,標准遠程幀優先級高於擴展遠程幀。

區分:

SOF ID RTR/SRR IDE 區分為
0 XXX 0 0 標准數據幀
0 XXX 1   標准遠程幀/擴展數據幀/擴展遠程幀
0 XXX 1 0 標准擴展幀
0 XXX 1 1 擴展幀(數據/遠程)

 

 

控制場:

說明:數據幀和遠程幀的控制段結構相同。

IDE:標准幀的IDE對應擴展幀的IDE位置,

r/r1和r0:保留位,必須以顯性,即邏輯0發送,但接收方,可接受顯/隱性任意組合電平;

DLC:代表數據場的數據長度,對沒有數據場的遠程幀,DLC表示該遠程幀對應的數據幀的數據場的字節數。

數據場

說明:數據場就是我們節點攜帶的數據,需要相互交互的數據信息,0-64位,具體數據長度由控制場DLC決定。

             數據場里低字節先發(Byte0....Byte7)

            ‰ 每個字節是高位先發(Bit7....Bit0)

            ‰ 超過一個字節的數據可以把低有效位放在前(Intel格式),也可以把高有效位放在前(Motorola格式)

CRC場

說明:CRC場包含CRC校驗序列和CRC界定符(恆為隱形,即邏輯1),通過多項式生成CRC值,比較發送節點與接受節點CRC是否一致,來確保幀的有效性,計算范圍包括發送節點【幀起始、仲裁場、控制場、數據場】是否與接收節點【幀起始、仲裁場、控制場、數據場】是否一致。

ACK場

說明:ACK場包含ACK槽和ACK界定符兩位,

節點 ACK槽 ACK界定符 結果
發送節點 1 1  
接收節點 0 1 表示接收節點已正確接收報文

幀結束

說明:固定7個隱性位,即邏輯1構成。

幀間隔

說明:固定為3個隱形位,即邏輯1構成。

當連續11位為隱性時,總線為空閑狀態,節點可發送幀起始來讓總線忙碌起來,接着就開始仲裁,又是一個忙碌的小總線~

 

 

遠程幀(Remote frame):

當接收節點想快速獲取某節點數據時,可向總線發送遠程幀,遠程幀數據場無內容

節點 ID RTR DLC data
發送A節點(cycle=100ms) XXX 0 8 xxxx
接收B節點(呀!等不急了,我馬上就要數據) XXX(與A節點ID一致) 1 8(與A節點的DLC一致) ----
發送A節點(收到B節點的遠程幀,不等100ms了,馬上回傳數據) XXX 0 8 xxxx
接收B節點(呀,收到數據啦~)        


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM