色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          "); //-->

          博客專欄

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

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

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

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

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

          那么,CAN總線還有用武之地嗎?還有學(xué)習(xí)的必要嗎? 

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

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

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

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


          報文ID分配的學(xué)問

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

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

          在這個叢林社會的現(xiàn)實世界,“尊嚴(yá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ā),風(fēng)風(fēng)火火,自然需要一個小ID,對著周期幀喊聲“對不起,請讓讓”。 

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

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

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

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

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

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

          這說明了什么? 

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


          總線負(fù)載率

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

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

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

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

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

          至于說,負(fù)載率超了會怎么樣? 

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

          好吧,30%最保險了~~ 

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

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

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

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

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

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

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

          下面就單獨就每個場進(jìn)行分析。 

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

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

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

          數(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é)尾由一標(biāo)志序列界定。這個標(biāo)志序列由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派生于振蕩器周期,可以由振蕩器進(jìn)行分頻。 

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

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

          圖片4.png 

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

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

          圖片5.png 

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

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

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

           

          寫在最后

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

           


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



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

          相關(guān)推薦

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

          關(guān)閉