国产亚洲精品AA片在线观看,丰满熟妇HD,亚洲成色www成人网站妖精,丁香五月天婷婷五月天男人天堂

博客專欄

EEPW首頁 > 博客 > 洞察幽微 初探CAN總線的一些小門道

洞察幽微 初探CAN總線的一些小門道

發(fā)布人:三德子 時(shí)間:2022-06-27 來源:工程師 發(fā)布文章

在這個(gè)“網(wǎng)文”興盛的時(shí)代,單純的技術(shù)帖越來越不招人喜歡了。

怎樣才能既傳遞技術(shù)的干貨,又不至于陷入專業(yè)概念的漩渦?或者說,能不能像東方臻選的董宇輝那樣,既賣了貨,還能雙語授課?

東方甄選董宇輝.jpg 

灑家思索再三,唯一的方法也許是走下專業(yè)的神壇,拋開拗口的概念,靠著侵淫多年的思考把背后的原理講得有趣、直白又簡單。

今天講的是在工業(yè)自動(dòng)化、汽車等領(lǐng)域應(yīng)用很廣泛的CAN總線。


CAN總線的多主結(jié)構(gòu)和內(nèi)容尋址

上個(gè)世紀(jì)七八十年代超大規(guī)模集成電路的發(fā)展,開啟了汽車行業(yè)轟轟烈烈延續(xù)至今的電子化進(jìn)程。

各種電子控制單元(ECU)的出現(xiàn),讓ECU之間的信息交互變得越來越普遍。在ECU交互比較簡單時(shí),最直接也最簡單的方案便是一個(gè)信號一根線。

一支穿云箭,千軍萬馬來相見。但在沒有CAN總線的年代里,一根實(shí)體線,只能單個(gè)信號來見面。

毫無疑問,這種方式會導(dǎo)致線束數(shù)量不斷翻番,實(shí)在不是一個(gè)好方案,于是乎,汽車專家們把目光投向了串行總線。

當(dāng)時(shí),RS232-RS422-RS485總線已經(jīng)將觸角延伸到了工業(yè)自動(dòng)化領(lǐng)域,其中,RS485總線采用雙絞線差分傳輸,支持多節(jié)點(diǎn)數(shù)據(jù)通信,似乎到上車只差臨門一腳。但是,RS485采取主從結(jié)構(gòu)以及分配設(shè)備地址這兩大缺陷,使得汽車專家決定另起爐灶,開發(fā)新的串行總線。

新的串行總線-CAN,沒有主從的概念,以ID而非設(shè)備地址進(jìn)行尋址,完美克服了這倆在汽車應(yīng)用中格格不入的缺陷。

愛思考的小伙伴,端起了大蒲扇,主從結(jié)構(gòu)怎么就成了缺點(diǎn)?為不同節(jié)點(diǎn)分配各自的設(shè)備地址,又存在什么缺陷?

要搞明白第一點(diǎn),需要先看看主從結(jié)構(gòu)的特點(diǎn),至于第二點(diǎn),需要對照一下汽車應(yīng)用的要求來看看。

武林至尊,寶刀屠龍,號令天下,莫敢不從。在主從結(jié)構(gòu)里,一主多從,主節(jié)點(diǎn)不發(fā)號令,從節(jié)點(diǎn)便永遠(yuǎn)沒有參與通信的可能。

在主子“翻牌子”之前,從節(jié)點(diǎn)唯一能做的便是洗得白白凈凈,耐心坐等!

據(jù)說,這種方式主要是為了防止多個(gè)節(jié)點(diǎn)向總線上發(fā)送數(shù)據(jù)導(dǎo)致的錯(cuò)亂。

在沒有更好的方法解決大家同時(shí)訪問總線的挑戰(zhàn)之前,這種主從結(jié)構(gòu)似乎是唯一的答案,但是,它的缺點(diǎn)顯而易見!

首先,從節(jié)點(diǎn)沒有主動(dòng)發(fā)送數(shù)據(jù)的權(quán)力,主機(jī)一旦癱瘓,整個(gè)網(wǎng)絡(luò)就玩完。

其次,由于不能同時(shí)競爭總線,通信效率也只能維持在較低的區(qū)間,對于有高速和實(shí)時(shí)要求的應(yīng)用場合,這種方式怎么玩得轉(zhuǎn)?

你就說,在汽車的總線通信網(wǎng)絡(luò)里面,行車安全、動(dòng)力操控、告警顯示相關(guān)的那些小主兒,哪個(gè)能坐等?

所以,必須拋棄主從結(jié)構(gòu),尋找一種新的解決方案。競爭和仲裁就是CAN總線標(biāo)準(zhǔn)給出的答案。

