如何學習汽車 CAN-BUS 系統?
學習汽車 CAN-BUS 系統需要做哪些準備?需要有哪些方面的知識儲備?
我記得當年入門的時候,一窮二白。就用google找到了一個叫Kvaser的官網,有位大叔用幽默擬人的語言把CAN協議交代了一遍,當時想點10個贊,有木有~(≧▽≦)/~
http://www.kvaser.com/about-can/the-can-protocol/然後開始看CAN 2.0規範,ISO 15765,ISO 14229.
還有一個叫canbushack的網站上面講一些跟診斷相關的東東,也不錯。
也可以去Freescale, Renesas的官網上去看CAN Controller的資料,可以搜兩個常用的Transceiver看看,如TJA1042,TJA1055
最後,當然不要忘記CAN BUS界的大牛Vector,他家官網上也有不少資料。如果你們公司有買他們的軟體包,最好仔細閱讀源代碼和相關文檔,裡面乾貨很多。學會用CANoe, 用它做測試和模擬都老好用了。
網路管理的部分現在開始流行AutoSAR了,以前用OSEK,這個都可以在網上找到免費的資料。
個人感覺CAN的協議棧是最重要的,可以自己從CAN driver, IL, NM,TP, Diagnostics依次寫一遍,然後再跟Vector的包做比較,你就知道為蝦米人家一個包可以賣到1Million了。
除此之外,CAN也經常用來做FBL刷寫用的匯流排,當然也有用LIN和USB,還有用串口的,不過偶沒見過。做標定也會用基於CAN的CCP或者XCP協議來實現。
以上,完畢。
/******************************** Update on 2015.02.09 ************************************************/
分享一個課本上學不到的東東吧~某日,EMC工程師M跑過來對我說,「Z工,我在做pulse 1 實驗的時候,ECU掉電後,CAN通信就斷掉了。你幫忙看看吧。」額,神馬是pulse 1實驗呢,如下圖:去實驗室,首先要弄清楚問題要如何才能復現出來,這個是解決問題的前提。在工作中,偶爾會遇到一些很難復現的bug,我有個同事就曾經花了1個月去復現一個bug。也有的時候,會遇到其他成員誤報bug,這個時候,你才理解「去偽存真」是多麼的重要。跑題了,讓我們回來看我現在的這個問題(目前它還不能被稱為一個bug)。
這個問題的現象是:用CANalyzer作為上位機和ECU進行通信,然後用某軟體開始控制Battery,讓其掉電再上電。本來上電後,CAN通信應該正常才對,但是CANalyzer那邊卻一直發錯誤幀。
關掉CANalyzer然後重啟,還是不能建立正常的通信;但是,拔掉插在CANcase上的CAN cable後再插上cable,就可以正常通信了。看到這裡,你有什麼想法木有呢?
我腦海里冒出的第一個想法是,是不是CANalyzer bus off了,所以沒辦法發送消息了。但是馬上又被我否定了,因為重啟CANalyzer也沒辦法通信。
因為要拔掉CAN Cable,這個跟硬體連接是有點關係的。那就看看Network Hardware Configuration裡面有沒有配正確。 Baud Rate是100K,這個也木有問題。如果是剛接觸低速CAN的同學,到這裡應該就不知道該如何是好了。我在上個月做Bus Failure測試的時候也遇到過一個類似的問題。我用了整整一下午來測低速CAN的Fault Tolerance特性,測出來的結果居然與Transceiver的datasheet上的描述不一致。想破頭之後,諮詢了大牛D工,於是這個教訓很徹底地刻在了我的腦海中。
下圖就是TJA1055 Bus Failure時要保持通信正常的一些Test Case.D工告訴我,做這種干擾測試的時候,有兩個條件必須要滿足:
1)CAN必須要接地線。 因為LoadBox比較緊缺,所以我在開發網路模塊的時候,基本都是只接電源和CAN一共4根線就可以了。加上地線,就一共要接5根線了。@李景遷 ,這裡的地線是指DB-9的PIN 3。也就是說,CANcase端的PIN 3要接到ECU的地,我一般就接到ECU電源負極。 2)必須選擇匹配的CANPiggy(也就是Transceiver),因為我們的ECU是低速CAN,所以CANcase也要選擇低速CAN的通道。所以當我檢查Vetor Hardware Config裡面的Channel assignment,就發現問題了。
上面橙色框框裡面顯示baud rate是100K,這裡的baud rate是可以手動配置的。但是紅色框框裡面表示這個CANpiggy是一個高速CAN的Transceiver,所以在干擾比較多的環境下,把高速CAN Transceier用到低速CAN的系統里,是會有問題的。至於更深層的,為什麼這樣用會有問題,就需要看電氣參數啦,這個我也不懂,希望有高手可以來解答。BTW,如果只是在純軟體開發的時候用來做通信,這樣配置是可以的。關於是否要接地,如果不需要做Bus Failure那樣的測試,就可以不用接地啦。簡單理論介紹,這個網站不錯:CAN Controller Area Network Information如果想要深入學習,最好是能找到一份相應的工作。邊學邊實踐,像Bosch, Continental都有相應的Bus開發小組。
講的很詳細,我的現在的水平,只能說入門了而已。
感謝前輩的回答,推薦的那網站還有中文,不錯不錯
那如何學Flexray呢。 。。
pulse 1 是iso-7637 試驗的一部分
樓主介紹的這個網址確實對學習CAN有很大幫組
工業界的東西,一般都是邊做邊學。knowhow沒有這麼簡單的印在書上的。
說的是CAN匯流排開發嗎?
推薦閱讀:
※車輛工程本科畢業,想自學汽車電子方面的知識,怎麼入手比較科學?
※汽車開發中的快速原型和基於模型設計的區別 dspace 有什麼作用?