CAN总线的初步认识
1.概述:
? CAN(Controller Area Network)即控制器局域網,是一種能夠實現分布式實時控制的串行通信網絡。一般形式是一個pc端(包括嵌入式系統、單片機系統)與多個設備(傳感器、儀表、電機等)建立的實時通訊模型。
?
2.原理:
? 當一個節點向另一個節點發送數據時,cpu將數據和標識符交給本節點的CAN芯片,并進入準備狀態;一但該CAN芯片被總線分配到,就變為發送狀態,CAN芯片將要發送的數據按規定的報文形式發出。此時,總線上的其他節點進入接收狀態,所有節點都要對其進行接受,判斷是不是發送給自己的報文,如果不是就忽視,是的話對數據進行解讀。
?
3.特點:
- 總線上的任意節點可在任意時刻給其他節點發送數據。
- 傳輸速度可達1Mbps;通信距離可達10km;節點數可達110個;傳輸速度與距離成反比。
- 傳輸方式有點對點、點對多點、點對全局。
- 可靠的檢錯機制,信息遭到破壞后自動重發,使得數據的出錯率較低。嚴重出錯時自動與總線切斷聯系。
- 采用非破壞性仲裁總線結構,每個節點都有不同的優先級。
?
4.通訊協議
常用的幀類型:數據幀,遠程幀,過載幀,錯誤幀,幀間隔。
- 數據幀:將發送器發送的數據傳送到接收器。
- 遠程幀:請求遠程特定節點發送數據幀。
- 過載幀:用于接收單元通知其尚未做好接收準備的幀。
- 錯誤幀:任何節點檢測到錯誤,就發生錯誤幀。
- 幀間隔:用于將數據幀及遙控幀與前面的幀分離開來的幀。
?
5.幀結構
(1)數據幀:包括幀開始、仲裁段、控制段、數據段、CRC段、ACK段、幀結束。數據幀根據仲裁段長度不同分為標準幀(2.0A)和擴展幀(2.0B)。?
- 幀開始:幀開始由一個顯性位(低電平)組成,發送節點發送幀起始,其他節點同步于幀開始。
- 幀結束:7個隱性位(高電平)組成。
- 仲裁段:CAN總線控制器在發送數據的同時監控總線電平,如果電平不同,則停止發送并做其他處理。如果該位位于仲裁段,則退出競爭;如果位于其他段,則產生錯誤。幀id越小,優先級越高;對于前11位id相同的幀:數據幀RTR位為顯性,遠程幀RTR位為隱性,所以數據幀優先于遠程幀;標準幀的IDE位為顯性,擴展幀的IDE位為隱性,所以標準幀優先于擴展幀。
- 控制段:共6位,標準幀的控制段由IDE(擴展幀標志位)、保留位r0和數據長度代碼DLC組成;擴展幀控制段則由r1、r0和DLC組成。
- 數據段:為0-8字節,短幀結構,實時性好,適合汽車和工控領域。
- CRC段:CRC校驗段由15位CRC值和CRC界定符組成。
- ?ACK段:當接收節點收到的幀起始到CRC段都沒有錯誤時,它將在ACK段發送一個顯性電平,發送節點發送隱性電平,線與結果為顯性電平。
?
圖1?數據幀的構成
(2)遠程幀:分為6段,也分為標準幀和擴展幀,且 RTR位為1(隱性電平)。
比較內容 | 數據幀 | 遠程幀 |
ID | 發送節點的ID | 被請求節點的ID |
SRR位 | 0(顯性電平) | 1(隱性電平) |
RTR位 | 0(顯性電平) | 1(隱性電平) |
DCL | 發送數據的長度 | 請求數據的長度 |
是否有數據段 | 是 | 否 |
CRC檢驗范圍 | 幀起始+仲裁段+控制段+數據段 | 幀起始+仲裁段+控制段 |
圖2 數據幀和遠程幀的區別
(3)過載幀:當某節點沒有做好接收的“準備”時,將發送過載幀,以通知發送節點。
(4)幀間隔:用來隔離數據幀、遠程幀與他們前面的幀,錯誤幀和過載幀前面不加幀間隔。
(5)錯誤幀:CAN是可靠性很高的總線,但是他也有五種錯誤。
- CRC錯誤:發送與接收的CRC值不同發生該錯誤
- 格式錯誤:幀格式不合法發生的錯誤
- 應答錯誤:發送節點在ACK階段沒有接收到應答信息發生該錯誤
- 位發送錯誤:發送節點在發送信息時發現總線電平與發送電平不符發生該錯誤
- 位填充錯誤:通訊線纜上違反通訊規則是發生該錯誤
? ?當發生這五種錯誤之一時,發送節點或接受節點將發送錯誤幀。錯誤幀由錯誤標志和錯誤界定符構成。主動錯誤標志用6個位的顯性位表示,被動錯誤標志用6個位的隱性位表示;錯誤界定符由8個位的隱性位構成。
5.總線電平
采用差分信號通訊,由CAN_H和CAN_L組成,電平分顯性電平和隱形電平。
(1)ISO11898是通信速度為125kbps-1Mbps的CAN高速通訊標準
- 顯性電平:CAN_H - CAN_L=2v 左右,對應邏輯0
- 隱形電平:CAN_H - CAN_L=0v 左右,對應邏輯1
(2)IOS11519是通信速度為125kbps以下的CAN低速通信標準
- ?顯性電平:CAN_H - CAN_L=3v 左右,對應邏輯0
- ?隱形電平:CAN_H - CAN_L=-1.5v 左右,對應邏輯1
?
6.構建一個CAN節點:
構建節點由底向上分為四個部分:
- CAN節點電路:接線的方法。
- CAN控制器驅動:供上層程序或庫的調用,是數字信號轉換成模擬信號的重要步驟。
- CAN應用層協議:已經實現好的一些函數,供給應用程序通過包含頭文件進行調用。
- CAN節點應用程序:基于CAN協議,進行初始化CAN、發送CAN報文、接受CAN報文。除了完成通訊的功能,還會調用一些控制特定功能的電路函數。特定功能包括信號的采集、人機顯示等。
總結
以上是生活随笔為你收集整理的CAN总线的初步认识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 调用服务器文档,JAVA远程
- 下一篇: CAN总线-位时序、波特率、采样点