CAN 總線 之七 BOSCH CAN 位時序 和 同步

  CAN 支持 1 kBit/s 至 1000 kBit/s 的比特率。CAN 網絡的每個節點都有自己的時鐘發生器,通常是石英振盪器。 可以爲每個 CAN 節點單獨配置比特時間的定時參數(即比特率的倒數),即使 CAN 節點的振盪器週期(fosc)可能不同,也產生相同的比特率。
  這些振盪器的頻率不是絕對穩定的,溫度或電壓的變化以及元件的劣化會引起微小的變化。 只要變化保持在特定振盪器容差範圍(df)內,CAN 節點就能夠通過重新同步到比特流來補償不同的比特率。
  CAN 網絡上的所有節點必須運行在相同的標稱比特率下。但噪音、相移、振盪頻率容差和振盪頻率漂移導致實際的比特率可能與標稱比特率不同。由於沒有使用一個單獨的時鐘信號,因此需要一個同步節點方法。
  同步在仲裁機制中十分重要,因爲仲裁中的節點需要能夠同時看到它們傳輸的數據和其他節點的傳輸數據。 同步在確保節點間震盪時間不同時不發生錯誤上十分重要。

位時序(BIT TIMING)

標稱比特率(NOMINAL BIT RATE)

  標稱比特率是指理想發送器在沒有再同步的情況下每秒傳輸的比特數。

標稱位時間(NOMINAL BIT TIME)

  標稱位時間爲標稱比特率的倒數:NOMINAL BIT TIME = 1 / NOMINAL BIT RATE。標稱位時間又被劃分爲 4 個獨立的非重疊的時間段。這些時間段又由更小的可稱爲時間量子(Time Quantum,Tq) 的最小時間單位構成。CAN 規範規定,1 個比特位的標稱位時間被分爲 4 個段,每個段又由若干個Tq 構成,這稱爲位時序。示例如下(以 10 個時間量子爲例):
在這裏插入圖片描述

  • 同步段(SYNCHRONIZATION SEGMENT,SYNC_SEG): 多個連接在總線上的單元通過此段實現時序調整,同步進行接收和發送的工作。由隱性電平到顯性電平的邊沿或由顯性電平到隱性電平邊沿最好出現在此段中。
  • 傳播時間段(PROPAGATION TIME SEGMENT,PROP_SEG): 用於吸收網絡上的物理延遲的段。所謂的網絡的物理延遲指發送單元的輸出延遲、總線上信號的傳播延遲、接收單元的輸入延遲。這個段的時間爲以上各延遲時間的和的兩倍。長度可編程爲 1 ~ 8個時間量子Tq
  • 相位緩衝段1(PHASE BUFFER SEGMENT1,PHASE_SEG1)和 相位緩衝段2(PHASE BUFFER SEGMENT2,PHASE_SEG2): 當信號邊沿不能被包含於 SS 段中時,可在這兩個段中進行補償。由於各單元以各自獨立的時鐘工作,細微的時鐘誤差會累積起來,PBS 段可用於吸收此誤差。通過對相位緩衝段加減 SJW 吸收誤差。SJW 加大後允許誤差加大,但通信速度下降。相位緩衝段1 可以通過同步暫時延長;相位緩衝段2 可以通過同步暫時縮短。

同步跳轉寬度(Synchronization Jump Width,SJW)

  CAN 位時序計算的另一個重要時間段是同步跳轉寬度(SJW),持續時間爲tSJW。 SJW 段不是標稱位時間的一部分,而是定義了在重新同步的情況下可以延長或縮短比特週期的TQ的最大數量。
  由於再同步,相位 SEG1 可能會延長或相位 SEG2 可能會縮短。相位緩衝器段的加長或縮短量有一個由再同步跳變寬度(SJW)給出的上限。爲了調整片上總線時鐘,CAN 控制器可以將位的長度縮短或延長一個整數量子數。這些位時間調整的最大值稱爲同步跳變寬度(SJW)。相位緩衝段(Phase_Seg1和Phase_Seg2)和同步跳轉寬度(SJW)用於補償振盪器容差。 可以通過同步跳轉寬度(SJW),延長或縮短相位緩衝區段。

採樣點(SAMPLE POINT)

