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