1. 程式人生 > >CAN匯流排學習記錄之四:位定時與同步

CAN匯流排學習記錄之四:位定時與同步

一、位定時

1.1 位元率和波特率

1)位速率:又叫做位元率(bit rata)資訊傳輸率,表示的是單位時間內,總線上傳輸的資訊量,即每秒能夠傳輸的二進位制位的數量,單位是bit per second。
2)波特率:又叫做傳位元速率訊號傳輸率,表示的是單位時間內傳輸的碼元的數量,當兩相調製時,一個碼元用一個二進位制位表示,此時波特率在數值上和位元率是一樣的,CAN匯流排正是兩項調製這種情況。

Tips: 位元率波特率並不是一回事兒,這一定一定要牢記。

1.2 位時間

1.2.1 位時間的概念

位時間:表示的是一個二進位制位在總線上傳輸時所需要的時間。
所以:


首先了解以下CAN匯流排系統中的兩個時鐘: 晶振時鐘週期CAN時鐘週期

 

  • 晶振時鐘週期:是由微控制器振盪器的晶振頻率決定的,指的是振盪器每震盪一次所消耗的時間長度,也是整個系統中最小的時間單位。
  • CAN時鐘週期:CAN時鐘是由系統時鐘分頻而來的一個時間長度值,實際上就是一個時間份額Tq。可以按照下面的公式計算: 

  •  

    其中BRP叫做波特率預分頻值(baudrate prescaler)。
    位時間

1.2.2 位時間的分段

如上文所述,在CAN的位定時中,一個CAN時鐘週期稱為一個時間量子Tq
如下圖所示:位時間分為四個段:同步段、傳播段、相位緩衝段1、相位緩衝段2,總共8~25個時間量子(Tq)。
位時間

1)同步段(Synchronization Segment):

  • 長度固定,1個時間量子Tq;
  • 一個位的傳輸從同步段開始;
  • 同步段用於同步總線上的各個節點,一個位的跳邊沿在此時間段內。

2)傳播段(Propagation Segment):

  • 傳播段用於補償報文在匯流排和節點上傳輸時所產生的時間延遲;
  • 傳播段時長 ≥ 2 × 報文在匯流排和節點上傳輸時產生的時間延遲 ;
  • 傳播段時長可程式設計(1~8個時間量子Tq)。

3)相位緩衝段1(Phase Buffer Segment1):

  • 用於補償節點間的晶振誤差;
  • 允許通過重同步對該段加長;
  • 在這個時間段的末端進行匯流排狀態的取樣;
  • 長度可程式設計(1~8個時間量子Tq)

4)相位緩衝段2(Phase Buffer Segment2):

  • 用於補償節點間的晶振誤差;
  • 允許通過重同步對該段縮短;
  • 長度可程式設計(1~8個時間量子Tq)

於是

 

tBit:位時間
tSS:同步段時間
tPS:傳播段時間
tPBS1:時間段1

tPBS2:時間段2

 

二、CAN的同步機制

在CAN通訊中,有兩種同步機制:硬同步重同步

2.1 同步的規則

一個位時間內只允許一種同步方式,要麼硬同步要麼重同步;
☆ 任何一個從“隱性”到“顯性”的下降沿 都可以用於同步;
硬同步發生在報文的SOF位,所有接收節點調整各自當前位的同步段,使其位於傳送的SOF位內;
重同步發生在一個報文SOF位之外的其它段,當下降沿落在了同步段之外時發生重同步;
☆ 在SOF到仲裁場傳送的時間段內,如果有多個節點同時傳送報文,那麼這些傳送節點對跳變沿不進行重同步

2.2 硬同步

硬同步發生在SOF位,所有接收節點調整各自當前位的同步段調整寬度不限
硬同步
(1)傳送節點Node_A在傳送SOF位時,SOF位的下降沿在SS段;
(2)這個時候接收節點Node_B發現自己當前位的SS段和傳送節點SOF位的SS段不同步。也就是說當Node_A產生SOF位SS段時,Node_B的當前位的SS段已經在5個Tq之前產生了;
(3)於是接收節點Node_B強行將自己當前位的SS段拉到與SOF位的SS段同步。

2.3 重同步

