前文《Flexray總線基礎#01:Flexray節點基本組成及喚醒》討論了Flexray的基本元器件組成和部分喚醒話題。本文著重討論Flexray的喚醒和啟動話題。Flexray節點正常通信之前,類似CAN總線,需要滿足一個條件:ECU喚醒,即:ECU喚醒是網絡喚醒的前提。對于Flexray總線,問題同樣適用,即:Flexray喚醒是Flexray節點有序啟動的前提。 對于Flexray總線,根據參與啟動時機不同,Flexray節點又分為兩類:冷啟動節點(Coldstart Node)、非冷啟動節點(Non Coldstart Node)。其中,冷啟動節點又分為:主動冷啟動節點(Leading Coldstart Node)和隨從冷啟動節點(Following Coldstart Node)。在一個Flexray網絡簇中,冷啟動節點限制在一定數量。如果節點超過3個,為了確保通信穩定性,冷啟動節點至少設置3個;如果Flexray網絡簇僅有兩個節點,那么,這兩個節點均需要設置為冷啟動節點。Flexray網絡啟動之前,需要確保網段內所有的節點已經喚醒。單通道(Channel A)的網絡節點喚醒時序,示意如下: 首先,某個外部事件觸發Flexray網絡簇中的一個節點(eg:Node A)先喚醒,該事件一般指本地喚醒事件。當Node A喚醒以后,POC(Protocol Operation Control)狀態切換,在Wakeup::Wakeup send子狀態中發送Wakeup Pattern,以便于喚醒Channel A上的其他Flexray節點。此時,Flexray總線中,僅有喚醒幀,Flexray節點還未參與節點通信,如果節點間實現通信,還需完成啟動步驟(Startup)。對于Flexray的啟動(Stratup)主要包含兩步:冷啟動節點(coldstart nodes)先啟動,非冷啟動節點(non-coldstart nodes)加入冷啟動節點參與通信。 當Flexray總線完成喚醒以后,意味著Flexray總線上的所有節點的主芯片已經處于工作模式,且軟件已經運行。冷啟動起點的POC狀態切換到Coldstart listen狀態,非冷啟動起點的POC狀態切換到Integration listen狀態(整體監聽狀態),示意如下: 
 上圖中,Node A屬于主動冷啟動節點。主動冷啟節點(leading coldstart node)在POC::Coldstart listen狀態下對連接的總線監聽,并嘗試接收Frames。如果總線沒有活動,Node A進行冷啟動嘗試,隨即發送沖突避免符(CAS,Collision Avoidance Symbol)。注意,只有冷啟動節點可以發送CAS。為什么要發送CAS呢?答:任何一個冷啟動節點都有嘗試啟動網絡的可能,發送CAS可以告知網段內的其他Flexray節點,當前網段內有一個主動冷節點存在。當其他Flexray節點檢測到CAS或者數據幀幀頭以后,主動轉換成隨從冷啟動節點,并重新進入POC::Coldstart listen。如此,主動冷啟動節點即可在最開始的4個通信周期內獨占總線,發送它的啟動幀,引導啟動流程。 Cycle0~Cycle3的4個循環周期中,主動冷啟動節點(Node A)發送它的啟動幀(startup frame,eg:A),這個階段也稱為沖突避免;從Cycle4,其他隨從冷啟動節點(eg:Node B)開始發送啟動幀,Node A隨即接收Cycle4、Cycle5循環內的所有啟動幀,并執行時鐘校正。如果校驗沒有問題,且節點已經至少收到一個有效啟動幀對(不同節點發送的啟動幀),則Node A既進入POC::Normal active狀態。補充:CAS是一個固定長度Data_0信號。實際的項目中,會用一個參數(gdCASRxLowMax)約束CAS的具體長度,eg:87gdBit。如果Flexray的通信速率是10Mhz,那么,gdCASRxLowMax = 87 * 0.1us = 8.7us,上圖中,Node B屬于隨從冷啟動節點(following coldstart node)。Node B在POC::Coldstart listen狀態監聽總線,并嘗試接收Flexray報文。Node B嘗試接收一對有效啟動幀,進行時鐘校正,并且通過Node A的啟動幀獲取自身的時間表。
如果成功接收這些數據幀,那么Node B會收集所有同步幀,并在接下來的兩個循環(Cycle2、Cycle3)內執行整體冷啟動校驗(Integration Coldstart Check)。若校驗成功,并且Node B持續從同一個Node A處接收數據幀,Cycle4開始,Node B開始發送啟動幀,并加入調度,之后,Node B離開啟動過程并進入POC::Normal active狀態。 提示:每個啟動幀(Startup Frame)必須是同步幀(SYNC Frame),因此,每個冷啟動節點也是同步節點。 上圖中,Node C屬于非冷啟動節點。當非冷啟動節點進入啟動過程后,它會監聽其連接的通道,并嘗試接收Flexray數據幀。如果已經有通信建立,Node C將嘗試加入通信,Node C通過從不同的冷啟動節點接收一對有效的冷啟動幀校正自身時鐘。之后,Node C執行整體一致性檢查,如果檢查沒問題,Node C會離開啟動過程,并進入POC::Normal active狀態。對于非冷啟動節點,至少需要兩個循環時離開啟動過程。
|