新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > CAN總線技術學習(二)

CAN總線技術學習(二)

作者: 時間:2016-12-12 來源:網(wǎng)絡 收藏
CAN總線信息以幀的形式傳輸,每個幀包括多個段:起始位SOF、仲裁段、控制段、數(shù)據(jù)段、CRC校驗、確認位、結束位等,各個段依次串行被傳輸?shù)娇偩€上。起始位、CRC校驗、確認位和結束位由控制器硬件自動生成,軟件可以配置仲裁段、控制段和數(shù)據(jù)段的內容。每個CAN幀最多發(fā)送數(shù)據(jù)段長度為8個字節(jié)即64位。
CAN總線協(xié)議有兩種:CAN2.0A和CAN2.0B協(xié)議,CAN2.0A支持幀ID為11位的標準幀,CAN2.0B協(xié)議支持幀ID為11位的標準幀和幀ID為29位的擴展幀,如圖1和圖2所示。

圖1CAN標準幀

圖2CAN擴展幀
下面解釋幾個CAN總線問題:
位填充:上述圖中都提到位填充的問題,即當發(fā)送的一幀CAN信息中出現(xiàn)連續(xù)5個相同位時,控制器會自動填充一個相反的位進去,控制器接收一幀CAN信息時發(fā)現(xiàn)5個相同的位,也會自動把其后的一個翻轉位去掉。那么可能我們會問為什么要做這種看似無用的操作呢?因為CAN總線通訊屬于異步通訊,雖然通訊雙方約定設定相同的波特率通訊,但是每一位(bit)的寬度也不可能絕對相同,多個相同的位累積起來可能出現(xiàn)較大的誤差,造成接收信息出錯,那么如何解決這個問題呢?CAN協(xié)議中規(guī)定在位跳轉時要做同步補償,那么這樣可以消除多個位累積造成的錯誤,但是如果CAN幀信息連續(xù)出現(xiàn)多個0或1,接收方?jīng)]辦法監(jiān)測到翻轉位,不能做出正確的補償,可能導致發(fā)送方發(fā)了10位0,接收方監(jiān)測出11個0出來的情況出現(xiàn),所以當發(fā)送方連續(xù)發(fā)送5個0時,要位填充一個1進去,然后再發(fā)送下面的位,而接收方接收到5個0后接收到下面的1可以做出相應的同步補償,同時要丟棄這個填充位。按照CAN協(xié)議規(guī)定如果在CAN信息中接收到連續(xù)6個以上的相同位被認為是錯誤信息,CAN控制器錯誤計數(shù)加1。
CAN協(xié)議:如上圖所示,標準幀標識符(幀ID)有11位,擴展幀標識符(幀ID)有29位,CAN2.0B協(xié)議也兼容CAN2.0A協(xié)議,可以同時識別標準幀和擴展幀。標準幀和擴展幀的區(qū)別在于IDE位,IDE為0時表示標準幀,IDE為1時表示擴展幀。
CAN信號:CAN總線使用一對差分信號通訊,即CAN_H和CAN_L,通過識別它們的壓差獲取0或1的信息,上電后兩個信號對地都會有一定的電壓,即V_CANH和V_CANL,通過判斷V_CANH-V_CANL識別信息,總線信號分為顯性(壓差為1V以上,也即數(shù)字0)和隱性(壓差小于0.5V,也即數(shù)字1)。一般在沒有數(shù)據(jù)通訊時V_CANH和V_CANL都為2.5V,所以CAN總線默認為沒有壓差(隱性,數(shù)字1),當有起始位SOF(數(shù)字0,顯性)時每個網(wǎng)絡上的節(jié)點都能監(jiān)測到,準備接收信息,如圖3所示。

圖3CAN總線電壓示意圖
逐位仲裁機制:CAN節(jié)點發(fā)送的信息都會被自己接收并判斷。當CAN總線上兩個節(jié)點同時發(fā)送CAN信息時,CAN節(jié)點也會比較自己發(fā)送的數(shù)據(jù)和接收的數(shù)據(jù)是否一致,由于CAN信號有顯性(數(shù)字0,壓差大于1V)和隱性(數(shù)據(jù)1,壓差小于0.5V)兩種,當一個節(jié)點發(fā)送0而另一個節(jié)點發(fā)送1時,總線表現(xiàn)為顯性0,那么發(fā)送1的節(jié)點監(jiān)測到后知道發(fā)送總線沖突,自動退出發(fā)送,所以可以看出,CAN總線信息小的優(yōu)先級高。通過這種方式可以實現(xiàn)非破壞性逐位仲裁,優(yōu)先級高的節(jié)點正常發(fā)送,不受任何影響。


關鍵詞: CAN總線技

評論


技術專區(qū)

關閉