CAN總線技術學習(二)
CAN總線協議有兩種:CAN2.0A和CAN2.0B協議,CAN2.0A支持幀ID為11位的標準幀,CAN2.0B協議支持幀ID為11位的標準幀和幀ID為29位的擴展幀,如圖1和圖2所示。

圖1CAN標準幀

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

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