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或更低),對于其他情況,并沒有進行說明。
同步規則
硬同步
??硬同步是接收單元在總線空閑狀態檢測出幀起始時進行的同步調整。硬同步僅在消息幀的開頭(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。這有效地改變接收器到發信器的時序,將它們同步在一起。這個重新同步過程不斷地在每次隱性向顯性過渡時進行已確保發信器和接收器保持同步。不斷地重新同步降低了噪聲產生的錯誤,讓同步至已經失去仲裁的節點的接收節點重新同步到贏得仲裁的節點。
參考
總結
以上是生活随笔為你收集整理的CAN 总线 之七 BOSCH CAN 位时序 和 同步的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CAN 总线 之六 BOSCH CAN
- 下一篇: SourceInsight 4.0 之四