CAN匯流排學習記錄之四:位定時與同步
一、位定時
1.1 位元率和波特率
1)位速率:又叫做位元率(bit rata)、資訊傳輸率,表示的是單位時間內,總線上傳輸的資訊量,即每秒能夠傳輸的二進位制位的數量,單位是bit per second。
2)波特率:又叫做傳位元速率、訊號傳輸率,表示的是單位時間內傳輸的碼元的數量,當兩相調製時,一個碼元用一個二進位制位表示,此時波特率在數值上和位元率是一樣的,CAN匯流排正是兩項調製這種情況。
Tips: 位元率和波特率並不是一回事兒,這一定一定要牢記。
1.2 位時間
1.2.1 位時間的概念
位時間:表示的是一個二進位制位在總線上傳輸時所需要的時間。
所以:
首先了解以下CAN匯流排系統中的兩個時鐘: 晶振時鐘週期和 CAN時鐘週期
- 晶振時鐘週期:是由微控制器振盪器的晶振頻率決定的,指的是振盪器每震盪一次所消耗的時間長度,也是整個系統中最小的時間單位。
- CAN時鐘週期:CAN時鐘是由系統時鐘分頻而來的一個時間長度值,實際上就是一個時間份額Tq。可以按照下面的公式計算:
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縮短。
如上圖所示:
(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,感謝博主!