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