linux can 接收多帧_CAN编程介绍
14.1 CAN介紹
14.1.1 CAN是什么?
CAN,全稱為“Controller Area Network”,即控制器局域網,是國際上應用最廣泛的現場總線之一。
最初,CAN被設計作為汽車環境中的微控制器通訊,在車載各電子控制裝置 ECU 之間交換信息,形成汽車電子控制網絡。比如:發動機管理系統、變速箱控制器、儀表裝備、電子主干系統中,均嵌入CAN控制裝置。
一個由 CAN 總線構成的單一網絡中,理論上可以掛接無數個節點。實際應用中,節點數目受網絡硬件 的電氣特性所限制。例如,當使用 Philips P82C250 作為CAN收發器時,同一網絡中允許掛接110個節點。
CAN可提供高達1Mbit/s的數據傳輸速率,這使實時控制變得非常容易。另外,硬件的錯誤檢定特性也增強了CAN的抗電磁干擾能力。
14.1.2 CAN的起源
CAN最初出現在 80 年代末的汽車工業中,由德國 Bosch 公司最先提出。當時,由于消費者對于汽車功能的要求越來越多,而這些功能的實現大多是基于電子操作的,這就使得電子裝置之間的通訊越來越復雜同時意味著需要更多的連接信號線。
提出 CAN 總線的最初動機就是為了解決現代汽車中龐大的電子控制裝置之間的通訊,減少不斷增加的信號線。于是,他們設計了一個單一的網絡總線,所有的外圍器件可以被掛接在該總線上。
1993 年,CAN已成為國際標準ISO11898(高速應用)和 ISO11519(低速應用)。 CAN 是一種多主方式的串行通訊總線,基本設計規范要求有高的位速率,高抗電磁干擾性,而且能夠檢測出產生的任何錯誤。
當信號傳輸距離達到 10Km 時,CAN 仍可提供高達 50Kbit/s 的數據傳輸速率。由于 CAN 總線具有很高的實時性能,因此,CAN 已經在汽車工業、航空工業、工業控制、安全防護等領 域中得到了廣泛應用。
14.1.3 CAN傳輸模型
CAN 通訊協議主要描述設備之間的信息傳遞方式。CAN 層的定義與開放系統互連模型(OSI)一致。每 一層與另一設備上相同的那一層通訊。實際的通訊發生在每一設備上相鄰的兩層,而設備只通過模型物理層的物理介質互連。
CAN 的規范定義了模型的最下面兩層:數據鏈路層和物理層。下表中展示了 OSI 開放 式互連模型的各層。應用層協議可以由 CAN 用戶定義成適合特別工業領域的任何方案。已在工業控制和制造業領域得到廣泛應用的標準是 DeviceNet,這是為 PLC 和智能傳感器設計的。在汽車工業,許多制造商都應用他們自己的標準。
OSI開發系統互聯模型
雖然CAN傳輸協議參考了OSI 七層模型,但是實際上CAN協議只定義了兩層“物理層”和“數據鏈路層”,因此出現了各種不同的“應用層”協議,比如用在自動化技術的現場總線標準DeviceNet,用于工業控制的CanOpen,用于乘用車的診斷協議OBD、UDS(統一診斷服務,ISO14229),用于商用車的CAN總線協議SAEJ1939。
CAN傳輸協議
14.1.4 CAN網絡拓撲
CAN總線是一種分布式的控制總線。CAN總線作為一種控制器局域網,和普通以太網一樣,它的網絡很多CAN節點構成。其網絡拓撲結構如下圖所示:
CAN網絡的每個節點非常簡單,均由一個MCU(微控制器)、一個CAN控制器和一個CAN收發器構成,然后使用雙絞線連接到CAN網絡中。
14.1.5 CAN物理特性
CAN總線遵循國際標準ISO11898,如ISO11898-1,ISO11898-2,ISO11898-3,ISO11898-4標準。
CAN總線
CAN 能夠使用多種物理介質,例如雙絞線、光纖等。最常用的就是雙絞線。信號使用差分電壓傳送,兩條信號線被稱為“CAN_H”和“CAN_L”。靜態時CAN_H和CAN_L均是 2.5V 左右,此時狀態表示為邏輯“1”,也可以叫做 “隱性”。用 CAN_H 比 CAN_L 高表示邏輯“0”,稱為“顯形”,此時,通常電壓值為:CAN_H = 3.5V 和 CAN_L = 1.5V 。
目前實際常用的CAN收發器有如下幾種型號
目前實際常用的CAN控制器有如下幾種型號
14.1.6 CAN報文幀
14.1.6.1 CAN報文格式
標準 CAN 的標志符長度是 11 位,而擴展格式 CAN 的標志符長度可達 29 位。CAN 協議的 2.0A 版本 規定 CAN 控制器必須有一個 11 位的標志符。同時,在 2.0B 版本中規定,CAN 控制器的標志符長度可以是 11 位或 29 位。遵循 CAN2.0B 協議的 CAN 控制器可以發送和接收 11 位標識符的標準格式報文或 29 位標識符的擴展格式報文。
標準幀&擴展幀對比
14.1.6.2 CAN報文幀類型
CAN報文類型又分為5種幀類型:數據幀:主要用于發送方向接收方傳輸數據的幀;遙控幀:主要用于接收方向具有相同ID的發送方請求數據的幀;錯誤幀:主要用于當檢測出錯誤時向其他節點通知錯誤的幀。過載幀:主要用于接收方通知其他尚未做好接收準備的幀。間隔幀:主要用于將數據幀及遙控幀與前一幀分隔開來的幀。
其中數據幀是使用最多的幀類型,這里重點介紹一下數據幀。數據幀如下圖所示:
數據幀
由上圖所示,數據幀包括:
我們主要關注我們編程所需要關注的幾個段:ID: CAN報文ID;IDE: 為0是標準幀,為1是擴展幀;RTR: 為0是數據幀,為1是遠程幀;DLC: CAN報文數據長度,范圍0~8字節;Data:數據,0~8個字節;
未完待續…關于CAN,還有很多內容(70多頁),剩下內容:
加微信13923404017,免費獲取完整版
總結
以上是生活随笔為你收集整理的linux can 接收多帧_CAN编程介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Delphi XE 使用 MySQL 数
- 下一篇: ios开发 多人语音聊天_微信“暗黑模式