CAN總線作為異步通信方式,收發(fā)雙方節(jié)點需約定相同的波特率進行通訊,但由于各種因素影響,接收方的數據總會有誤差,當誤差過大時,整個通訊網絡將不能正常通訊。那么,該如何保障CAN節(jié)點之間通信同步呢?
CAN同步機制
1、CAN時鐘
首先了解一下CAN總線系統中的兩個時鐘:晶振時鐘周期和CAN時鐘周期。
晶振時鐘周期:是由單片機振蕩器的晶振頻率決定的,指的是振蕩器每振蕩一次所消耗的時間長度,也是整個系統中最小的時間單位。
CAN時鐘周期:CAN時鐘是由系統時鐘分頻而來的時間長度值,實際上就是一個時間份額Tq。
圖1 CAN時鐘與位時間的關系
其中,CAN位時間表示CAN的一位二進制數據所保持的時間,具體關系如圖2所示。
圖2 CAN總線二進制報文與位時間關系
2、位時序
CAN總線作為串行通信,發(fā)送單元采用不歸零編碼,將數據以位流形式發(fā)送到總線上,并且每一位數據位寬都由CAN控制器的N個時鐘周期組成,該時鐘周期則為最小的時間單位Time Quantum(以下稱為Tq),這N個Tq被分為四段:同步段(SS)、傳播時間段(PTS)、相位緩沖段1(PBS1)、相位緩沖段2(PBS2),而采樣點位置處于PBS1和PBS2的交界處。
1位分為4個段,每個段又由若干個Tq構成,這稱為位時序,如圖3所示。
圖3 同TQ數量情況下不同采樣點的配置時序
其中,各段的作用為:
同步段(SS:Synchronization Segment):CAN網絡中的所有節(jié)點,在接收一位數據時,以此段作為位起始的參考點,進行下降沿的檢測,統計下降沿基于SS段的偏移,然后進行位時序的調整,使接收趨于同步(下降沿在理想情況下應出現在SS段)。需注意,進行位時序調整的條件是檢測到下降沿,若無下降沿則不進行調整,因此為了避免多個相同連續(xù)位出現導致位時序得不到調整,產生不同步的情況,CAN控制器增加了填充位的概念,當出現連續(xù)5個相同位后,添加一位相反電平的填充位。SS段長度固定為1個Tq。
傳播時間段(PTS:Propagation Time Segment):CAN總線上數據的傳輸會受到物理延遲,比如發(fā)送單元的發(fā)送延遲、總線上信號的傳播延遲、接收單元的輸入延遲等,PTS段就是用來補償這些因素產生的時間延遲。而PTS段長度至少應為這些因素產生的時間延時的2倍,PTS段長度至少為1個Tq。
相位緩沖段1(PBS1:Phase Buffer Segment 1):若下降沿延后N個Tq,且延遲不大于同步跳轉寬度,使得原本位時序中采樣點位置提前N個Tq,則需要對PBS1段增加N個Tq數(使采樣點位置延后N個Tq),吸收這段誤差。PBS1段長度至少為1個Tq。
相位緩沖段2(PBS2:Phase Buffer Segment 2):若跳變邊沿提前N個Tq, 且不大于同步跳轉寬度,使得原本位時序中采樣點位置延后N個Tq,則需要對上一個位時序的PBS2段減少N個Tq數(使采樣點位置提前N個Tq),吸收這段誤差。PBS2段長度至少為2個Tq。
重同步補償寬度(SJW: reSynchronization Jump Width):SJW為PBS1增加或PBS2減少的最大Tq數。
3、CAN同步的策略
CAN同步是以位為單位,每接收一個下降沿,則進行一次同步。發(fā)送單元以約定好的位時序進行數據發(fā)送。接收單元根據總線上接收到的下降沿進行位時序同步。
但是,發(fā)送節(jié)點和接收節(jié)點作為互相獨立的硬件個體,時鐘頻率誤差、傳輸路徑上的(電纜、驅動器等)相位延遲等都會引起時序偏差。因此接收單元需通過硬同步或者重同步的方法進行位時序調整。如圖4幀結構所示,硬同步只在空閑狀態(tài)檢測出第一個下降沿(幀起始下降沿)時進行,而重同步則在其余各段進行。
圖4 CAN標準數據幀結構