久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

博客專欄

EEPW首頁 > 博客 > 洞察幽微 繼續(xù)談CAN總線的小門道

洞察幽微 繼續(xù)談CAN總線的小門道

發(fā)布人:三德子 時間:2022-07-11 來源:工程師 發(fā)布文章

曾幾何時,汽車這么一個夕陽產(chǎn)業(yè)突然病樹前頭萬木春,一下子成了各大技術(shù)創(chuàng)新的母體和載體 

近年來,隨著車載以太網(wǎng)的強勢登場,CAN總線也突然變得老土了起來。 

那么,CAN總線還有用武之地嗎?還有學習的必要嗎? 

且不說工控、樓宇等其它領(lǐng)域里,CAN總線依然熱火朝天。就是在不斷追求高大上的汽車行業(yè)里,車載以太網(wǎng)跟CAN總線也是大路朝天,各走一邊。 

在動力控制域、車身控制域里,并不涉及大量的數(shù)據(jù)傳輸,上車載以太網(wǎng)有大材小用之嫌,這些控制器之間的通信,CAN總線也能玩得轉(zhuǎn),性價比十分亮眼。 

成本才是王道所以,貓有貓的道,狗有狗的道,說起CAN總線的壽命,它能陪你退休,伴你到老。 

打消了技術(shù)過時淘汰的顧慮,下面,灑家就書接上文,再嘮一嘮CAN總線那些不為人知的小門道。


報文ID分配的學問

上文說過,RS485為每個設(shè)備分配地址,屬于“設(shè)備尋址”,CAN總線是基于ID進行“功能尋址”。 

CAN報文的ID除了內(nèi)容尋址、功能尋址外,還有競爭總線的作用,機制也很簡單,比大小。 

在這個叢林社會的現(xiàn)實世界,“尊嚴只在劍鋒之上,真理只在大炮射程之內(nèi)”,換句話說,誰大誰說了算! 

但是在CAN總線的世界里,卻是孔融讓梨,互相謙虛,誰小誰說了算。 

誰小誰占先,這個規(guī)律擺在面前。那么,搞CAN總線開發(fā)的朋友們,如果讓你們自己來定一個CAN網(wǎng)絡(luò)的矩陣,這個網(wǎng)絡(luò)里有幾十條報文,有的是事件觸發(fā)型,有的是周期輪轉(zhuǎn)型,有的周期長,有的周期短,這里的ID分配,到底該怎么辦? 

絕大部分人,可能真的沒有想到過這一點。 

在這里跟大家分享一個來自某車廠的網(wǎng)絡(luò)矩陣表,有心的小伙伴,可以自行體會體會。

圖片1.png

都說外行看熱鬧,內(nèi)行看門道。這張讓人有點眼花繚亂的圖,到底藏著哪些道道? 

先說事件幀和周期幀,發(fā)現(xiàn)沒?事件幀報文的ID都小于周期幀報文。 

在時間無涯的荒野里,沒有早一步,也沒有晚一步,時間一到,周期幀就按時發(fā)報。那也沒有別的話好說,它唯有輕輕地問一句:“哦?沒有事件幀哈!” 

周期幀有著無垠的時間,不疾不徐,事件幀,緊急觸發(fā),風風火火,自然需要一個小ID,對著周期幀喊聲“對不起,請讓讓”。 

那么,周期幀本身的ID呢?當然取決于它出自哪一個節(jié)點。 

條條大路通羅馬,有人出生在羅馬。人,生來不平等,才吶喊著、追求著“生而平等”,所以,報文ID的出身決定論,也是合理的了。 

再回到上面那張圖。發(fā)動機管理單元EMS、變速器控制單元TCU,掌管汽車動力,生殺予奪,自帶豪門屬性,自然需要分配優(yōu)先級最高的ID,空調(diào)AC、儀表IC實時性要求不高,車載Tbox可有可無,自然分配優(yōu)先級最低的ID 

雖說同是汽車電子零部件,但還是要分個三六九等。其實,這些電子單元,也沒必要叫屈喊冤,還有個冤大頭,在報文ID的分配里,更加沒有發(fā)言權(quán)。 

這個冤大頭,叫OBD,即診斷單元。 

做過診斷的朋友知道,診斷報文的ID介于0x700-0x7ff之間,細心的開發(fā)者還會發(fā)現(xiàn),通信報文從來沒有占用過這個區(qū)間,即信息控制類的報文優(yōu)先級高于診斷報文 

這說明了什么? 

都說政府機關(guān)、事業(yè)單位是三分之一在干,三分之一在看,還有三分之一在搗蛋。在CAN總線的世界里,診斷單元屬于在一旁看著的工種,怎能奢望優(yōu)先級較高的ID,來給正常的通信服務(wù)搗蛋呢?


總線負載率

CAN總線網(wǎng)絡(luò)里,還有一個經(jīng)常被大家提起的概念-總線負載率。 

負載率,顧名思義,就是指這段時間內(nèi)總線上實際傳輸?shù)男畔⒘?/span>/理論上可傳輸?shù)淖畲笮畔⒘俊?/span> 

不知道大家平時怎么理解一個“概念”或“定義”,灑家的小竅門是“咬文爵字”和“摳字眼”。 

具體要摳哪些字眼,可以參考老羅的錘子手機原創(chuàng)、最近被微信抄了去的big bang大爆炸。這個概念里,有兩個需要重點理解的點:“這段時間”、“理論最大信息量”。 

“這段時間”可長可短,也意味著負載率是可變的。需要特別關(guān)注的有兩個:平均負載率和峰值負載率。根據(jù)灑家多年的小經(jīng)驗,平均負載率大多低于40-50%,峰值負載率也不超過70-80% 

