CAN總線位定時(shí)和同步機(jī)制的分析
引言
CAN(Controller Area Network)是有效支持分布式實(shí)時(shí)控制的串行通訊網(wǎng)絡(luò)。從位定時(shí)的同步方式考慮,它實(shí)質(zhì)上屬于異步通訊協(xié)議,每傳輸一幀,以幀起始位開始,而以幀結(jié)束及隨后的間歇場結(jié)束。這就要求收/發(fā)雙方從幀起始位開始必須保持幀內(nèi)信息代碼中的每一位嚴(yán)格的同步。從位定時(shí)編碼考慮,它采用的是非歸零編碼方式,位流傳輸不像差分碼那樣可以直接用電平的變化來代表同步信號,因此為保證同步質(zhì)量,CAN協(xié)議定義了自己的位同步方式:硬同步和重同步。
目前相關(guān)文獻(xiàn)均缺乏對CAN總線位定時(shí)與同步機(jī)制的詳細(xì)分析。本文深入分析了CAN總線位周期的結(jié)構(gòu)以及CAN的兩種位同步方式 (硬同步和重同步),并明確給出了重同步時(shí)重同步跳轉(zhuǎn)寬度和相位差補(bǔ)償?shù)年P(guān)系,對于指導(dǎo)位定時(shí)參數(shù)的設(shè)置有較好的參考價(jià)值。
sp; 位周期結(jié)構(gòu)
網(wǎng)絡(luò)的標(biāo)準(zhǔn)位速率,其中就是額定位時(shí)間(也稱標(biāo)準(zhǔn)位周期)。如圖1所示,CAN總線的額定位時(shí)間是由4部分組成的:同步段(SYNC_SEG),傳播段(PROP_SEG),相位緩沖段1(PSEG1)和相位緩沖段2(PSEG2)。所以額定的為時(shí)間 ,位周期中的這些段都是可以編程設(shè)置的,且都可以用整數(shù)個(gè)基本時(shí)間單位(時(shí)間份額)來表示。這個(gè)基本時(shí)間單位由振蕩器分頻而得的 ,(BRP為波特率預(yù)分頻因子,也可以編程設(shè)置)。
圖1 CAN總線額定位時(shí)間的結(jié)構(gòu)
同步段是CAN總線位周期中每一位的起始部分。不管是發(fā)送節(jié)點(diǎn)發(fā)送一位還是接收節(jié)點(diǎn)接收一位都是從同步段開始的。但是由于發(fā)送節(jié)點(diǎn)和接收節(jié)點(diǎn)之間存在網(wǎng)絡(luò)傳輸延遲以及物理接口延遲,發(fā)送節(jié)點(diǎn)發(fā)送一位之后,接收節(jié)點(diǎn)延遲一段時(shí)間才能接收到,因此,發(fā)送節(jié)點(diǎn)和接收節(jié)點(diǎn)對應(yīng)同一位的同步段起始時(shí)刻就有一定的時(shí)延,記為。
傳播延時(shí)段的設(shè)置就是要補(bǔ)償該段時(shí)延()的。CAN總線協(xié)議中的非破壞性仲裁機(jī)制以及幀內(nèi)應(yīng)答機(jī)制,都要求那些正在發(fā)送位流的發(fā)送節(jié)點(diǎn)能夠同時(shí)接收來自其他發(fā)送節(jié)點(diǎn)的“顯性位”(邏輯0),否則就會使得仲裁無效或者應(yīng)答錯(cuò)誤。傳播延遲段推遲那些可能較早采樣總線位流的節(jié)點(diǎn)的采樣點(diǎn),保證由各個(gè)發(fā)送節(jié)點(diǎn)發(fā)送的位流到達(dá)總線上的所有節(jié)點(diǎn)之后才開始采樣。
重同步跳轉(zhuǎn)寬度SJW并不是位周期里的一段,卻是位定時(shí)計(jì)算時(shí)的一個(gè)重要的指標(biāo),它定義了重同步時(shí)為補(bǔ)償相位誤差位時(shí)間中相位緩沖段1或者相位緩沖段2被增長或縮短的最大基本時(shí)間單元數(shù)。 同步機(jī)制
CAN總線的位同步只有在節(jié)點(diǎn)檢測到“隱性位”(邏輯1)到“顯性位”(邏輯0)的跳變時(shí)才會產(chǎn)生,當(dāng)跳變沿不位于位周期的同步段之內(nèi)時(shí)將會產(chǎn)生相位誤差。該相位誤差就是跳變沿與同步段結(jié)束位置之間的距離。如果跳變沿發(fā)生在同步段之后采樣點(diǎn)之前為正的相位誤差;如果跳變沿位于同步段之前采樣點(diǎn)之后為負(fù)的相位誤差。相位誤差源于節(jié)點(diǎn)的振蕩器漂移,網(wǎng)絡(luò)節(jié)點(diǎn)之間的傳播延遲以及噪聲干擾等。CAN協(xié)議規(guī)定了兩種類型的同步:硬同步和重同步。
硬同步
硬同步只在總線空閑時(shí)通過一個(gè)下降沿(幀起始)來完成,此時(shí)不管有沒有相位誤差,所有節(jié)點(diǎn)的位時(shí)間重新開始。強(qiáng)迫引起硬同步的跳變沿位于重新開始的位時(shí)間的同步段之內(nèi)。
重同步
在消息幀的隨后位中,每當(dāng)有從“隱性位”到“顯性位”的跳變,并且該跳變落在了同步段之外,就會引起一次重同步。重同步機(jī)制可以根據(jù)跳變沿增長或者縮短位時(shí)間以調(diào)整采樣點(diǎn)的位置,保證正確采樣。
.
如圖2,跳變沿落在了同步段之后采樣點(diǎn)之前,為正的相位誤差,接收器會認(rèn)為這是一個(gè)慢速發(fā)送器發(fā)送的滯后邊沿。此時(shí)節(jié)點(diǎn)為了匹配發(fā)送器的時(shí)間,會增長自己的相位緩沖段1(陰影部分)。增長的時(shí)間為相位差的絕對值,但是上限是重同步跳轉(zhuǎn)寬度SJW。
如圖3,跳變沿落在了采樣點(diǎn)之后同步段之前,為負(fù)的相位誤差,接收器把它解釋為一個(gè)快速發(fā)送器發(fā)送的下一個(gè)位周期的提前邊沿。同樣節(jié)點(diǎn)為了匹配發(fā)送器的時(shí)間,會縮短自己的相位緩沖段2(陰影部分),下一個(gè)位時(shí)間立即開始。縮短的時(shí)間也為相位差的絕對值,上限是重同步跳轉(zhuǎn)寬度SJW。
圖2 正相位誤差時(shí)的重同步
p;圖3 負(fù)相位誤差時(shí)的重同步
相位緩沖段只在當(dāng)前位周期內(nèi)被增長或者縮短,接下來的位周期,只要沒有重同步,各段將恢復(fù)為位時(shí)間的編程預(yù)設(shè)值。
當(dāng)相位差的絕對值小于或者等于重同步跳轉(zhuǎn)寬度SJW時(shí),重同步和硬同步的效果是相同的,能實(shí)現(xiàn)相位差的補(bǔ)償;但是如果相位差的絕對值比重同步跳轉(zhuǎn)寬度大,由于補(bǔ)償?shù)淖畲笾凳侵赝教D(zhuǎn)寬度,致使重同步不能完全補(bǔ)償相位差。
CAN協(xié)議的位填充機(jī)制除實(shí)現(xiàn)仲裁場、控制場、數(shù)據(jù)場和CRC序列的數(shù)據(jù)的透明性外,還增加了從“隱性位”到“顯性位”跳變的機(jī)會,也就是增多重同步的數(shù)量,提高同步質(zhì)量。在沒有出錯(cuò)影響的情況下,位填充原則保證了兩次重同步跳轉(zhuǎn)邊沿之間不會多于10個(gè)位周期(即5個(gè)顯性位,5個(gè)隱性位),而實(shí)際的系統(tǒng)會有錯(cuò)誤發(fā)生,使得實(shí)際的兩次重同步跳轉(zhuǎn)邊沿之間的間隔可能為17到23個(gè)位時(shí)間(活動(dòng)錯(cuò)誤標(biāo)志及其疊加6到12個(gè)位時(shí)間,錯(cuò)誤界定符8個(gè)位時(shí)間,間歇場3個(gè)位時(shí)間)。
結(jié)語
在實(shí)際的系統(tǒng)設(shè)計(jì)中,用戶可以根據(jù)振蕩器時(shí)鐘頻率,總線波特率以及總線的最大傳輸距離等因素,對CAN控制器的位定時(shí)參數(shù)進(jìn)行優(yōu)化設(shè)置【4,5】,協(xié)調(diào)影響位定時(shí)設(shè)置的兩個(gè)主要因素:振蕩器容差和最大總線長度,合理安排位周期中采樣點(diǎn)的位置和采樣次數(shù),保證總線上位流的有效同步的同時(shí),優(yōu)化系統(tǒng)的通訊性能,進(jìn)一步推進(jìn)CAN總線的廣泛應(yīng)用。