Linux Socket CAN驅動-CAN匯流排原理__Linux

來源:互聯網
上載者:User
由於Socket CAN涉及到CAN匯流排協議、通訊端、Linux網路裝置驅動等。因此,為了能夠全面地瞭解Socket CAN的原理。我們需要瞭解以下幾個方面的知識點:

(1)CAN匯流排協議;

(2)Socket原理;

(3)Linux網路裝置驅動;

當熟悉以下三個方面的知識點後,我們再去分析基於Linux的Socket CAN的驅動。這樣的話理解起來更加容易、易懂。

(4)Socket CAN的驅動;

一、CAN匯流排協議

CAN是ControllerArea Network(控制器區域網路)的縮寫。CAN通訊協定在1986年由德國電氣商博世公司所開發,主要面向汽車的通訊系統。現已是ISO國際標準化的串列通訊協定。根據不同的距離、不同的網路,可配置不同的速度,最高速度為1MBit/s。

         CAN被細分為三個層次:

                   (1)CAN對象層(the object layer);

                   (2)CAN傳輸層(the transfer layer);

                   (3)CAN物理層(the phyical layer);

對象層和傳輸層包括所有由ISO/OSI模型定義的資料連結層的服務和功能。

對象層的作用範圍包括:

(1)尋找被發送的報文。

(2)確定由實際要使用的傳輸層接收哪一個報文。

(3)為應用程式層相關硬體提供介面。

傳輸層的作用主要:

(1)傳送規則,也就是控制幀結構、執行仲裁、錯誤偵測、出錯標定、故障界定。

(2)匯流排上什麼時候開始發送新報文及什麼時候開始接收報文,均在傳輸層裡確定。

(3)位定時的一些普通功能也可以看作是傳輸層的一部分。

(4)傳輸層的修改是受到限制的。

物理層的作用:

在不同節點之間根據所有的電氣屬性進行位資訊的實際傳輸。當然,同一網路內,物理層對於所有的節點必須是相同的。儘管如此,在選擇物理層方面還是很自由的。

                        圖1  CAN協議所對應的ISO模型

CAN具有以下的屬性:

(1)報文(Messages):簡單來說就是具有固定格式的資料包。

(2)資訊路由(Information Routing):即,報文尋找結點的方式。

(3)位速率(Bit rate):資料位元的傳輸速度。

(4)優先權(Priorities):即報文發送的優先權。

(5)遠端資料請求(Remote Data Request):通過發送遠程幀,需要資料的節點可以請求另一節點發送相應的資料幀。

(6)多主機(Multimaster):匯流排空閑時,任何結點都可以開始傳送報文。

(7)仲裁(Arbitration):當2個及以上的單元同時開始傳送報文,那麼就會有匯流排存取違規。仲裁是確定哪個單元的具有發送優先權。

(8)安全性(Safety):CAN的每一個節點均採取了強有力的措施以進行錯誤偵測、錯誤標定及錯誤自檢。

(9)錯誤偵測(Error Detection):包括監視、迴圈冗餘檢查、位填充、報文格式檢查。

(10)錯誤偵測的執行(Performance of Error Detection)

(11)錯誤標定和恢復(Error Sinalling and Recovery Time):任何檢測到錯誤的結點會標誌出已損壞的報文。此報文會失效並將自動地開始重新傳送。如果不再出現新的錯誤,從檢測到錯誤到下一報文的傳送開始為止,恢復最多為29個位的時間。

(12)故障界定(Fault Confinement):CAN結點能夠把永久故障和短暫擾動區分開來。永久故障的結點會被關閉。

(13)串連(Connections):CAN串列通訊鏈路是可以串連許多結點的匯流排。理論上,可串連無數多的結點。但由於實際上受延遲時間或者匯流排線路上電氣負載的影響,串連結點的數量是有限的。

(14)單通道(Single Channel):匯流排是由單一進行雙向位訊號傳送的通道組成。

(15)匯流排值(Bus value):匯流排可以具有兩種互補的邏輯值之一:“顯性”(可表示為邏輯0)或“隱性”(可表示為邏輯1)

(16)應答(Acknowledgment):所有的接收器檢查報文的連貫性。對於連貫的報文,接收器應答;對於不連貫的報文,接收器作出標誌。

(17) 睡眠模式/喚醒(Sleep Mode / Wake-up):為了減少系統電源的功率消耗,可以將CAN器件設為睡眠模式以便停止內部活動及斷開與匯流排磁碟機的串連。CAN器件可由匯流排啟用,或系統內部狀態而被喚醒。

1、CAN匯流排的報文格式

CAN傳輸的報文,可分為五種類型:

(1)資料幀:用於發送結點向接收結點傳送資料的幀。

(2)遠程幀:匯流排結點發出遠程幀,請求發送具有同一識別符的資料幀。

(3)錯誤幀:任何結點檢測到一匯流排錯誤就發出錯誤幀。

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

