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

圖1CAN標準幀

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

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