作者:楊福宇 在文(7)中分析存在于數據域的可疑數據流,但是CAN的位填充規則適用的范圍還不止這些,本文分析可疑數據流部分或全部覆蓋CRC域的情況(圖1)?梢蓴祿鞯囊徊糠諸xb進入了CRC,而CRC余下的部分用CRCb表示。 圖1可疑數據流對CRC的覆蓋 我們在數據域內劃出一小段15位的連續空間A,它的位置可以在數據域內非可疑數據流的任何地方,它的前后有數據塊B1、B2。根據CRC計算的的原理,總的幀長的CRC校驗和是各分段CRC校驗和的異或的結果。所以對選定的可疑數據流,Txa是已知的,假定任取HB1B2(這表示一個串,其對應位置各為H、B1、B2,未定義的位置全為0。各位置的xi多項式階次是不同的,所以串在一起時只要把多項式相加),在串后加Txa,得到HB1B2Txa,有一個相應的校驗和CRC1(15位),我們可找到合適的A,使串HB1AB2Txa的校驗和(15位)正好有TxbCRCb(15位)。因為串HB1AB2Txa是HB1B2Txa和A組合成的,設A的校驗和為CRC2(15位),故有CRC1+CRC2=TxbCRCb。顯然,已知TxbCRCb和CRC1,CRC2就是確定的。而根據文(7)圖3介紹,已知CRC2就完全可確定原來的數據A。對應一個TxbCRCb就有在特定位置的唯一的A,這里在特定的可疑多項式覆蓋部分CRC域時,只有覆蓋部分的Txb是已知的,CRCb可以任選,就可以在特定位置對應多個A。這些情況就構成了概率分析的基礎。 發生可疑數據流部分或全部覆蓋CRC域的情況時,錯幀漏檢的條件有如下幾項:1?梢蓴祿髡纪L度數據的比率(包括不同頭部形式、尾部形式);2。對應可疑數據流覆蓋CRC位數,存在的數據A的數目占A可能的數據的比率(包括A在數據域內可取得不同的位置);3。位錯發生在特定位置的概率。 由文(7)式(3)每一種長度的可疑數據流LTx,在LTx〉=30時有3*2(LTx-27)種,有4種頭部形式和5種尾部形式,每種LTx長有2LTx種可能的數據流,所以可疑數據流占同長度數據的比率為P1=4*5*3*2(LTx-27)/2LTx=15*2-25。 LTx為23~30時如表8所示。這里P1=4*n(L)/2LTx。 由CRC2確定A時存在概率問題。假定A在數據域內的位置已設定,因為CRC2中只有Txb幾位是固定的,那么A有多個取值,如用指針m表示Txb的位數,那么CRC2就有215-m種,對應的A也有215-m種,而A為15位,所以合適的A的比率為2-m。而A可以處在數據域內未被可疑數據流占用的部分任意位置,位置空大小為64-15-(LTx-m)=49-LTx+m。即使位置空為0,也可以算一次,所以合適的A的比率為P2=(50-LTx+m)*2-m。當LTX比較大時,若留在數據域內還很多,不足以留出A需要的15位空間,那么就無法靠A來產生漏檢條件,所以要求LTX-m+A<=64,即LTX-m<=49時才算。 8字節數據域的幀幀長為107位(不計填充位),發生2個位錯的位置組合共有107*106/2=5671種,所以位錯發生在特定位置的概率是P3=1.76*10-4。 于是我們得到的漏檢概率Pun計算程序為: n=(1 2 4 6 17 21 31); %由表8得到 P3=2/107/106; Pun=0; for LTx=23:1:64 if LTx < 30 P1=4*n(LTx-22)/2LTx; else P1=15*2-25 end temp=0; for m=1:1:15 if LTx-m<=49 temp=temp+(50-LTx+m)*2-m end end Pun=Pun+temp*P1*P3 end 運行結果為3.32*10-8。 特別要提一下,對CAN2.0B來講,在ID中有一個連續的18位,這個區間可以放置上述A塊。此時LTX可擴大到整個數據域與CRC域,即LTX=79;由于A塊不再在數據域,計算的條件“LTX-m<=49時才算“分為二種,當LTX-m<=49時LTX和A均可在數據域內,移動的次數由(50-LTx+m)再加ID內移動4次。當LTX-m<=64時A在ID內,移動次數為4次。于是我們得到CAN2.0B的漏檢概率Pun計算程序為: 國家興亡匹夫有責,從神九用到CAN總線講起(9)知和識-2 n=(1 2 4 6 17 21 31); P3=2/107/106; Pun=0; for LTx=23:1:79 if LTx < 30 P1=4*n(LTx-22)/2LTx; else P1=15*2-25 end temp=0; for m=1:1:15 if LTx-m<=49 temp=temp+(54-LTx+m)*2-m else if LTx-m<=64 temp=temp+4*2-m end end end Pun=Pun+temp*P1*P3 end 這樣變化后的LTX部分或全部覆蓋CRC域時的錯幀漏檢率是:4.68*10-8。 由文(7)、(8)及上述數據我們可以得到: Pun,2.0A=6.89*10-8+8.1*10-11+3.32*10-8=1.02*10-7 Pun,2.0B=6.89*10-8+8.1*10-11+4.68*10-8=1.15*10-7 至此,由文(7)~(9)我證明了二件事:1.CAN的錯幀漏檢率要比Bosch聲稱的大2000倍;2.還有可能漏檢的情況未分析,即可能更壞。 這些未分析的漏檢情況有: 1。CAN的幀開始位出錯,由第二個顯位開始的一段被錯接收,引起變形幀,這個變形幀因第二個錯,如同文(8)分析的那樣,將數據讀為CRC,成為短幀(見圖2);或者將原幀的EOF讀為數據,變為長幀。對這種情況下的錯幀漏檢概率我尚未深入研究。 圖2 SOF錯開始的漏檢錯幀 2。已經計算的部分還有二個因素被簡化了:1)還有10種尾部多項式未在這里提及,因為它們的貢獻較;2)在本文提到的重構可疑數據流的二個位錯中間,還存在容許添加多個位錯(圖3),只要它們不在連續的可能形成填充規則窗口中,就不會形成新的數據移位,這種情況的貢獻尚未詳細研究。在本例中如果第3個位錯發生在Tx13處可以,Tx14處就不行。 圖3 U=x6+x4+x3+1,Ec=U*G=(1110,1111,0101,1010,0000,01)多位錯的情形 這表明上述計算的結果還是保守的,還不是最壞的。 2011年推出的CAN FD將填充位也計入CRC,此時就CRC來說不存在收發數據的移位,也就不可能因2位錯而漏檢。但是,CAN FD為了與CAN 兼容,在數據域長8字節以內時完全用CAN 的規定,即用原來的15位CRC及其不計填充位的CRC計算方法。這種繼承就把錯幀漏檢率大的缺點也繼承下來了。 兼容的方案曾使intel和Microsoft在pc上大獲其利,電子工程專輯論壇中的"ARM與X86的戰爭史詩"寫得很好(http://forum.eet-cn.com/forum_post_10005_1200241710_0.htm)。我在pc剛開始時根本沒兼容的概念,86年買了一臺不完全兼容的Sanyo 550 pc,結果是沒軟件可用成了廢物一堆,這才知道兼容的重要。不過當兼容成了接受家族遺傳病時就是另一會事了,這時需要的是壯士斷腕的決心了。 Bosch 是這樣描述CAN FD與 CAN的關系的(CAN FD Specification v1.0 http://www.bosch-semiconductors. ... tur/can_fd_spec.pdf p.3 ) :"只要不用到CAN FD的格式,CAN FD和CAN 的具體實現可以相互通信,這使CAN系統可以逐步過渡到CAN FD。在CAN FD的引入階段,可能只用于特定的工作模式,例如終端編程時的軟件下載,此時不支持CAN FD的其它控制器處于待機狀態! CAN FD implementations that are designed according to this specification and CAN implementations that are designed according to the BOSCH CAN Specification 2.0 can communicate with each other as long as it is not made use of the CAN FD frame format. This enables CAN systems to migrate gradually into CAN FD systems. In the introductory phase, it is possible to use CAN FD only in specific operation modes, e.g. software-download at end-of-line programming, while other controllers that do not support CAN FD are kept in standby. 于是可以知道,他們期待最終將CAN 系統過渡到CAN FD系統,我們可以設想有二個結果:1。過渡結束就完全用CAN FD的長于8字節數據的格式,以免遇到原有的錯幀漏檢問題,這時你會需要修改軟件,例如不用部分加填充,就像以太幀最小幀長的處理方法;2。為了仍保持短幀的優點,修改CAN FD協議,統一長短幀的CRC計算方法,廢棄目前8字節內數據按CAN2.0校驗的CRC方法,此時你的軟件不用改,但是你的硬件要升級。無論何種方案,你的升級還要分二步走,先走的人會吃虧。 寫到這里,我想到我們中國人口中的知識一詞,它可分為知和識,如果我不知道CAN FD的細節,我是無法斷定它為了與CAN 兼容也繼承了CAN 錯幀漏檢率大的缺點。但是如果我不想一想,就沒人告訴你,還有那些可能影響CAN 以及CAN FD 的情況,所以不要只做知道分子。現在國內的書籍往往是以廠家的宣傳資料或databook為依據編寫的,而廠家往往出于自己的利益,將優點說得很充分,對問題不會提及,或者輕描淡寫一筆帶過,只有在有競爭的方面才會互揭軟肋。現在各生產CAN芯片的廠家在CAN協議上的利益是相同的,所以沒有競爭,同病相憐,沒法說缺陷,所以作為用戶在作重要決定時一定要自己想明白。 對我的博客也是這樣,我告訴你的是我的想法,我當然想說服你,但是未必沒有疏漏與錯誤,所以我也希望你能深思,誠懇地歡迎有心得的朋友提出不同的觀點,我們就事論事,互相促進。 |