採樣點是讀取總線電平並將其解釋爲相應位的值的時間點,不是標稱位時間的一部分。CAN 協議允許用戶指定位樣本模式(SAM)爲單個樣本模式或 3 個樣本模式。在單採樣模式下,採樣在 PHASE_SEG1 的末尾進行。在 3 個採樣模式下,取兩個額外的採樣,間隔一個TQ,最後一次採樣在PHASE_SEG1 的末尾進行。

信息處理時間(INFORMATION PROCESSING TIME)

信息處理時間是邏輯確定採樣位的位級所需的時間,不是標稱位時間的一部分。從採樣點開始,以 TQ 測量(例如,Microchip CAN 模塊固定爲2TQ)。 由於相位段2 也在採樣點開始並且是位時間中的最後一個段,因此需要相位段2最小值不小於信息處理時間。

時間量子(TIME QUANTUM)

  TIME QUANTUM 是從振盪器週期得出的固定時間單位。存在可編程預分頻器,具有範圍至少爲 1 到 32的整數值。從MINIMUM TIME QUANTUM 開始,TIME QUANTUM 的長度可以爲 TIME QUANTUM = m * MINIMUM TIME QUANTUM,m 爲預分頻器的值。
  在實際的 CAN 控制器芯片中,時間量子的持續時間是 CAN 系統時鐘的一個週期 tSCL,它來自振盪器參考tCLK。 用戶可以通過可編程預分頻器(Baud Rate Prescaler,BRP)調整 CAN 系統時鐘。如下公式所示:tSCL = BRP × 2tCLK 。在大多數的 CAN 控制器芯片中,TQ 等於振盪器週期的兩倍。
在這裏插入圖片描述
標稱比特位時間中各時間段的時間量子量子個數如下:

  • 同步段(SYNCHRONIZATION SEGMENT,SYNC_SEG): 長度固定的 1 個時間量子 Tq
  • 傳播時間段(PROPAGATION TIME SEGMENT,PROP_SEG): 長度可編程爲 1 ~ 8 個時間量子Tq
  • 相位緩衝段1(PHASE BUFFER SEGMENT1,PHASE_SEG1): 長度可編程爲 1 ~ 8 個時間量子Tq
  • 相位緩衝段2(PHASE BUFFER SEGMENT2,PHASE_SEG2): 長度可編程爲 1 ~ 8 個時間量子Tq。PHASE_SEG2 是 PHASE_SEG1 和 信息處理時間這兩者中大的那個。
  • 信息處理時間(INFORMATION PROCESSING TIME): 小於或等於 2 個時間量子Tq。信息處理時間是從保留用於計算後續比特級別的SAMPLE POINT開始的時間段。
  • 同步跳轉寬度( Synchronization Jump Width,SJW): 因時鐘頻率偏差、傳送延遲等,各單元有同步誤差。SJW 爲補償此誤差的最大值。長度可編程爲 1 ~ 4 個時間量子Tq

1 個比特位時間內的 TIME QUANTA 總數必須至少可編程爲 8 到 25

如果選擇每位一個樣本,則段 PHASE_SEG1 的持續時間可以在1到 8 個時間量子之間,如果選擇每個位 3 個樣本,則可以在 2 到 8 個時間量子之間。

傳播延遲(PROPAGATION DELAY)

  傳播段 PROP_SEG 的存在是由於 CAN 協議允許在競爭訪問總線的節點之間進行非破壞性仲裁,以及對幀內確認的要求。 在非破壞性仲裁的情況下,在仲裁字段期間可能有多個節點正在發送。每個發送節點從總線採樣數據以確定它是否已贏得仲裁,並且還在仲裁失敗的情況下接收仲裁字段。 當每個節點對每個比特進行採樣時,採樣的值必須是總線上的每個節點發送的比特值的邏輯疊加。 在確認字段的情況下,發送節點發送隱性位但期望接收顯性位,即必須在採樣點處對主導值進行採樣。 傳播延遲段 PROP_SEG 用於延遲節點對比特的最早可能採樣,直到來自所有發送節點的發送比特值已到達所有節點。
   當節點在位邊沿上同步時,系統中過多的傳播延遲會導致仲裁無效。 最終,CAN 系統中的各種延遲限制了給定比特率下的最大網絡總線長度。 兩個節點 A 和 B 之間的單向傳播延遲定義爲tProp(A,B),如下圖所示:
在這裏插入圖片描述
  上圖顯示了兩個節點之間的傳播延遲,並顯示節點 A 發送的比特值在時間 tProp(A,B) 之後由節點 B 接收,並且在節點 A 的傳播段結束之前,節點 B 發送的比特值在時間 tProp(B,A) 之後由節點 A 接收,從而確保節點 A 將正確地對比特值進行採樣。 由於節點 A 和節點 B 之間的傳播延遲,即使節點 B 的採樣點超過了節點 A 的比特時間,節點 B 也將正確採樣比特值。時間 tProp(A,B) 包括通過節點 A 的總線驅動器的傳播延遲加上從節點 A 到節點 B 的總線傳播延遲加上通過節點 B 的總線接收器的傳播延遲:tProp(A,B) = tTx(A) + tBus(A,B) + tRx(B)

同步

  位同步是位時序的一個重要問題,因此它也會影響 CAN 總線長度。 同步保證消息被正確解碼,儘管相位錯誤可能在節點之間累積。 相位誤差的主要原因是振盪器漂移,在網絡上空間分佈的節點之間的傳播延遲,或由噪聲干擾引起的相位誤差。 CAN 規範定了兩種類型的同步:硬同步重新同步(也稱爲軟同步)
  相位緩衝段(Phase_Seg1和Phase_Seg2)和同步跳轉寬度(SJW)用於補償振盪器容差。 可以通過同步延長或縮短相位緩衝區段。同步發生在從隱性到顯性的邊沿,其目的是控制邊沿和採樣點之間的距離。
  通過對每個時間量程中的實際總線電平進行採樣並將其與前一個採樣點的總線電平進行比較來檢測邊沿。 只有在前一個採樣點採樣隱性位並且實際時間量子總線電平佔優勢時,才能進行同步。如果邊沿發生在Sync_Seg內部,則邊沿是同步的,否則邊沿與Sync_Seg的結束之間的距離是邊沿相位誤差,以時間量子爲單位測量。 如果邊沿出現在Sync_Seg之前,則相位誤差爲負,否則爲正。
  當邊沿相位誤差的大小小於或等於SJW的程序值時,硬同步和重同步的結果是相同的。當相位誤差大於SJW時,再同步不能完全補償相位誤差,仍然存在(相位誤差- SJW)的誤差。

CAN 系統中每個節點的位時序是從其節點的參考頻率(fOSC)導出的。 這產生了由於節點之間的振盪器容差小於理想值而在節點之間發生相移和振盪器漂移的情況。CAN 規範表明,最差情況下振盪器容差爲1.58%,僅適用於低比特率(125 kb/s或更低),對於其他情況,並沒有進行說明。

同步規則

  1. 一個標稱比特位時間內只允許一種同步方式,要麼硬同步要麼重同步;
  2. 只有當在前一個採樣點檢測到的值(前一個讀總線值)與緊接在邊緣之後的總線值不同時,纔會使用邊緣進行同步。
  3. 只要在BUS IDLE期間存在“隱性”到“顯性”邊緣,就會執行硬同步。
  4. All other ’recessive’ to ’dominant’ edges fulfilling the rules 1 and 2 will be used for RESYNCHRONIZATION with the exception that a node transmitting a dominant bit will not perform a RESYNCHRONIZATION as a result of a ’recessive’ to ’dominant’ edge with a positive PHASE ERROR, if only ’recessive’ to ’dominant’ edges are used for resynchronization.
  5. 只有在隱性電平到顯性電平的邊沿纔會用於同步
  6. 僅當前一個採樣點的值與邊沿之後的總線值不同時,纔會使用邊沿進行同步。
  7. 硬同步發生在報文的 SOF 位,所有接收節點調整各自當前位的同步段,使其位於發送的SOF位內;
  8. 重同步發生在一個報文 SOF 位之外的其它段,當下降沿落在了同步段之外時發生重同步;
  9. 在 SOF 到仲裁場發送的時間段內,如果有多個節點同時發送報文,那麼這些發送節點對跳變沿不進行重同步
  10. A transmitting node will not resynchronize on a positive phase error (e > 0). This implies that a transmitter will not resynchronize due to propagation delays of it’s own transmitted message. The receivers will synchronize normally. 發送節點不會在正相位誤差(e> 0)上重新同步。 這意味着發送器不會由於其自身發送的消息的傳播延遲而重新同步。 接收器將正常同步。
  11. If the absolute magnitude of the phase error is greater than the SJW, then the appropriate phase segment will be adjusted by an amount equal to the SJW. 如果相位誤差的絕對幅度大於SJW,則適當的相位段將被調整等於SJW的量。