(5)幀間隔:用於將資料幀及遠程幀與前面的幀分離開來的幀。

資料幀由7個不同的位場組成:

幀起始 仲裁場 控制場 資料場 CRC場 ACK場 幀結束

資料幀有標準格式和和遠程格式,以下是其格式表示:


                                                 圖2    資料框架格式

遠程幀由6個不同的位場組成:

幀起始 仲裁場 控制場 CRC場 ACK場 幀結束

         遠程幀沒有資料幀的資料場,以下是其格式表示:


                                        圖3    遠程框架格式

錯誤幀用於在接收和發送訊息時檢測出錯誤,通知錯誤的幀。錯誤幀由錯誤標誌和錯誤界定符構成。

錯誤標誌包括主動錯誤標誌和被動錯誤標誌兩種。

主動錯誤標誌:6個位的顯性位,處於主動錯誤狀態的單元檢測出錯誤時輸出的錯誤標誌。

被動錯誤標誌:6個位的隱性位,處於被動錯誤狀態的單元檢測出錯誤時輸出的錯誤標誌。

錯誤界定符由8個位的隱性位構成。

錯誤框架格式如下表示:



                                       圖4    錯誤框架格式

過載幀是用於接收單元通知其尚未完成接收準備的幀。過載幀由過載標誌和過載界定符構成。過載框架格式如下表示:



                                         圖5    過載框架格式

幀間隔是用於分隔資料幀和遠程幀的幀。資料幀和遠程幀可通過插入幀間隔將本幀與前面的任何幀(資料幀、遠程幀、錯誤幀、過載幀)分開。過載幀和錯誤幀前不能插入幀間隔。幀間隔如下圖所示:



                                    圖6    幀間隔格式

2、CAN匯流排的仲裁方式

         在匯流排空閑態,最先開始發送訊息的單元獲得發送權。多個單元同時開始發送時,各發送單元從仲裁段的第一位開始進行仲裁。連續輸出顯性電平最多的單元可繼續發送。即逐位地對比各個結點發出的報文ID。由於線與的關係,顯示位“0”可以覆蓋隱性位“1”,因此ID最小的節點贏得仲裁,匯流排上表現為該結點的報文,其他結點失去仲裁,退出發送,轉為接收狀態。

標準格式ID與具有相同ID的遠程幀或者擴充格式的資料幀在匯流排上競爭時,標準格式的RTR位為顯性位的具有優先權,可繼續發送。



                                              圖7    仲裁方式

3、位填充(BitStuffing)

         位填充是為了防止突發錯誤而設定的功能。位填充的規則如下:

(1)5位連續相同電平之後,必須填充一位反向位,即不允許有6個連續相同位;

(2)SOF之前為匯流排空閑狀態,不需要同步,因此不需要位填充;

(3)CRC之後為固定格式,不允許填充; (4)由CAN控制器自動實現;

4、CAN的錯誤處理

CAN控制器檢測錯誤共有以下5種:

(1)位填充錯誤;

在使用位填充的幀場內,結點如果檢測到6個連續相同的位值,則產生位填充錯誤,在下一位開始時,該結點將發送一個錯誤幀。

(2)位錯誤;

在發送期間,結點檢測到匯流排的位值與自身發送的位值不一致時,則產生位錯誤,在下一位開始時,該結點將發送一個錯誤幀。

(3)CRC錯誤;

接收結點計算的CRC碼與資料幀本身內建的CRC碼不一致,接收結點將丟棄該幀,並在ACK界定符之後發送一個錯誤幀。

(4)應答錯誤;

發送結點在ACK Slot位會發送隱性位,同時監聽匯流排是否為顯性位,如果是顯性位,則表明至少一個節點正確收到該幀;如果是隱性位,將產生ACK錯誤,發送結點發送一個錯誤幀。

(5)格式錯誤;

發送結節在(CRC界定符、ACK界定符、幀結束EOF)固定格式的位置檢測到顯性位時,將發生格式錯誤,並發送一個錯誤幀。

         5、CAN匯流排同步

         CAN匯流排的通訊方式為NRZ方式。各個位的開關或者結尾都沒有附加同步訊號。發送結點以與位時序同步的方式開始發送資料。另外,接收結點根據匯流排上電平的變化進行同步並進行接收工作。

         但是,發送結點和接收結點存在的時鐘頻率誤差及傳輸路徑上的(電纜、磁碟機等)相位延遲會引進同步偏差。因此接收結點需要通過同步的方式調整時序進行接收。

         同步的作用是盡量使本地位時序與總結訊號的位時序一致(本地同步段與總結訊號邊沿同步)。只有接收結點需要同步;同步只會發生在隱性到顯性電平的跳沿。

         同步的方式為硬體同步和再同步。


以上是CAN匯流排協議的一些簡要總結,不足之處,請指出,謝謝。下一篇文章將開始Socket原理的講解。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.