1. 程式人生 > >CAN之資料鏈路層協議

CAN之資料鏈路層協議

胡謅一番

大多數書籍一上來就是什麼計算機OSI模型,什麼CAN模型對比OSI模型。各種協議擺出來一大堆,讓人摸不著頭腦,這種東西說實在沒什麼用,底層鏈路層協議全部通過硬體實現了,你僅僅需要了解然後學會配置(驅動硬體)即可,沒必要花大篇幅去學習一大堆鬼東西。重點應該放在上層協議之上(例如應用層協議)。這些觀點可以適用於TCP/IP協議棧的學習。
對於CAN主要理解以下兩點:
1、CAN2.0-A和CAN2.0-B標準協議也就是所謂的鏈路層協議,這些都是通過硬體實現,咱們就大概瞭解協議,然後學會配置STM32或其他裝置相應的暫存器來實現CAN標準協議(驅動程式)。
2、CAN應用層協議,這個才是重點,軟體實現。應用層協議其實可以自己定義,但是為了和其他公司的產品相容,咱們就必須使用一種國際上定義的標準應用層協議。這裡有很多,我們就學習使用比較多的CANOpen協議。

CAN2.0標準協議及STM32硬體配置

邏輯電平

CAN有兩根線,CANH和CANL,硬體通過識別這兩根線上的電平來確定匯流排數值是顯性數值”0”,還是隱形數值”1”。如何識別及電平關係不需要明白,硬體給你處理。但是這裡必須清楚一點就是顯性和隱形同時傳送,最後匯流排數值為顯性數值0。

CAN匯流排幀格式

資料就是通過這種格式按位傳送出去。

總線上總共有以下5種不同型別的幀。

幀型別 幀用途
資料幀 節點傳送和接收資料的幀
遠端幀 用於接收節點向具有相同ID的傳送節點請求資料的幀
錯誤幀 當檢測到錯誤向其他節點通知錯誤的幀
過載幀 接收節點通知其他節點自己還沒準備好接收幀
幀間隔 用於將資料幀和遠端幀與前面的幀分離開

資料幀(重點)

這裡寫圖片描述

  • 幀開始:標誌資料幀和遠端幀的開始,有一個單獨的顯性位(0)組成。一個節點只有在空閒時,才允許傳送資料。所有節點必須同步匯流排跳變沿。
  • 仲裁場:標準格式和擴充套件格式。包括識別符和遠端傳送請求位(RTR)。識別符長度是11位,傳送順序是ID10-ID0。最高的7位(ID10-ID4)必須不能全為隱形(1)。RTR位,資料幀為顯性,遠端幀為隱形。這裡的顯和隱實際對應資料的0和1,送到CAN控制器之後自動將0和1轉換成對應的顯性電平和隱形電平。
  • 控制場:6個位組成,包含資料長度程式碼和兩個將來作為擴充套件用的保留位,所有保留位必須位顯性。資料長度程式碼指示資料場中位元組數量,因為4位,所以允許傳送資料0-8位元組
  • 資料場:實際的資料欄位。
  • CRC場:包括CRC序列和CRC界定符。這裡具體怎麼計算不需要清楚,因為硬體實現了,僅僅知道這就是校驗碼而已,用於在接收端校驗接收的資料是否正確。
  • 應答場:2bit,應答間隙和應答界定符。傳送方傳送兩個隱性位。這個不需要管
  • 幀結束:每一個數據幀都有結束標識序列。由7個隱性位。
  • 上述最重要的資訊就是資料位元組最長是8。

遠端幀

這裡寫圖片描述

錯誤幀

錯誤幀由兩個不同的場組成,硬體實現和軟體無關。

過載幀

暫時不考慮,這硬體實現。

幀間隔

暫時不考慮,硬體實現。

仲裁場兩種格式

這裡寫圖片描述
標準格式:11位識別符號,其餘和前面一樣
擴充套件格式:11位基本ID,18位擴充套件ID。基本ID定義擴充套件幀基本優先權。SRR為替代遠端請求位,是隱性位。瞭解即可,不必追究。

匯流排仲裁過程(重點)

