CAN的一些知識


根據STM32開發手冊的一些筆記記錄

一、CAN 物理層

CAN是一種異步通訊,只有CAN_High和CAN_Low兩條信號線,共同構成一組差分信號線,以差分信號的形式進行通訊。

1、總線網絡

CAN物理層的形式主要有兩種:閉環總線網絡開環總線網絡

  • 閉環總線網絡它允許總線最大長度為40m,最高速度為1Mbps,總線的兩端各有120Ω的電阻。
  • 開環總線網絡最大傳輸距離為1km,最高通訊速率為125kbps,兩根線是獨立的,每根線上串聯一個2.2kΩ的電阻。

2、通訊節點

CAN節點是指能夠掛載在CAN總線上的單元,並能夠通過CAN總線實現各個節點間的通信,以實現復雜的控制過程。

連接多節點時,降低通信速率 ,可連接的節點增加;提高通信速率,則可連接的節點數量減少。

CAN通信節點由一個CAN控制器及CAN收發器組成,控制器和收發器之間通過普通的類似TTL邏輯信號來連接,CAN_Low和CAN_High是一對差分信號線。

(1)CAN控制器

CAN控制器用於實現CAN總線的協議底層以及數據鏈路層,用於生成CAN幀並以二進制的方式發送,在此過程中進行位填充、添加CRC校驗、應答檢測等操作;將接收到的二進制碼進行解析並接收,在此過程中進行收發比對、去位填充、執行CRC校驗等操作。

此外還需要進行沖突判斷、錯誤處理等諸多任務。

(2)CAN收發器

CAN收發器(有時也叫做驅動器),用於將二進制碼流轉換為差分信號發送,將差分信號轉換為二進制碼流接收。

(3)工作方式

當CAN節點需要發送數據時,控制器把要發送的二進制編碼通過CAN_Tx線發送到收發器,然后由收發器把這個普通的邏輯電平信號轉換成差分信號,通過差分線CAN_High和CAN_Low線輸出到CAN總線網絡。

而通過收發器接收總線上的數據到控制器時,是相反的過程。

(4)協議中的差分信號

差分信號又稱差模信號。CAN通信是半雙工的,收發數據需要分開來進行。

顯性電平對應邏輯“0”,隱形電平對應邏輯“1”。

  • 當表示隱性電平時(邏輯“1”),CAN_High和CAN_Low的電壓均為2.5V,此時它們的電壓差為0V。
  • 當表示顯性電平時(邏輯“0”),CAN_High的電壓為3.5V,CAN_Low的電壓為1.5V,電壓差為2V。
  • 顯性電平具有優先權,當一個單元(即節點)輸出顯性電平,總線上即為顯性電平。只有所有單元都輸出隱性電平,總線上才為隱性電平。

CAN通信是半雙工的,收發數據需要分開來進行。公用總線的緣故,整個網絡中,同一時刻只能由一個通訊節點發送信號,其余節點在該時刻只能接收。

二、CAN協議層

CAN通信異步通信,沒有時鍾線,需約定好波特率。

1、位時序的組成

CAN協議將每個數據位的時序分解成4段,即:SS段PTS段PBS1段PBS2段,4段加起來就是一個CAN數據位的長度。分解后的最小時間單位是Tq,一個完整的位由8~25個Tq組成。

下圖是總線電平下每個位分解,位時序分解圖

  • SS段:稱為同步段,用於使總線上的各個節點同步,要求有一個跳變沿位於此段內,該段的長度為1Tq;
  • PTS段:稱為傳播時間段,用於補償網絡內的物理延時,它是信號在總線上傳播時間,輸入比較器延時和輸出驅動器延時之和的兩倍,該段長可以為1~8Tq;
  • PBS1段:稱為相位緩沖段,主要用來補償變壓階段的誤差,它的實際長度在重新同步的時候可以加長,該段大小可以為1~8Tq;
  • PBS2段:稱為另一個相位緩沖段,也是用來補償邊沿階段的誤差,它的時間長度在重新同步的時候可以加長,該段大小可以為2~8Tq。

2、波特率計算

假設1Tq=1us,19個Tq,則傳輸一位數據需要的實際為19us,這樣每秒可以傳輸的數據位個數為:1*10^6 / 19 = 52631.58(bps),即為波特率。