再來看分配設(shè)備地址的缺點(diǎn)。

汽車電子化是隨著半導(dǎo)體技術(shù)的發(fā)展而不斷升級的一個(gè)進(jìn)程,主機(jī)廠為了保持產(chǎn)品的競爭力或者滿足用戶的期待,會引入新的ECU,加入新的功能,在這種升級、擴(kuò)展需求面前,固定設(shè)備地址等于自套枷鎖,給掛接新節(jié)點(diǎn)的網(wǎng)絡(luò)升級帶來困難。

CAN總線,通過報(bào)文ID這種內(nèi)容性的尋址,解決了升級擴(kuò)展的挑戰(zhàn)。

最后總結(jié)一下CAN總線的突出特點(diǎn):

不分主從,可自由競爭總線;

通過ID“尋址”,可以靈活擴(kuò)展。


CAN總線的競爭和仲裁

說到對資源的競爭,灑家總會想起電影《1942》里頭,那些饑餓的難民拿著耙子、鐵鍬、木棍攻打大地主家,以爭奪糧食這個(gè)能活命的資源的畫面。

資源,有時(shí)候就是生命線!

不過,計(jì)算機(jī)的世界很體面,盡管CAN總線只有兩根線(CANHCANL),沒有了主節(jié)點(diǎn)這個(gè)“話事人”在中間調(diào)度轉(zhuǎn)圜,但是,博世的天才工程師們依然想出了方法,可以避免沒高沒低的節(jié)點(diǎn)對總線資源的爭搶。

將一頭大象放進(jìn)冰箱需要三步,博世解決CAN節(jié)點(diǎn)競爭總線的方案卻只需要兩步。

第一步,只有在總線空閑時(shí),開始發(fā)送報(bào)文;

第二步,如果大家同時(shí)開始發(fā)送報(bào)文,則在仲裁場一決勝負(fù)。

為了講明白這一點(diǎn),需要先給出CAN總線的報(bào)文格式,或者說幀結(jié)構(gòu),如下圖所示。

CAN傳統(tǒng)標(biāo)準(zhǔn)幀格式.jpg關(guān)于第一步,需要著重搞清楚的是何謂“總線空閑”,以及,為什么總線空閑能有效避免大家伙一哄而上地搞亂了總線。

總線空閑

CAN總線標(biāo)準(zhǔn)里,將總線上出現(xiàn)連續(xù)11個(gè)位的隱性電平定義為總線空閑。

隱性電平即CAN總線上數(shù)據(jù)為1時(shí)對應(yīng)的總線電平(數(shù)據(jù)為0時(shí)便是顯性電平),這里的總線電平,可以認(rèn)為是CANHCANL上各自的電壓,也可以認(rèn)為是兩者的電壓差。

至于具體什么樣的電壓水平,ISO11898-23中分別給出了高速CAN和低速CAN的電壓標(biāo)準(zhǔn)。

 

這里,以ISO11898-2為例進(jìn)行說明。

CANH對地3.5V,CANL對地1.5V時(shí),總線電平為顯性電平,對應(yīng)數(shù)據(jù)0。

CANH對地2.5V,CANL對地2.5V時(shí),總線電平為隱性電平,對應(yīng)數(shù)據(jù)1。

或者說,電壓差在2V左右時(shí),對應(yīng)數(shù)據(jù)1,電壓差在0V左右時(shí),對應(yīng)數(shù)據(jù)0。

這里面,大家經(jīng)常搞混淆的便是顯性電平對應(yīng)數(shù)據(jù)0,隱性電平對應(yīng)數(shù)據(jù)1。因?yàn)?,根?jù)大家的“直覺”,道生一,一生萬物,沒有前面的1,后面隱藏了多少0也無濟(jì)于事,所以,本該顯性為1、隱性為0的嘛。

據(jù)說,女孩子的“直覺”很準(zhǔn),不過好在,這個(gè)世界,不講直覺,講科學(xué)!

CAN總線之所以把0定義為顯性,是因?yàn)?/span>CAN總線執(zhí)行“線與”機(jī)制,0&1還是0,所以,在0面前,1自動(dòng)隱身,總線上顯出來的是0,故顯性為0,隱性為1。

在顯性面前,1是默默含藏的,1是甘愿隱身的,正是因?yàn)?/span>1有了這種包容的精神,才能1生萬物!

至于為何連續(xù)11個(gè)隱性位代表總線空閑,這一點(diǎn)可以從幀格式里找到答案。