至于說,負載率超了會怎么樣? 

也許,針對某個具體的CAN網(wǎng)絡(luò),從技術(shù)上來說,把原本30%的平均負載率提高到50%也沒啥。但是,從“行政”上來說,您這個提議提高負載率的技術(shù)人員需要寫報告,說明白為啥要提,提到50%有沒有什么風險,怎么證明沒有風險,有沒有理論分析,有沒有實測報告,有沒有。。。。 

好吧,30%最保險了~~ 

另一個,“理論上可以傳輸?shù)淖畲笮畔⒘俊比Q于總線速率。具體來說,低速CAN125kbps,高速CAN500kbpsCAN-FD2Mbps,再往上,Flexray站出來說了“此吾家事,汝不得預(yù)也!”。 

在制定負載率時,會牽涉到一個概念-報文時長。灑家不少同事說起報文時長來,經(jīng)常不清不楚,模模糊糊。其實,真正找到關(guān)鍵,問題就很簡單了。 

關(guān)鍵在哪?在計算公式: 

報文時長=位時長x報文位數(shù)。 

在這個公式里,位時長當然等于速率的倒數(shù),比如125kbps的通信速率,位時長=8us。而報文位數(shù),則取決于CAN報文的結(jié)構(gòu)。報文結(jié)構(gòu)如下圖所示:

圖片2.png一個完整的CAN報文由七個不同的Field(場//段)組成幀起始、仲裁場、控制場、數(shù)據(jù)場、CRC場、應(yīng)答場、幀結(jié)尾。 

每個Field的位數(shù)相加,不就齊了? 

下面就單獨就每個場進行分析。 

SOF幀起始標志數(shù)據(jù)幀和遠程幀的起始,由一個單獨的顯性位組成。 

仲裁場包括識別符和遠程發(fā)送請求位(RTR)。識別符的長度為11位。 

控制場由6個位組成,包括數(shù)據(jù)長度代碼和兩個將來作為擴展用的保留位。 

數(shù)據(jù)場由數(shù)據(jù)幀中的發(fā)送數(shù)據(jù)組成。它可以為08 個字節(jié)。 

CRC場包括CRC序列(CRC SEQUENCE),其后是CRC界定符(CRC DELIMITER)。CRC序列為15位,CRC界定符包含一個單獨的隱性位 。 

應(yīng)答場長度為2個位,包含應(yīng)答間隙(ACK SLOT)和應(yīng)答界定符(ACK DELIMITER)。 

幀結(jié)尾由一標志序列界定。這個標志序列由7 隱性位組成。 

所以一個8字節(jié)的數(shù)據(jù)幀的位數(shù)為1(幀起始)+ 12(仲裁場)+ 6(控制場)+ 64(數(shù)據(jù)場)+ 16CRC場)+ 2(應(yīng)答場)+ 7(幀結(jié)尾)= 108位。 

報文之間存在幀間空間INTERFRAME SPACE。幀間包括間歇場、總線空閑的位場。間歇場包括3 隱性的位。總線空閑的(時間)長度是任意的。

 所以,一個8字節(jié)的數(shù)據(jù)幀至少需要(108+3+1* bitrate的時長,對于125kbps,需要0.896ms


CAN總線的位定時

對一般的開發(fā)者來說,CAN總線的位定時概念并不常見。不過,如果給整車廠做過零部件,經(jīng)受過他們的CAN通信測試考驗,您可能就知道,這也是比較重要的一個知識點。 

前文說了,CAN報文由七個不同的場/段組成。那么,具體到單個bit位呢?上一張圖,大家就有概念了。

圖片3.png 

一個位,由同步段+傳播段+相位緩沖段1+相位緩沖段2組成 

這四個段的時間均為基本時間單位“時間份額”的若干倍,時間份額Tq派生于振蕩器周期,可以由振蕩器進行分頻。 

由這張圖可以看出,在相位緩沖段1相位緩沖段2的交接處,藏著一個“采樣點”,或者說“采樣時刻”,這也是CAN通信測試中比較重要的一個測試項。 

下面這張圖,是一個CAN通信需求規(guī)范中的位定時要求。

圖片4.png 

在實際的編程開發(fā)工作中,需要根據(jù)這個位定時規(guī)范,對照MCUCAN模塊的寄存器特點,對寄存器進行針對性設(shè)置。 

比如飛思卡爾微控制器中的MSCAN模塊,其位定時寄存器如下所示:

圖片5.png 

在這款CAN控制器中,把CAN的位分成了三段,同步段、段1和段2CAN2.0協(xié)議中定義的“同步段+傳播段+相位緩沖段1+相位緩沖段2”進行對比,便可以發(fā)現(xiàn),MSCAN中的1CAN2.0協(xié)議中的“傳播段+相位緩沖段1  

如何具體設(shè)置CAN控制器寄存器呢? 

根據(jù)規(guī)范要求,一個8usCAN比特位包含16Tq,采樣位置在該bit75%的時刻,所以,可以Time Segment1 設(shè)為 11Time Segment2 設(shè)為 4這樣,既能保證包含16Tq(1 + Time Segment1 + Time Segment2 = 16),又可以保證采樣時刻=(1 + Time Segment1)/16=75%

 

寫在最后

CAN總線有著廣泛的應(yīng)用,也有著長久的生命周期。深入思考并鉆研CAN總線的一些小門道,可以幫助您在一些表層的知識之下加深對這門技術(shù)本質(zhì)的認識,同時,在面對一些規(guī)范要求時,可以做到知其然并知其所以然,何樂而不為?

 


*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。



關(guān)鍵詞: CAN總線 位定時 仲裁場

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