CAN總線上節點沒有主從之分,所有節點級別都一樣,可以傳送也可以接收。只要匯流排空閒,傳送節點就可以傳送資料,傳送節點不會指定由哪個一個節點接收,而是由接收節點自己過濾選擇是否接收含有該識別符號ID的資料,就像收音機一樣,廣播臺發出訊號都可以被聽眾收到,但是聽眾可以選擇自己喜歡的臺。

  • 回讀:節點發送資料的同時,同時也再讀取資料,並與自己傳送資料對比。

  • 線與:如果同時有幾個節點往CAN總線上傳遞資訊,採取線與機制,也就是說除非所有的節點都發送1,總線上才會是1,只要有一個節點發送0,總線上就是0。如果一個節點A傳送了1,而其他節點發送了0,那麼總線上是0,節點A通過回讀就會發現總線上的電平與自己傳送的不一致,從而採取相應的措施(退出仲裁,報錯等)。需要注意的是1和0由CAN_H和CAN_L兩條線差分電壓得來,並不是一條線傳遞1, 另一條線傳遞0。

  • 仲裁:匯流排空閒,最先開始傳送訊息的節點獲得傳送權,當多個節點同時傳送資料,那麼需要仲裁,通過線與和回讀功能比較資料的識別符號(從仲裁段第一位開始仲裁),識別符號小的獲得仲裁,識別符號大的推出仲裁,轉變為接收,並且不會在匯流排再次空閒前傳送報文,也就是說當匯流排空閒時候,推出仲裁的幀才重新發送資料。

  • 資料幀和遠端幀優先順序:假如一個傳送節點發送了遠端幀請求A傳送資料並且同時A節點也正在傳送資料,那麼二者識別符號相同,需要仲裁。RTR為顯性位的資料幀具有優先權,可以繼續傳送。

  • 標準格式和擴充套件格式優先順序:從仲裁位開始仲裁,標準格式RTR位顯性,牛逼,具有優先權可以繼續傳送。

報文重發與位填充

這裡說了很多,但是都是硬體已經幫助你完成了,這裡可以不用瞭解。直接忽略過去。。。。。

STM32配置CAN

CAN協議規定了好幾種幀型別,但是對於我們應用來說,只有資料幀和遠端幀可以通過軟體程式設計來控制。(其他幾種幀都是由CAN控制器硬體實現的,我們也管不了)。而資料幀和遠端幀最大的區別在於:遠端幀沒有資料域。資料幀分為標準資料幀和擴充套件資料幀,它們之間最大的區別在於:仲裁場的不同。
這裡直接參考《STM32 CAN傳送和接收過濾詳解》。

參考文獻:

《手把手教你學CAN匯流排》
《CAN_BusSpecificationV2.0中文版》
《STM32CAN傳送和接收過濾詳解》
這裡資料鏈路層就這個樣子了。。。。。不需要再進一步深入了。。。。。。

相關推薦

CAN資料鏈協議

胡謅一番 大多數書籍一上來就是什麼計算機OSI模型,什麼CAN模型對比OSI模型。各種協議擺出來一大堆,讓人摸不著頭腦,這種東西說實在沒什麼用,底層鏈路層協議全部通過硬體實現了,你僅僅需要了解然後學會配置(驅動硬體)即可,沒必要花大篇幅去學習一大堆鬼東西。重點

12、基本資料鏈協議資料鏈

1、基本資料鏈路層協議 引言 在考察協議之前,先明確一下有關底層通訊模型的基本假設是有必要的。首先我們假設物理層、資料鏈路層和網路層都是獨立的程序,它們通過來回傳遞資訊進行通訊。如圖所示,物理層程序和某些資料鏈路層程序執行在一個稱為網路介面卡(NIC)的專用硬體上:鏈路層程序

計算機網路7模型資料鏈

1.資料鏈路層最基本的服務是將源機網路層來的資料可靠的傳輸到相鄰節點的目標機網路層,為達到這一目的,資料鏈路層必須具備一系列相應的功能,它們主要有:如何將資料組合成資料塊,在資料鏈路層中將這種資料塊稱為資料幀,資料幀是資料鏈路層的傳送單位,如何控制幀在物理通道上的傳輸,包括如何處理傳輸差

《計算機網路》資料鏈

資料鏈路層 一、引言        前面說過,資料鏈路層的任務是:在兩個相鄰節點之間傳送資料時,資料鏈路層將網路層交下來的IP資料報組裝成幀(frame),在兩個相鄰節點間的鏈路上“透明”地傳送幀中的資料。資料鏈路層協議的三個基本問題是:封裝成幀、透明傳輸和差錯檢測。差錯檢

計算機網路資料鏈

研究問題:同一區域網中,分組怎麼從一個主機傳到另外一個主機。 一. 資料鏈路層使用通道 1.點對點通道 : 1對1的通訊方式 2.廣播通道 : 1對多的廣播通訊方式,必須使用專用的共享通道協議來協

TCP/IP協議資料鏈協議

資料鏈路層的協議定義了通過同種通訊媒介互連的裝置之間的傳輸的規範。 物理層:把物理訊號與二進位制的01進行相互轉換。 資料鏈路層:把01序列組織為一個叫做幀的塊,再進行傳輸。 各種資料鏈路 乙太網 WLAN(無線區域網) PPP(點對點協議)

TCP/IP體系結構資料鏈

0.概述資料鏈路層傳送的是幀,如下圖所示(一般的介面卡(網絡卡)都包括了資料鏈路層和物理層這兩層的功能。 ):資料鏈路層主要解決三個問題:封裝成幀、透明傳輸、差錯控制(運輸層中也包括差錯控制,是重複了嗎?[quest-?])。1.封裝成幀 封裝成幀(framing),即在一

資料鏈協議視窗的計算問題

