CAN總線應用最多的是汽車領域。
CAN(Controller Area Network)控制器 局域 網
局域網:把幾臺電腦連接到一臺路由器上,這幾臺電腦就可以進行通訊了。
控制器在汽車中的專業術語叫做ECU(Electronic Control Unit),可以看做是一臺超小型計算機,內部集成了供電系統,單片機,驅動系統,是汽車里面最小的控制模塊。
為了能讓ECU之間進行通信,人們設計了一種CAN協議。
CAN總線在最開始是為了減少銅線的長度而開發的。
如果不使用CAN總線,就會使用數倍長的銅線,而且線束還非常雜亂。
而通過CAN,這么多ECU只需要掛載到CAN總線上,就可以組成局域網通信了。
要進行CAN通訊,需要專門的CAN收發芯片。
經過CAN收發器后,普通信號會被轉化為差分信號。
差分線是用兩根線表示一個信號。
如果我們給CAN收發器發送一個低電平,它的兩根線分別輸出3.5V和1.5V,它們的電壓差是2V,這是顯性電平,表示邏輯0。
發送高電平時,兩根線都輸出2.5V,壓差是0V,表示邏輯1。
同樣的,CAN收發器也可以把接收到的差分信號,轉化為普通電平信號。
如果是普通信號,它只有一根線,當某一點受到干擾,它的電平就會發生跳變,這樣就會導致傳輸出現錯誤。
長距離傳輸時,很容易出現錯誤。
CAN通訊采用的差分信號是兩根線共同作用,而且是雙絞線纏繞。這樣即使受到干擾,也是兩根線同時受到干擾,它們的壓差也會保持不變。
所以CAN信號可以傳輸的距離很長,可達1000米。
CAN通訊傳遞的數據幀
第一位是起始位,一定是邏輯0。
接下來的11位是識別碼,根據11位識別碼,就可以知道這一幀數據是發送給哪個設備的。
每一個設備都有屬于自己的11位識別碼。
RTR位是用來區分是數據幀還是遠程請求幀。
- 如果是遠程請求幀,這一位是1。
- 數據幀,就是0。
接下來六位是控制碼,用于控制數據長度。
- IDE位用于區分標準格式和拓展格式。
因為CAN總線上掛載了很多ECU,如果兩個ECU同時發送信息,哪一個設備發送的信息優先呢?
這就得看11位的識別碼,它不僅是設備的唯一識別碼,還代表了優先級。
當總線同時出現邏輯0和邏輯1時,總線會被置為邏輯0,此后上面的數據幀就不會再發送了。