對于搞汽車電子的小伙伴,應該聽過Flexray總線,相對于CAN總線,似乎談不上熟悉。隨著車載Ethernet的普及,以及CAN XL的出現(xiàn),不管是成本還是接受度,F(xiàn)lexray的地位似乎都在經(jīng)受著挑戰(zhàn)。但是,不管怎么說:存在即合理。既然一時半會兒,F(xiàn)lexray不會退出歷史舞臺,項目中如果使用到Flexray總線,那么,我們就試著去"擁抱",去適應項目,抵觸情緒并不能幫我們解決問題。對于Flexray總線,之前就有小伙伴要求分享一下。從本文開始,我會出一個Flexray系列,試圖把自己有限的理解分享給大家,而我的理解還很淺顯,難免偏頗,僅以此拋磚引玉。 如果項目中,用到Flexray總線,那么,該控制器大概率是網(wǎng)關節(jié)點(Gateway),也就是主干網(wǎng)節(jié)點,而且,需要參與總線路由。
Flexray節(jié)點的總線構成和其他總線節(jié)點類似,一般由收發(fā)器(Flexray Transceiver)、通信控制器(Flexray Commuincation Controller)、數(shù)據(jù)發(fā)送/接收主機(uC)、供電單元(SBC和Vbat)等組成,示意如下:
如上圖,在PCB(Printed Circuit Board,印刷電路板)設計中,通常將CC集成到uC中,Transceiver獨立于uC,同時,Transceiver與Vbat常連,以便于監(jiān)控喚醒事件。多個Flexray節(jié)點掛接到相同的物理鏈路時,就構成了Flexray的網(wǎng)絡簇,示意如下(本文不討論星型結構):討論喚醒,我們首先需要明確喚醒方式。不管是CAN總線還是Flexray總線,喚醒方式方式一般都會分為本地喚醒和遠程喚醒。討論本地喚醒,多數(shù)是討論Transceiver的Wake Pin喚醒方式,Wake Pin是一個輸入(Input)引腳,當捕獲到一定的喚醒時序時(Wakeup Pattern)時,將INH Pin拉高,使得SBC激活,進而給Transceiver、uC等功率器件提供工作電壓,示意如下: 但是,本地喚醒往往只是喚醒節(jié)點本身,如果要喚醒節(jié)點所在的網(wǎng)絡簇,那么,該節(jié)點就有一個任務:喚醒網(wǎng)段內(nèi)的其他節(jié)點。因此,具有本地喚醒的節(jié)點也稱為主動喚醒節(jié)點。遠程喚醒,有時也稱全局喚醒。當主動喚醒節(jié)點喚醒以后,它負責發(fā)送喚醒幀(WUP,Wakeup Pattern),以便于喚醒網(wǎng)段內(nèi)其他節(jié)點,進而實現(xiàn)遠程喚醒,即:局部網(wǎng)段內(nèi)所有節(jié)點的喚醒。喚醒符(WUS,Wakeup Symbol)什么樣呢?示意如下(1): 主動喚醒節(jié)點通過BP和BM,控制總線壓差(Vdiff),產(chǎn)生如上圖的WUS。當然,根據(jù)Transceiver功能,也可以設置特定幀喚醒。 理解WUS,需要理解Flexray的位流(bit stream),也就是uC如何將數(shù)字信號(0或者1)通過總線傳輸給接收節(jié)點。Flexray總線和其他總線一樣,uC將數(shù)字信號發(fā)送給收發(fā)器(Transceiver)轉(zhuǎn)換成對應的模擬電壓,發(fā)送到總線。對于Flexray,BP和BM在總線上的傳輸形式如下所示: Flexray類似CAN總線,通過控制一對雙絞線(BP和BM),形成不同的壓差(Vdiff)去模擬要傳輸?shù)男畔?。當Vdiff(BP-BM)>600mV時,表示隱性位("1");當Vdiff(BP-BM)<-600mV時,表示顯性位("0")。
實際工程中,WUP由多個連續(xù)的WUS組成,而且,一般要求每個Flexray節(jié)點的WUS個數(shù)不同。eg:Flexray Node A的WUP有42個WUS,Flexray Node B的WUP有43個WUS。 實際的工程中,需要明確輸入WUS的WakeupSymbolTxIdle時間(eg:180 gdBit)和WakeupSymbolTxLow時間(eg:60 gdBit)。gdBit就是標準位時間(Nominal bit time),如果使用10Mhz的通信速率,gdBit = 1/10000000 = 0.1us。因此,WakeupSymbolTxIdle = 180 * 0.1 = 18us,WakeupSymbolTxLow = 60 * 0.1 = 6us。所以,一個WUS = 18us("1")+6us("0")組成。首先,WUS需要通過Flexray總線發(fā)送給接收節(jié)點的的總線驅(qū)動(BD,Bus Driver),也就是接收節(jié)點的收發(fā)器,喚醒收發(fā)器后,才能觸發(fā)SBC給功率器件提供工作電壓。注意:同一網(wǎng)段內(nèi)的所有Flexray節(jié)點,WakeupSymbolTxIdle、WakeupSymbolTxLow需要設置一樣。 (1)TJA1081B FlexRay node transceiver.pdf
|