CAN傳統(tǒng)標(biāo)準(zhǔn)幀格式.jpg首先,CAN總線是半雙工通信,半雙工的特點(diǎn)是節(jié)點(diǎn)可發(fā)送可接收,但是不能同時(shí)發(fā)送。在CAN通信中對應(yīng)的情況便是,當(dāng)一個(gè)節(jié)點(diǎn)占據(jù)了總線并發(fā)送報(bào)文時(shí),其它節(jié)點(diǎn)只能處于接收狀態(tài)。

那么,最有效率的半雙工通信做法是什么?等待發(fā)送報(bào)文的節(jié)點(diǎn)接收完報(bào)文后就馬上發(fā)送報(bào)文!

其次,CAN通信里有一個(gè)位填充機(jī)制,不允許在報(bào)文的SOF、仲裁場、控制場、數(shù)據(jù)場、CRC場中連續(xù)出現(xiàn)6個(gè)相同的邏輯位,換句話說,在CAN報(bào)文傳輸?shù)闹饕^程(即上述那幾個(gè),有的技術(shù)帖稱之為“域”或“段”,對應(yīng)的英文為Field)中,不可能出現(xiàn)11個(gè)位的隱性電平。

但是,為了保證總線通信的效率,允許在EOF場(End Of Frame)和IFSInter Frame Space)中出現(xiàn)。

根據(jù)CAN幀結(jié)構(gòu),報(bào)文結(jié)尾的EOF場和IFS場為連續(xù)7+3=10個(gè)隱性位,那么,為了讓等待發(fā)送報(bào)文的節(jié)點(diǎn)可以在確認(rèn)總線空閑的第一時(shí)間啟動(dòng)報(bào)文發(fā)送,是不是11個(gè)隱性位正好合適?

在外行的眼里,上個(gè)報(bào)文的結(jié)尾10個(gè)隱性位,總線空閑定義為11個(gè)隱性位,簡直巧的不能再巧。

可在內(nèi)行者的眼中,這是設(shè)計(jì)上的巧妙,是嚴(yán)絲合縫的獨(dú)到,是天才的光芒,在灼灼閃耀!

競爭與仲裁

在人類社會中,看到他人在忙就不打擾是一種基本的素養(yǎng),如前所述,CAN節(jié)點(diǎn)也是這樣有涵養(yǎng)的謙謙君子。

但,君子待時(shí)而動(dòng),順勢而為,CAN節(jié)點(diǎn)一邊監(jiān)聽總線是否空閑,一邊在確認(rèn)總線空閑的第一時(shí)間去競爭寶貴的總線資源。 

CAN節(jié)點(diǎn)通過SOF,打響了爭奪總線資源的第一槍。

顯然,為了避免混亂,需要有一種合適的手段,盡快地仲裁出答案,決定自己是繼續(xù)占有還是放棄對總線的主權(quán)。

博世的科學(xué)家們,引入了一種非破壞性仲裁的方案。

即,各個(gè)節(jié)點(diǎn)在仲裁場里拿出報(bào)文ID,通過比大小的方式公平競爭。

分歧終端解決-葛優(yōu).png

在這里,ID越小,優(yōu)先級越高,其競爭總線的勝率也就越高。

之所以如此,還要回到前面講解顯性電平和隱性電平的“線與”機(jī)制。

CAN非破壞性仲裁.png

圖例中,節(jié)點(diǎn)A的報(bào)文ID最大,節(jié)點(diǎn)C的報(bào)文ID最小。節(jié)點(diǎn)A、B、C在未決出勝負(fù)之前,都一邊向總線發(fā)送報(bào)文ID里的數(shù)據(jù)位,一邊監(jiān)聽總線。

因?yàn)榭偩€的線與機(jī)制,節(jié)點(diǎn)A發(fā)出的1和節(jié)點(diǎn)B/C發(fā)出的0進(jìn)行“與運(yùn)算”之后,總線上的數(shù)據(jù)位依然為0。節(jié)點(diǎn)A監(jiān)測到自己發(fā)送了1卻回讀到0后,自動(dòng)退出總線競爭,轉(zhuǎn)入接受模式,同理,節(jié)點(diǎn)B也在隨后退出了對總線的競爭,ID最小的節(jié)點(diǎn)C最終奪魁。

比大小,這個(gè)人類社會解決分歧的最原始、最有效的方式,竟然在CAN總線這么一個(gè)高大上的地方找到了用武之地。

只能感嘆,這個(gè)世界真奇妙!

CAN總線的門道還很多,且等咱家慢慢跟你聊~~


文:三德子

 


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




相關(guān)推薦

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

關(guān)閉