3、CAN同步機制

硬同步和重同步。

CAN總線的位同步只有在節點檢測到"隱性位"到“顯性位”的跳變沿時才會產生。

  • 硬同步:在總線空閑時通過一個下降沿來完成,此時不管有沒有相位誤差,所有節點的位時序將重新開始。強迫引起硬同步的跳變沿位於重新開始的位時間的同步段之內。
  • 重同步:在消息幀的隨后位中,每當有從“隱性位(1)”到“顯性位(0)”的跳變,並且該跳變段落在同步段之外,就會引起一次重同步。重同步機制可以根據跳變沿增長或者縮短位時序以調整采樣點的位置,保證正確采樣。

相位誤差:同步段需要跳變沿,當跳變沿不處於此同步段時,就會產生相位誤差,該相位誤差就是跳變沿與同步段結束位置直接的距離。

4、CAN報文

CAN使用兩條差分信號線,因而只能表示一個信號,於是為了實現完整的傳輸信號功能,CAN協議便對數據、操作命令以及同步信號進行打包,打包后的內容便稱為報文。

(1)報文格式

CAN規定5種類型的幀:數據幀遙控幀錯誤幀過載幀幀間隔

數據幀遙控幀標准格式擴展格式兩個,唯一不同時標識符(ID)不同。

幀類型 幀用途
數據幀 發送單元通過此幀向接收單元發送信息
遙控幀 接收單元通過此幀向具有相同ID的發送單元請求數據
錯誤幀 當檢測到錯誤時,向其他單元通知檢測到錯誤
過載幀 接收單元用來通知它還沒有准備好接收幀
間隔幀 用來將數據幀或遙控幀同前面的幀隔開

(2)數據幀的結構

數據幀以一個顯性位(邏輯0)開始,以一個7個連續隱性位(邏輯1)結束

開始結束之間分為:仲裁段、控制段、數據段、CRC段、ACK段。加開始結束一共有7個段。

  • RTR位:遠程傳輸請求位,用顯性電平和隱性電平來區分數據幀和遙控幀。
  • IDE位:標志符擴展位,用顯性電平和隱性電平來區分標准格式還是擴展格式
  • SRR位:只存在於擴展格式,用於替代標准格式中的RTR位,由於擴展幀中的SRR位為隱性位,RTR是數據幀為顯性位,所以在兩個ID相同的標准格式報文與擴展格式報文中,標准格式的優先級更高。

幀起始:

標准幀和擴展幀都是通過一個顯性電平表示幀起始,作用:通知各個節點將有數據傳輸,其他節點通過幀起始信號的電平跳變沿來進行硬同步。

仲裁段:

表示優先級的段,主要內容為數據幀的ID信息。數據幀有標准格式和擴展格式兩種,具體區別是ID信息的長度,標准格式的ID為11位,擴展格式的ID為29位。

通過顯性電平的優先權和隱性電平的包容性進行仲裁:若兩個節點同時競爭CAN總線的占有權,當它們發送報文時,若首先出現隱性電平,則會失去去總線的占有權,進入接收狀態。

CAN協議中,ID決定着數據幀的優先級,也決定着其他節點是否也會接收這個數據幀。重要的信息,打包一個優先級高的ID,使他能夠及時發送出去,因此使得CAN的擴展性大大加強,在總線上增加和減少節點並不會影響其他設備。

控制段:

r1和r0為保留段,默認置為顯性,它最主要的是由4位組成的DLC段,MSB先行(高位先行),DLC段表示的數字為0~8.

數據段:

數據幀的核心內容,它是節點要發送的原始信息,由0~8個字節組成,MSB先行。

CRC段:

15位的CRC檢驗碼,在CRC檢驗后,有一個CRC界定符,為隱性,將CRC檢驗碼與后面的ACK段分隔開。

ACK段:

包括一個ACK槽位和ACK界定符,在ACK槽位中,發送端發送的為隱性位,接收端在這一位中發送顯性位以表示應答,在ACK界定槽和幀結束之間由ACK界定符分隔開。

幀結束段:

由發送節點發送7個隱性位表示結束。


免責聲明!

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



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