楊福宇
(重慶工業(yè)自動化儀表研究所,重慶401123)
以太網(wǎng)已滲透到工業(yè)領(lǐng)域,例如工業(yè)自動控制中的各種工業(yè)以太網(wǎng)(如Profinet、etherCAT、EPA),航空領(lǐng)域的AFDX,汽車領(lǐng)域的 Open(One-pair ether-net),目前主要是基于IT領(lǐng)域的100BASE-TX以太網(wǎng)技術(shù)。工業(yè)領(lǐng)域與民用有較大的區(qū)別:現(xiàn)場的干擾大,實時性要求高,可信賴性要求高。所以它們都添加了許多措施來滿足這樣的要求。但是對深埋在底層機制中的問題尚未觸及,即物理層中的4b/5b編碼/解碼,它會影響到幀的CRC檢驗效果。物聯(lián)網(wǎng)、云計算等介于民用與工業(yè)應(yīng)用之間,它們也倚賴以太網(wǎng)傳送數(shù)據(jù),所以也要重視這一問題可能帶來的影響。
以太網(wǎng)的傳送速率比較高,為了傳送中不致出現(xiàn)長時間的同一極性的信號電平傳送,造成接收處時鐘恢復的困難以及直流電平漂移引起信號失真,或者頻率域上能量分布不均,某一頻率下的成分太高,造成電磁干擾太大,影響周邊環(huán)境中的電子裝置,所以在物理層有專門的編碼設(shè)計。這些設(shè)計會造成傳送中產(chǎn)生的誤碼數(shù)目放大,雖然32位CRC檢驗可以發(fā)現(xiàn)部分錯,但仍容易造成錯幀漏檢,對控制用途的工業(yè)以太網(wǎng)來說已經(jīng)超出了容許值。鑒于工業(yè)以太網(wǎng)已有規(guī)模性的應(yīng)用,有些還是安全攸關(guān)的,這一問題就很嚴重。
圖1是100BASE-TX收發(fā)器的方塊圖,以太幀的數(shù)據(jù)以4b為單位經(jīng)MII接口送到收發(fā)器,然后經(jīng)4b/5b編碼器轉(zhuǎn)為5b,串行化后再經(jīng)擾碼器、3電平編碼送往輸出。擾碼器是帶反饋的線性移位寄存器,它提供一個頻譜較寬的數(shù)據(jù)流,它的輸出與4b/5b編碼器的串行輸出異或后到3電平編碼器。所以它只是提供一個調(diào)制信號。真正在電纜上傳送的是5b編碼且經(jīng)亂碼后的數(shù)據(jù)流,它的傳送速率是125Mb/s。接收過程正好相反,由于擾碼器開始在收發(fā)二端實行了同步,在線路上不出錯的情況下,收到的5b編碼就是發(fā)送的5b編碼。如果線路上有干擾,收發(fā)二端的5b編碼就有所不同,誤碼的個數(shù)可在5b編碼流中統(tǒng)計。但是,以太幀的CRC檢驗是對解碼后的4b數(shù)據(jù)進行的。CRC檢驗一般以海明距離(HD)來表示其檢錯的能力,例如HD=4表示發(fā)生4個位(bit)錯時,這時CRC檢驗可能驗不出錯,只能保證任意3個位錯一定可驗出來。根據(jù)參考文獻[1],以太網(wǎng)的32位CRC多項式只能達到HD=4。4b/5b編碼如表1所列。
圖1 100BASE-TX方塊圖(見MC9S12NE64單片機)
表1 100BASE-TX以太網(wǎng)4b/5b編碼
由表1可見,電纜上以5b編碼傳送中發(fā)生一個錯時,在收發(fā)兩端會產(chǎn)生4b編碼的多位錯,例如4b碼0000對應(yīng)的5b編碼為11110,傳送中在5b編碼的第5位錯變?yōu)?1110,解碼回來是0110,就有2位錯,更嚴重的是傳送中在5b編碼的第2位錯變?yōu)?1100,解碼回來是1110,就有3位錯。對每種4b編碼的改變情況分析后可知,誤碼擴展較多為2倍。這種誤碼的擴展是否線性地縮小了CRC檢驗的HD是值得關(guān)心的,如果擴展2倍,原來的CRC檢驗理論HD=4,就只相當于實際HD=2了。
5b中未被占用的部分或者是非法代碼,或者是控制代碼,發(fā)生變?yōu)檫@類5b錯時會有其他的報錯措施處理,這里就不討論了。
在關(guān)注誤碼擴展造成CRC檢驗的有效性下降時,需要考慮有誤碼時產(chǎn)生的錯碼多項式。如果錯碼多項式是CRC生成多項式的倍數(shù),那么CRC檢驗就失效了,會產(chǎn)生錯幀漏檢。但是像以太網(wǎng)幀長很長,受CRC檢驗的部分達到12 112位,要搜索漏檢的最小出錯數(shù)(即受4b/5b編碼影響后的海明距離HD)將有天文數(shù)字的工作量,需要大型計算機才能完成。但是我們?nèi)阅芡ㄟ^簡單的搜索來找出HD的上限,可以證明4b/5b編碼對原有CRC檢驗的檢驗?zāi)芰τ休^大的影響。
這個方法是:選擇能因5b中的一個誤碼使某個4b碼變?yōu)?000的4b作為種子,然后找出最少量的4b種子在幀的不同位置時進行組合,求出CRC值,如果CRC值中含最少量的非全0的4b,且這個4b也是一個種子,那么這個組合誤碼時便使CRC檢驗通過,此時參與組合的4b的數(shù)目及CRC中的種子數(shù)就最少,就是HD。
為此,先要確定哪些4b是種子。根據(jù)表1,4b∈{1110,1010,1100,0110},在5b中的一個誤碼作用下會變成0000。
而{1000,0100,0010,0001}需要5b中的2~4個誤碼才會變?yōu)?000。例如0001的5b編碼是01001,它需要5b中的4個誤碼才會變?yōu)?1110(對應(yīng)0000)。但是利用模2加法的疊加原理,它們也能在5b中的一個誤碼時變?yōu)?000。我們在0001上疊加0010,于是4b變?yōu)?011,對應(yīng)的4b是10101,5b中的第1位產(chǎn)生誤碼,變?yōu)?0100,譯碼后變?yōu)?010,即疊加上的4b,原來的0001不見了,這個5b中的一個誤碼等效地使0001變?yōu)?000。類似地分析其他各種4b,可以得到4b∈{1110,1010,1100,0110,1000,0100,0010,0001}時,在5b中的一個誤碼作用下會變成0000,這些4b稱為種子,用于程序的搜索。其余的4b無法滿足種子的要求。
疊加原理在CRC檢驗中是可行的,假定所有產(chǎn)生誤碼的種子(不管它是否要疊加一個值),都處在CRC域以外,5b中的多個誤碼就可以由這些種子的變化,而使幀產(chǎn)生以這些種子構(gòu)成的錯碼多項式。我們只要搜索以這些種子構(gòu)成的錯碼多項式,就可以確定HD的上限了。
為了便于讀者理解,先以16位CRC檢驗加以說明。在利用100BASE-TX以太網(wǎng)傳送功能安全要求的應(yīng)用時,往往添加高層協(xié)議,這些協(xié)議采用附加的16位CRC檢驗,例如Safety on etherCAT規(guī)定每2字節(jié)數(shù)據(jù)添加1個16位CRC檢驗和。一般地說,對很短的幀,16位CRC檢驗可以達到很高的錯誤檢出數(shù)[2],例如G=0xC86C=[1100,1000,0110,1100,1],在135位時可達到 HD=6,即可以檢測出所有5位及以下的位錯。
但根據(jù)本次搜索,在5b傳送過程中有3位錯就要漏檢了。如圖2所示,b35~32=1110,b11~8=1000時,CRC=0000,0000,0000,1110,由于很短,甚至用手工也可以進行驗算。它的3個非0000的4b均屬于種子4b,只要各有一個傳送位錯就可以變?yōu)?000。由于b11~8=1000需要添加輔助的數(shù)據(jù)0010,而變?yōu)?010,所以要將上述b35~32=1110,b11~8=1010及其CRC全部放到以太幀的數(shù)據(jù)域中,就左移16位,將有Txd51~48=1110,Txd27~24=1010,以及Txd3~0=1110。添加數(shù)據(jù)的其余4b可以任選。在這個例子的對應(yīng)半字節(jié)處以5b傳送時各發(fā)生一個錯,接收方就會收到Rxd51~48=0000,Rxd27~24=0010,以及 Rxd3~0=0000,而收發(fā)雙方的差錯就時,Exd51~48=1110,Exdb27~24=1000,以及 Exd3~0=1110。它是b35~32=1110,b11~8=1000,時CRC=0000,0000,0000,1110左移16位的結(jié)果,所以它是CRC生成多項式的倍數(shù)。這個例子就是錯幀漏檢了,而實際發(fā)生的傳送中的位錯只有3個,且?guī)拈L度僅52位。與未受4b/5b編碼影響時的135位時可達到HD=6相比,可見性能退化很多。
圖2 由于5b中有3個位錯而錯幀漏檢的例子
另一個常用的16位CRC是ANSI-16,其生成多項式是 G=0xC002=[1100,0000,0000,0010,1]。當 b3~0=1100時CRC=0000,0000,0010,1000。它的3個非0000的4b均屬于種子4b。將它左移16位,可見數(shù)據(jù)只要3字節(jié),就可能出現(xiàn)HD=3的漏檢。
由于只要對應(yīng)的3個4b處是規(guī)定的種子或與種子配合生成的特定數(shù)據(jù)(例如與1110對應(yīng)的特定數(shù)據(jù)為1110,與1000配合0010生成特定數(shù)據(jù)為1010),幀的其余部分可以任選,所以HD=3的漏檢例子的概率是(2-4)3=2-12。如果考慮16位CRC檢驗覆蓋的數(shù)據(jù)幀中其他的漏檢數(shù)據(jù)流實例還有很多,那么HD=3的漏檢的概率會很大,例如ANSI-16的搜索結(jié)果中會有136次,此時ANSI-16HD=3的漏檢概率大約為0.033。而0xC86C的HD=3的漏檢概率僅0.001,可見不同的生成多項式受影響的程度還是有區(qū)別的。
仍然用種子4b在以太網(wǎng)MAC幀的不同位置進行組合,搜索找出HD的上限。
由于以太幀長12 112位,有3 028個4b位置,CRC含8個4b位置,搜索比較費時。得到的結(jié)果是HD的上限=4,這似乎與原來CRC檢驗的HD=4一致,但是其出現(xiàn)漏檢的概率大為增加了。Koopman[1]的計算結(jié)果是接近2-32=2.3×10-10。按本文搜索到HD=4的每個實例的漏檢率相當于(2-4)4=2-16。而這樣的實例有近100個,如此一來,HD=4的漏檢概率大約為0.001 5,大了許多。
上述計算的近似性質(zhì)源于搜索方法,由于時間的限制,未能做更多的組合搜索。實際上存在4個4b種子的組合,它們的 CRC和是全0。DATA1:b5587~5584=1010,b715~712=0110時,CRC和=0000,0000,0000,0000,0000,0000,1110,0110。DATA2:b8379~8376=0100,b1727~1724=1010時CRC和也是=0000,0000,0000,0000,0000,0000,1110,0110。當DATA1和DATA2相加時便有全0的CRC和。此時4個4b種子全在數(shù)據(jù)域。根據(jù)CRC檢驗的做法知道,當生成多項式除盡時,CRC檢驗和是全0。所以當除法做到生成多項式最后一位是b712時已經(jīng)除盡,上述4個4b種子的位置以4b為單位左、右移時,CRC檢驗和仍然是全0。可見這樣的漏檢幀也是很多的,這樣的組合未在搜索方法之中,引起漏檢概率的低估。
對以太網(wǎng)MAC幀CRC檢驗,HD=4的起始位置是幀長大于2 975位[1]。在本搜索的結(jié)果中,由于4b/5b編碼的干擾,HD=4的位置已發(fā)現(xiàn)有496位的例子:錯誤多項式為b495~492=1000,b395~392=1110,b19~16=1000,b3~0=0001。它的CRC檢驗和為全0。而在原來未干擾前,這個長度下可以保證HD=5。
在分析干擾對誤碼影響時要考慮這樣一點:干擾在時間上不是均勻分布的。誤碼率是在一段較長時間內(nèi)統(tǒng)計的平均值,所以在短時間內(nèi)仍有可能出現(xiàn)較多的誤碼。干擾發(fā)生在電感性負載開關(guān)的瞬間,或者雷擊的時候,此時誤碼就較多。功能安全的設(shè)計要考慮這個瞬間可能引起的問題。
補充CRC檢驗是PROFISAFE的關(guān)鍵安全措施,其設(shè)計要求是在最壞誤碼率ber=10-2時能達到殘余錯(即錯幀漏檢 概率)引 起 的功 能 失效 概 率小 于 10-9/h[3]。PROFISAFE對123字節(jié)的數(shù)據(jù),采用補充的32位CRC,此時碼長為984位。假定這個32位CRC與以太網(wǎng)的一樣(如果不一樣,則需要做相應(yīng)的搜索,找出4b/5b編碼對該CRC檢驗HD的影響,這是工作量的問題,不妨礙以下討論),按本文搜索到的例子,只要496位就會發(fā)生HD=4的情況,這個誤差多項式在984位中有(984-496)/4=122個可存在的位置,所以它的安全數(shù)據(jù)被錯幀漏檢的概率是(ber)4×122。在ber=10-2時,錯幀漏檢概率就是1.22×10-6。對PROFISAFE而言,他們可能原來考慮在984位長度時,32位CRC的 HD=6,ber=10-2時,錯幀漏檢概率就是1×10-12。即便這樣,如果每小時送的幀數(shù)考慮進去,還是不到要求:在100Mb/s速率下,每個MAC幀長為12 112位,加上先導符,空閑等開銷,假定為15 000位,則需0.15ms,每小時可送2.4×107個 MAC幀,再假定總線利用率為20%,則每小時可送4.8×106個 MAC幀,假定每個MAC幀只送1個PROFISAFE幀,則每小時可 送 4.8×106個 PROFISAFE 幀,這 樣,由 于PROFISAFE傳送錯幀引起的安全失效概率將是4.8×10-6/h>>10-9/h。如果將ber設(shè)為10-3,那么引起的安全失效概率將是4.8×10-12/h,可以達到要求。但是由于4b/5b編碼對原有CRC檢驗的檢驗?zāi)芰τ写蟮挠绊懀筨er=10-2時,錯幀漏檢概率就是1.22×10-6,引起的安全失效概率將是5.8/h,在ber=10-3時安全失效概率將是5.8×10-4/h,仍達不到要求。只有當ber<10-5時,才能達到要求,而這會嚴重影響其使用:必須加大投資,對干擾嚴防死守。
對于其他的用法,例如未加功能安全協(xié)議的AFDX,參照上述計算,每小時收到漏檢錯幀的數(shù)目非常大,在ber=10-3時安全失效概率將是5.8×10-4/h。特別是,盡管有雙通道的冗余,但是它只收下第一個通過CRC檢驗的幀,不管是否漏檢的幀,冗余不能減弱這種風險。在飛機上,要想從源頭上減少電磁干擾更為困難:你難以把雷擊的干擾弱化,特別是以后為減輕重量與成本要采用纖維蒙皮。
筆者電子郵件地址:yfy812@163.com。
[1]Koopman P.32-bit cyclic redundancy codes for Internet applications[OL].(2012-05-23)[2013-03].http://citeseerx.ist.psu.edu/viewdoc/download doi=10.1.1.131.2899&rep=rep1&type=pdf
[2]Philip Koopman,Tridib Chakravarty.Cyclic Redundancy Code(CRC)Polynomial Selection For Embedded Networks [OL].(2006-12-22)[2013-03].http://www.ece.cmu.edu/~koopman/roses/dsn04/koopman04_crc_poly_embedded.pdf.
[3]PROFIsafe System Description [OL].(2012-11-22)[2013-03].http://www.profibus.com/nc/downloads/downloads/profisafe-technology-and-application-system-description/download/9594.