【導(dǎo)讀】CAN協(xié)議與其它現(xiàn)場總線協(xié)議的區(qū)別中有一個是:它使用同步數(shù)據(jù)傳輸而不是異步傳輸(面向字符)。這意味著傳輸性能得到更有效的發(fā)揮,但是另一方面,這需要更加復(fù)雜的位同步方法。
在面向字符的協(xié)議中的位同步實(shí)現(xiàn)起來很簡單,在接受每個字符的起始位時進(jìn)行同步。但在同步傳輸協(xié)議中,只有一幀的開始才有一個起始位。這通常不足以使接收器的位采樣和發(fā)送器保持同步。為了使接收器在幀結(jié)束時也能正確采樣到接收的位流,就需要接收器不斷進(jìn)行重新同步。重新同步表示在位流中每個有效的信號邊沿都可對接收信號的時鐘周期進(jìn)行檢測。在信號邊沿間的最大時間周期內(nèi),發(fā)送和接受振蕩器之間最大可能的時間差必須在一個位間隔內(nèi)的標(biāo)稱采樣點(diǎn)之前和之后通過足夠的空閑時間(“相位緩沖段”)來補(bǔ)償。
由于CAN協(xié)議使用非破壞性的位總線仲裁和顯性應(yīng)答位,信號從發(fā)送器傳輸?shù)浇邮掌髟俜祷氐浇邮掌鞅仨氃谝粋€位時間內(nèi)完成。因此除了保留用于同步的時間外,還需要一個時間段(“傳輸延遲段”)對總線上的信號傳輸進(jìn)行補(bǔ)償以及用于發(fā)送和接收節(jié)點(diǎn)的內(nèi)部信號延遲。
一個位間隔的時間段的長度根據(jù)振蕩器周期,被定義為一個基本時間單位(時間份額)的倍數(shù)?;緯r間單位tq是表示同步機(jī)制時間分辨率的基本單位并且因?yàn)橥蕉味灰氲轿粫r間中。同步段是位時間中CAN信號電平的邊沿將要產(chǎn)生的那一部分。在同步段之后產(chǎn)生的邊沿與同步段之間的距離稱為該邊沿的“相位誤差e”。
傳輸延遲段提供必要的時間用于處理網(wǎng)絡(luò)中的最大信號傳輸延遲。該時間段必須兩倍于兩個節(jié)點(diǎn)之間的最大信號傳輸延遲時間加上發(fā)送和接收節(jié)點(diǎn)的內(nèi)部延遲時間之和。
需要區(qū)分兩種類型的同步:幀起始處的“硬同步”和幀中間的“重新同步”。在硬同步之后,位時間在sync段結(jié)束時重新啟動而不考慮相位的誤差。這樣硬同步強(qiáng)制產(chǎn)生硬同步的邊沿延伸到重新啟動的位時間的同步段中。重新同步導(dǎo)致位時間縮短或延長,從而使采樣點(diǎn)產(chǎn)生移位。
通過標(biāo)稱采樣點(diǎn)之前和之后的相位緩沖段,在重新同步時為實(shí)際采樣點(diǎn)的移位保留了空閑時間。同步只發(fā)生在隱性位轉(zhuǎn)換到顯性位電平的邊沿。通過在每個時間量內(nèi)對總線的實(shí)際電平進(jìn)行采樣并和前一次采樣點(diǎn)的總線電平相比較可檢測出邊沿。如果在同步段內(nèi)檢測到邊沿,那么該邊沿可實(shí)現(xiàn)同步,否則信號邊沿與同步段的結(jié)束之間的距離就是邊沿相位誤差(以時間量計(jì)算)。如果邊沿發(fā)生在同步段之前,相位誤差為負(fù),否則為正。
如果相位誤差為正,相位緩沖段1將被延長。每次重新同步時,相位緩沖段縮短或延長的數(shù)量(“同步跳轉(zhuǎn)寬度”,SJW)的最大值受到限制,它可編程為1和Min{4,Phase_Seg1}之間的值。
當(dāng)信號邊沿相位誤差的數(shù)值小于或等于SJW的編程值。硬同步和重新同步的值將是相同的。如果相位誤差的數(shù)量大于SJW,重新同步將無法完全補(bǔ)償相位誤差,這樣誤差(相位誤差-SJW)仍然存在。
在兩次采樣點(diǎn)之間只允許執(zhí)行一次同步。重新同步維持了邊沿和采樣點(diǎn)之間的最小距離,使總線電平的穩(wěn)定和濾除尖峰的時間小于傳輸段和相位段1時間之和。
一個位時間內(nèi)不同的段可按照下面的限度進(jìn)行編程:
Sync_Seg:1時間份額
Prop_Seg1:1...8或更多時間份額
Phase_Seg1:1...8或更多時間份額
Phase_Seg2:Max{Phase_Seg1,信息處理時間}
波特率預(yù)分頻器:1...32
SJW:1...4,但是不大于Min{4,Phase_Seg1}
在同步的時候,Phase_Seg1可以長于編程的標(biāo)稱時間而Phase_Seg2可以短于標(biāo)稱時間。
“數(shù)據(jù)處理時間”從采樣點(diǎn)之后開始,它是用于決定隨后發(fā)送的位電平的時間(例如,數(shù)據(jù)位、CRC位、填充位、錯誤標(biāo)志或空閑)。該時間不能大于2個時間量。其長度為Phase_Seg2編程值的下限。在同步時Phase_Seg2可以小于數(shù)據(jù)處理時間,這不會影響總線的時序。
每個位時間的時間份額值必須設(shè)置為8到25的范圍內(nèi)。
如果發(fā)送器的振蕩器比接收器的慢(a),用于同步的信號邊沿將延遲到達(dá)接收器。接收器可通過采樣點(diǎn)的移位進(jìn)行補(bǔ)償??裳a(bǔ)償?shù)淖畲罄鄯e“延遲”(邊沿相位誤差)由相位段1所保留的時間確定。在重新同步過程中,如果相位誤差的值小于等于SJW,采樣點(diǎn)則根據(jù)所發(fā)生的邊沿相位誤差e進(jìn)行移位,并因此恢復(fù)與當(dāng)前位位置相關(guān)的采樣點(diǎn)的位置。
當(dāng)發(fā)送器的振蕩器比接收器的快時(b),信號邊沿的到達(dá)比接收器預(yù)期的要早,因此下一個位時間間隔必須提前啟動。這通過縮短相位緩沖段2來實(shí)現(xiàn)。這種情況下,同步段被省略了,因此在重新同步之后,從信號邊沿到采樣點(diǎn)之間的距離和同步段到采樣點(diǎn)之間的距離相等(如果沒有檢測到邊沿)。在第一個例子中,該“提前”邊沿的相位誤差值小于SJW,因此可以實(shí)現(xiàn)完全補(bǔ)償。
相位緩沖段只是暫時改變,在下一個位時間里如果沒有檢測到相位誤差,它們將恢復(fù)為標(biāo)稱值。接收器希望邊沿出現(xiàn)在同步段當(dāng)中。
下面是應(yīng)用于位同步的規(guī)則[ISO99-1]:
在一個位時間內(nèi)的兩次采樣點(diǎn)之間只有一次同步。
只有在前一個采樣點(diǎn)檢測到的信號電平與后一個采樣點(diǎn)的信號電平不同時,才能使用從隱性到顯性的信號邊沿進(jìn)行同步。短暫的干擾脈沖是不起作用的。
只要在總線空閑時出現(xiàn)一個隱性到顯性的信號邊沿,就會執(zhí)行一個“硬同步”(新的位時間間隔的起始)。
在幀間空間中(間歇場的第一位除外)隱性到顯性的信號邊沿會導(dǎo)致執(zhí)行一個硬同步。