CAN優(yōu)先級倒置原因與對策分析
4 毛刺造成優(yōu)先級倒置
4.1 總線空閑時毛刺引起的倒置
總線空閑時,局部錯的0毛刺被Tq采樣到,發(fā)送節(jié)點就會按ISO 16845 7.7.2規(guī)定實行硬同步,然后就要按ISO 16845 7.7.9款確定是別的節(jié)點發(fā)送的SOF還是毛刺。如果節(jié)點H在毛刺后Tq有發(fā)送請求ReqH(如圖2所示),它也必須等待Tprop+Ph1以確定總線是否空閑。另一個節(jié)點L如有發(fā)送ReqL,其到H的傳送延遲為τ,只要它能在H的硬同步后的采樣點采到,H就不再有發(fā)送機會。此時H、L請求的時間差為Tprop+Ph1-τ。如果2個節(jié)點靠得很近,τ≈0,那么H甚至無法與比它遲Tprop+Ph1的L競爭。同時它也無法與比它早τ-1的其他節(jié)點的發(fā)送相競爭。針對第1節(jié)中所講的“同時”情況,它已完全無法參與競爭。本文引用地址:http://m.butianyuan.cn/article/196179.htm
圖2 總線空閑時毛刺引起優(yōu)先級倒置
圖3 估計倒置的概率用圖
圖4 在I.M.3中的毛刺引起優(yōu)先級倒置
現在對出現優(yōu)先級倒置的概率作初步分析。估計倒置的概率用圖如圖3所示。tG為毛刺發(fā)生時刻,tH為高優(yōu)先級消息請求時刻,tL為低優(yōu)先級消息請求時刻。如果tH發(fā)生在tG之后、該位的采樣點前,tL也在采樣點前到達,那么tH的請求將無法獲得參與競爭的機會。這件事的概率為Pa。Pa與誤碼率有關,毛刺被采到會有誤碼。假定位時間為1 μs,毛刺寬度為0.2 μs,采到機會便是20%,也就是說毛刺概率在1位時間內為誤碼率的5倍,考慮到毛刺有0毛刺與1毛刺2種,只有0毛刺會引起假的硬同步,再考慮到考察的時段為Tprop+Ph1,而不是1位,所以保守估計Pa為誤碼率的2倍。但是Pa不是因毛刺而引起倒置的概率,其中還包括了tL請求確實早于tH請求τ的部分,這部分用Pb表示。Pb=(tH-tG-τ)/(tH-tG),當(tH-tG)=τ時扣除部分Pb=0。所以最壞情況下沒有扣除,優(yōu)先級消息倒置的概率近似為誤碼率的2倍。
4.2 I.M.3內毛刺引起的倒置
在上一幀認可位(ACK)“0”的重同步下,H、L兩個節(jié)點的位時間會有相位差τ,L超前時τ的大小對分析并無影響。當節(jié)點H、L均有掛起待發(fā)的消息時,按ISO 118981 10.4.2.2規(guī)定,它們應在I.M.3后一位開始發(fā)SOF,并進行競爭。若H節(jié)點由于局部錯,在I.M.3位值采樣點前有毛刺,按ISO 16845 8.7.2款,H將作硬同步,位值采樣點的移動使它可以見到L所發(fā)的SOF(如圖4所示),其條件是e>Ph2。由于在I.M.3內讀到SOF,H將在下一位開始發(fā)它的IDH最高位。假定H的IDH=“01***”,L的IDL=“10***”,H的ID11H=0經τ后傳到L,與L的SOF部分重合,并延續(xù)到L的ID10L位,當毛刺發(fā)生的e滿足NBT-(2τ+e)>Ph2時,L不會采到H的ID11H,所以它不會退出。位時間設計時NBT=SYNC+Tprop+Ph1+Ph2,Tprop≥2τ,故上式在e<SYNC+Tprop-2τ+Ph1時能滿足,即0<e-Ph2<SYNC+Tprop-2τ+Ph1-Ph2。一般Ph1=Ph2,或者Ph1=Ph2+1,當節(jié)點靠得較近時τ比較小,e有較大的范圍可同時滿足該式。而L發(fā)的ID10L=0經τ后到達H,當e>Ph2時成為H的ID10H中的同步沿,并被H采樣到,H便仲裁失敗退出,形成優(yōu)先級倒置。
此種倒置的概率的估計比較復雜,需要進一步研究。
5 解決方案
5.1 總線空閑時的硬同步抗毛刺措施
接收節(jié)點在總線空閑時檢查到1/0跳變沿就作硬同步,然后再每Tq繼續(xù)采樣。如在位值采樣點前發(fā)現有1,則認為總線恢復到空閑狀態(tài)。如其間已有本節(jié)點的發(fā)送請求,就在查到1的下一Tq開始本節(jié)點的發(fā)送。這樣,本節(jié)點的發(fā)送被推遲了毛刺寬度對應的時間,但是也確保本節(jié)點發(fā)送前沒有其他節(jié)點已開始傳送,所以不會有優(yōu)先級倒置。
這種方法沒有解決毛刺較寬、一直延續(xù)到別的節(jié)點的SOF到達的情況。此時本節(jié)點仍然因無發(fā)送而出現優(yōu)先級倒置。
5.2 I.M.3內硬同步抗毛刺措施
I.M.3內位值采樣點前出現毛刺引起硬同步,本節(jié)點也繼續(xù)采樣總線。有“1”時后繼判斷比較困難,因為硬同步后再遇到“0”的時刻不確定,可能是別的節(jié)點發(fā)的SOF在原I.M.3位值采樣點前收到,也可能在I.M.3原位值采樣點后收到,還可能又是毛刺。所以,為處理簡化起見,有掛起待發(fā)幀的本節(jié)點發(fā)送超載幀。通過報超載,超載幀結束后總線回到空閑狀態(tài),重新實現同步。
這種方法也沒有解決毛刺較寬、一直延續(xù)到別的節(jié)點的SOF到達的情況。此時本節(jié)點仍然因無發(fā)送而出現優(yōu)先級倒置。
6 小結
毛刺濾除和幀開始時刻的硬同步是為保障通信正常的兩個不同側面的要求,在現有CAN總線協(xié)議的設計中出現了沖突,造成在某種特定情境下出現優(yōu)先級倒置。由于毛刺引起優(yōu)先級倒置的危害性與具體應用的種類有關,一般地說,系統(tǒng)設計時已盡量防止毛刺的干擾,毛刺發(fā)生的概率已比較小,發(fā)生在特定位置就更小。
在優(yōu)先級倒置的情況下,可能下一次競爭就不會發(fā)生倒置,做最壞送達時間分析時[6],可以將低優(yōu)先級的阻斷加倍來加以分析。
但是也可能在下一次競爭時仍發(fā)生倒置。在車輛安全認證分析時,需要確定倒置引起的的每小時的故障率,這使分析需要引入誤碼率的假設,需要進一步的工作。
本文提出了在完全兼容CAN總線的條件下的改進方案,但方案只是局部有效,根本的改進可能無法達到完全兼容。
評論