重同步發生在一個報文SOF位之外的其它位場內,當接收節點Node_B當前位的下降沿落在了傳送節點Node_A當前位的同步段之外時發生重同步。
重同步會導致相位緩衝段1的延長或者相位緩衝段2的縮短,從而保證取樣點的準確。

2.3.1 PBS1 延長

發的晚(慢),收的早(塊),導致PBS1延長。
重同步
如上圖所示:
(1)傳送節點Node_A比接收節點Node_B的時間慢了,也就是說Node_A當前位的ss段產生的時候,Node_B 當前位的ss段已經在2個Tq之前產生了;
(2)所以這個時候接收節點Node_B就將PBS1延長2個Tq的時間;
(3)於是這個時候Node_A當前位的取樣點就和Node_B的取樣點同步了。

2.3.2 PBS2 縮短

發的早(快),收的晚(慢),導致PBS2縮短。
重同步2
如上圖所示:
(1)傳送節點Node_A當前位的SS段誕生2Tq時長之後,接收節點Node_B的當前位才產生SS段;
(2)於是,接收節點Node_B當前位的PBS2段縮短,
(3)這樣就會導致接收節點Node_B的下一位能夠提前2個Tq,從而Node_B的下一位取樣點和Node_A下一位的取樣點能夠同步。

2.3.3 同步跳轉寬度

在重同步時,有個同步跳轉寬度(SJW,Synchro Jump Width)的概念,表示的是PBS1和PBS2重同步時允許跳轉的最大寬度
同步跳轉寬度必須滿足以下幾個條件:

  • SJW必須小於PBS1和PBS2的最小值
  • SJW最大值不能超過4

3 位定時引數的確定

位定時的引數主要涉及以下幾個:
(1)位速率:單位為bps、Kbps、Mbps


(2) 位時間:tBit,單位一般為納秒(ns)


(3) 時間量子Tq


NBT 表示的是一個位時間tBit內包含Tq的個數。

(4) 傳輸延遲時間tPTS
CAN報文在CAN總線上的傳輸時,物理延遲包含兩個部分:

 

  • 在CAN-BUS上傳輸造成的延遲
  • 在節點上傳輸造成延遲
    延遲時間
    按照CAN通訊協議的規定,補償給傳播延遲的時間長度要至少等於實際實際傳播延遲時長的2被,即:

需要注意的是

Tips: 在CAN匯流排通訊系統中是以時間量子Tq來度量時間的,所以如果延遲補償時間tPTS = 3.1Tq,那麼這個時候要取:tPTS = 4Tq。

(5)相位緩衝段
相位緩衝段的時間長度分為兩種情況:

if (NBT-1-tPTS_Tq)/2==偶數 PBS1_Tq = PBS2_Tq = (NBT-1-tPTS_Tq)/2else PBS1_Tq = (NBT-1-tPTS_Tq)/2 PBS2_Tq = PBS1_Tq +1

(6) 同步跳轉寬度


 

(7) 驗證晶振誤差Df
CAN匯流排的晶振誤差必須同時滿足下面三個條件:




4 例子

以下面的例子來講述位定時引數的確定方法:
MCU晶振16MHz,位速率1Mbps,匯流排長度20m,單位匯流排延遲5ns/m,物理介面的傳送接收延遲150ns

(1)晶振時鐘週期:T=1s/16MHz = 62.5ns
(2)位時間 :tBit = 1/1Mbps = 1000ns
(3)BPR和NBT:考慮到 T = 125ns,tBit = 1000ns,所以BPR只能取值為1,才能滿足NBT∈[8,25],於是預分頻數BPR=1;
(4)CAN時鐘週期Tq = 2 × 62.5 × 1 = 125ns
(5)NBT = 8
(6)傳輸延遲時間tPTS 


所以

於是NBT=8個Tq的長度中需要有4個Tq用於補償傳播延遲,於是還剩下4個Tq,
SS同步段長度固定佔據1個Tq,還剩3個Tq,於是PBS1分配一個Tq,PBS2分配2個Tq。
(7)同步跳轉寬度

(8)晶振誤差

 




 

本篇隨筆轉自: blog.csdn.net/weixin_40528417/article/details/79936476,感謝博主!