CAN總線基礎(chǔ)
嘗試一下文字投稿,給大家講述一下CAN總線吧,如有錯誤還請大家予以原諒哈。
1.CAN通信的起源
??CAN—Controller Area Network—是20世紀(jì)80年代初德國Bosch公司為解決現(xiàn)代汽車中眾多控制單元、測試儀器之間的實時數(shù)據(jù)交換而開發(fā)的一種串行通信協(xié)議。
2.報文類型目前常用的CAN協(xié)議是CAN2.0協(xié)議,在CAN2.0B的版本協(xié)議中有兩種不同的幀格式,不同之處為標(biāo)識符域的長度不同,含有11位標(biāo)識符的幀稱之為標(biāo)準(zhǔn)幀,而含有29位標(biāo)識符的幀稱為擴展幀。如CAN1.2版本協(xié)議所描述,兩個版本的標(biāo)準(zhǔn)數(shù)據(jù)幀格式和遠(yuǎn)程幀格式分別是等效的,而擴展格式是CAN2.0B協(xié)議新增加的特性。為使控制器設(shè)計相對簡單,并不要求執(zhí)行完全的擴展格式,對于新型控制器而言,必須不加任何限制地支持標(biāo)準(zhǔn)格式。3.報文的通信機制? ?CAN報文通過電平差分信號發(fā)送,由CAN_H(高)與CAN_L(低)組成。其傳輸線為雙絞線,一般總線長度不超過40m,絞線間距不超過20cm。CAN通信通過一種類似于“會議”或者“廣播”的機制實現(xiàn),可見下圖:


在實際車載CAN通信過程中,一條CAN網(wǎng)絡(luò)上將每個控制器作為一個節(jié)點,通過雙絞線連接在總線上。而在通信的過程中每個節(jié)點既可以接受所需報文也可發(fā)送報文,其交互過程可以看作是一場“會議”或者“廣播”,在會議開始后,每個參會部門可看作為一個節(jié)點或者控制器,而參會人員的姓名可看作為報文ID,這個人員發(fā)言所說的話也就是報文的信息,而發(fā)言順序就是CAN通信的仲裁,其先后順序由報文ID的大小決定,越小發(fā)言順序越靠前。比如人事部參會人員0x1、0x2、0x3、0x4四人,其發(fā)言順序也就是0x1、0x2、0x3、0x4。當(dāng)人員0x1發(fā)言的議題設(shè)計到財務(wù)部時,財務(wù)部可看作接受節(jié)點來接收0x1所發(fā)言的信息,實際上人員0x1所說的話在該會議中的每個部門都能接收到,但是所發(fā)言議題不涉及其余部門,所以可以裝作“沒聽見”?! ?/span>
? 看到這里我想大家應(yīng)該也有所了解CAN通信的通信機制了吧,就是每個節(jié)點都可把所有報文信息發(fā)出來,但是誰來接受由其余節(jié)點來決定,實質(zhì)上是一種半雙工的通信方式。

?接下來就是CAN報文差分信號了,所有的機器其語言根本的都是二進制,所以CAN總線所發(fā)的信息也都是由'0'與'1'組成。如下圖:

總線上的電平有顯性電平和隱性電平兩種??偩€上執(zhí)行邏輯上的線“與”時,顯性電平的邏輯值“0”,隱性電平為“1”。“顯性”具有“優(yōu)先”的意味,只要有一個單元輸出顯性電平,總線上即為顯性電平。并且,“隱性”具有“包容”的意味,只有所有的單元都輸出隱性電平,總線上才為隱性電平。(顯性電平比隱性電平更強。)
3.數(shù)據(jù)幀組成
? 數(shù)據(jù)據(jù)幀由七種不同的位域(Bit Field)組成:幀起始(Start of )、仲裁域(Arbitration Field)、控制域(Control Field)、數(shù)據(jù)域(DataField)、CRC域(CRC Field)、應(yīng)答域(ACK Field)和幀結(jié)尾(End of )。數(shù)據(jù)域的長度可以為0~8個字節(jié),CANFD的數(shù)據(jù)域的長度可以為0~64個字節(jié)。其CAN協(xié)議和標(biāo)準(zhǔn)規(guī)格如下圖:

一般在車載測試中,我們只需要關(guān)注仲裁域也就是報文ID與數(shù)據(jù)域即可。
? 如下圖為J1939協(xié)議的幀數(shù)據(jù)結(jié)構(gòu):

在寫DBC的時候,也只需要寫明報文ID與數(shù)據(jù)域中包含的信息即可,如下圖:


在報文解析的時候,一般的關(guān)注ID與數(shù)據(jù)域的信息,如下圖:

創(chuàng)作不易,希望各位同行大佬大家多多關(guān)注給予鼓勵支持。