硬同步

  硬同步是接收單元在總線空閒狀態檢測出幀起始時進行的同步調整。硬同步僅在消息幀的開頭(SOF 位)執行。 在空閒時段(幀間間隔(INTERFRAME SPACING)中的總線空閒)之後,網絡上的每個 CAN 控制器都會在 SYNC_SEG 的第一個接收隱性到顯性邊沿時初始化其當前位週期時序。 隨後在每個接收到的隱性到顯性邊沿的整個消息的剩餘部分中執行一次重新同步。
  硬同步調整寬度不限。經過硬同步後,無論邊沿相位誤差如何,位時序都會在 Sync_Seg 結束時重新啓動。因此,硬同步迫使硬同步的邊沿位於重新啓動的位時間的同步段內。下面以節點 A 和節點 B 爲例:
在這裏插入圖片描述
根據 CAN 規範,當總線空閒時總線爲隱性電平。此時,節點 A 發送數據,在出現 SOF 時,總線上的其他節點(如節點 B)也會監控到該變化。但是,節點 B 會發現,自己當前位的 SS 段和發送節點 SOF 位的 SS 段不同步。此時,節點 B 將強制將自己 SOF 位的 SS 段拉到與節點 A 的 SOF 位的 SS 段同步。

重新同步

  重新同步以維持由硬同步建立的初始同步。在沒有重新同步的情況下,由於節點之間的振盪器漂移等因素,接收節點可能會失去同步。該功能(Microchip’s CAN 控制器通過實現數字鎖相環(DPLL)功能來實現重新同步)將總線上隱性到顯性邊沿的實際位置與預期邊沿的位置(在 SyncSeg 內)進行比較,並根據需要調整位時間。 比特的相位誤差由邊沿相對於SyncSeg的位置給出,以TQ測量,並定義如下:

  • e = 0: 邊沿位於 SyncSeg 內(無同步)
  • e > 0: 邊沿位於 SyncSeg 之後,採樣點之前 (TQ added to PS1).
  • e < 0: 邊沿位於前一位的採樣點之後. (TQ subtracted from PS2)

e = 0

在這裏插入圖片描述

e > 0

  在重新同步期間,如果在 SYNC_SEG 之後和接收器的採樣點之前接收到邊沿,則接收器將其解釋爲來自較慢發送器的後沿。 在這種情況下,接收器的 PHASE_SEG1 段被延長以匹配發送器的定時,具有更好的精度。
在這裏插入圖片描述

e < 0

  如果接收器在其採樣點之後和 SYNC_SEG 之前檢測到邊沿,即在 PHASE_SEG2 段期間,則將其解釋爲早期邊沿,並且下一個比特週期由更快的節點發送。 在這種情況下,接收器縮短其 PHASE_SEG2 週期以匹配更快發射器的定時。
在這裏插入圖片描述
  重新同步導致比特時間的縮短或延長(相位緩衝段僅臨時加長或縮短,在下一個位時間,段返回到它們的標稱值),使得采樣點的位置相對於邊沿移位。當引起再同步的邊沿相位誤差爲正時,相位分段1 被延長。如果相位誤差的大小小於SJW,則相位Seg1的長度爲相位誤差的大小,否則爲SJW的長度;當引起重同步的邊沿相位誤差爲負時,相位段2 縮短。如果相位誤差的大小小於SJW,則相位段2 用相位誤差的大小來縮短,否則用SJW來縮短。
  在預期時刻之前或之後發生的過渡會促使控制器計算時間差,並根據計算所得的時間差延長相位段1或者縮短相位段2。這有效地改變接收器到發信器的時序,將它們同步在一起。這個重新同步過程不斷地在每次隱性向顯性過渡時進行已確保發信器和接收器保持同步。不斷地重新同步降低了噪聲產生的錯誤,讓同步至已經失去仲裁的節點的接收節點重新同步到贏得仲裁的節點。

參考

  1. 維基百科—— CAN BUS
  2. Understanding Microchip’s CAN Module Bit Timing
  3. AN IN-DEPTH ANALYSIS OF CAN BIT-TIMING AND DELAY SOURCES
  4. Determination of Bit Timing Parameters for the CAN Controller SJA 1000
  5. The Configuration of the CAN Bit Timing
  6. 瑞薩 CAN 入門書
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章