首先,我們知道資料鏈路層的協議常用的有三種: 停-等協議 回退N幀協議 選擇重傳協議 這三個協議的知識點除了基本的原理以外,更多的是對視窗大小的計算。 我覺得這個視窗的大小計算,不徹底弄清楚來龍去脈,每一個計算都是天書一樣的,令人頭大。 這三個協議,

計算機網路(3)——資料鏈“基本概念+三個基本問題+ppp協議

資料鏈路層的通道型別: 點對點通道——這種通道使用一對一的點對點通訊方式。 廣播通道——這種通道使用一對多的廣播通道方式,因此過程比較複雜。廣播通道上連線的主機很多,因此必須使用專用的共享通道協議來協調這些主機的資料傳送。 鏈路與資料鏈路: 鏈路——是一條

CAN匯流排協議——資料鏈

幀種類資料幀的組成灰色部分:產生一個電平,知道是顯性(因為是低電壓)隱性時突然來了一個下降沿,這個表示這要傳輸一個數據了注意電平訊號(加粗的黑色線)(1)、幀起始(標準、擴充套件格式相同)    表示幀開始的段,1個位的顯性位;為什麼不稱高低電平,要用顯性隱性??==》有點像

TCP/IP協議--02資料鏈

資料鏈路層有三個目的: 為IP模組傳送和 接收IP資料報。 為ARP模組傳送ARP請求和接收ARP應答。 為RARP傳送RARP請 求和接收RARP應答 ip大家都聽說過。至於ARP和RARP,ARP叫做地址解析協議,是用IP地址換MAC地址的一種協議,而R

資料鏈_流量控制和差錯控制、協議

data link layer最重要的職能就是流量控制(flow control)和差錯控制(error control), 這些控制功能就是我們所說的鏈路控制(data link control)。 那麼流量和差錯到底怎麼控制呢,下面讓我們一起來看看: 流量控制

【計算機網路】資料鏈的代表協議PPP與區域網

1. 點對點協議PPP 概念:對於點對點的鏈路,簡單得多的點對點協議PPP是目前使用的最廣泛的資料鏈路層協議。 PP協議就是使用者計算機和ISP進行通訊時所使用的資料鏈路層協議。 特點: 簡單 封裝成幀 透明性 多種網路層協議 PPP還必須能夠在多種型別的鏈路

計算機網路(5)——資料鏈“拓展乙太網+高速乙太網”

拓展乙太網 在物理層擴充套件乙太網: (1)使用光纖擴充套件——主機使用光纖(通常是一對光纖)和一對光纖調變解調器連線到集線器。很容易使主機和幾公里以外的集線器相連線。 (2)使用集線器擴充套件——使用多個集線器可連成更大的、多級星形結構的乙太網。 優點:

學習筆記計算機網路(王道考研) 第三章 資料鏈

資料鏈路層的功能: 為網路層提供服務 鏈路管理 幀定界、幀同步和透明傳輸 流量控制 差錯控制 資料鏈路層可以為網路層提供的服務有: 無確認的無連線服務 有確認的無連線服務 有確認的面向連線服務(有連線則一定有確認)

從0到1用java再造tcpip協議棧:使用jpacap模擬資料鏈

我們上一節成功使用jpcap獲得了網絡卡硬體,我們要重新構造tcp/ip協議棧,那麼就需要做兩部分工作。一部分由上層協議完成,他們的工作是將要傳送的資料進行封裝,主要是在資料包上新增包頭資料結構,包頭裡有很多控制位元組,用於不同節點間進行資料傳送時對傳送過程的控制和調整,瞭解,掌握,實現

《TCP/IP協議族》:資料鏈

1、引言 從圖1-4可以看出,在TCP/IP協議族中,鏈路層主要有三個目的: (1)為IP模組傳送和接收IP資料報; (2)為ARP模組傳送ARP請求和接收ARP應答。 (3)為RARP傳送RARP請求和接收RARP應答。 TCP/IP支援多種不同的鏈路層協議,這取決於網路

《TCP/IP詳解卷一:協議資料鏈(一)

引言         在TCP/IP協議族中,鏈路層主要有三個目的: 為IP模組傳送和接收IP資料報。為ARP模組傳送ARP請求和接收ARP應答。為RARP傳送RARP請求和接收RARP應答。  

TCP/IP協議

功能 鏈路層主要有三個目的: a) 為IP模組傳送和接收IP資料報 b) 為ARP模組傳送ARP請求和接收ARP應答 c) 為RARP模組傳送RARP請求和接收RARP應答 乙太網和IE

OSI七模型詳解物理資料鏈、網路、傳輸.....應用協議

OSI 七層模型通過七個層次化的結構模型使不同的系統不同的網路之間實現可靠的通訊,因此其最主要的功能就是幫助不同型別的主機實現資料傳輸 。 完成中繼功能的節點通常稱為中繼系統。在OSI七層模型中,處於不同層的中繼系統具有不同的名稱。    一個裝置工作在哪一層,關鍵看它工作時利用哪一層的資料