CAN總線協議的優點
? 布線減少,成本低
? 接線簡單,節省時間
? 丟失消息的自動重傳
? 支持錯誤檢測
? 靈活的數據傳輸速率
CAN 定義
CAN代表控制器局域網,專為滿足汽車行業的需求而設計。在引入CAN之前,每個電子設備都使用多條電線連接到其他設備以實現通信。但是當汽車系統中的功能增加時,由于布線系統繁瑣,維護起來很困難。在CAN總線系統的幫助下,只需將每個ECU連接到公共串行總線,即可讓ECU相互通信,而無需太多復雜性。因此,與汽車系統中使用的其他協議(即CAN與LIN)相比,CAN由于復雜性較低而且更加穩健。
CAN協議可以被定義為在一個通過串行總線連接的電子設備網絡中傳輸和接收信息的一套規則。CAN網絡中的每個電子設備被稱為一個節點。每個節點都必須有硬件和軟件嵌入其中進行數據交換。一個CAN總線系統的每個節點都有一個主機微控制器單元、CAN控制器和CAN收發器。CAN控制器是一個可以嵌入在主機控制器內或單獨添加的芯片,它需要管理數據并通過收發器在串行總線上發送數據,反之亦然。CAN收發器芯片用于使信號適應CAN總線水平。
CAN是一個基于消息的協議,每個消息都由一個預先定義的唯一ID來識別。傳輸的數據包被CAN總線網絡中的所有節點接收,但根據ID,CAN節點決定是否接受它。當多個節點試圖同時發送數據時,CAN總線遵循仲裁過程。
CAN 總線電氣規格
CAN收發器處理的CAN信號有單端信號和差分信號(CANH和CANL)。CAN_High和CAN_Low線路在理想狀態下為2.5V。CAN將邏輯“0”定義為顯性位,將邏輯“1”定義為隱性位。傳輸顯性位時,CAN_High變為 3.5V,CAN_Low變為1.5V,即顯性位的差分電壓為2V。當發送隱性位時,CAN_High和 CAN_Low線被驅動到2.5V,表示隱性位的差分電壓為0V。CANH和CANL線的物理端應加120歐姆的CAN總線終端電阻,以避免任何信號反射。
圖1. CAN總線差分信號
CAN 的幀類型
幀是一種定義的結構或格式,在網絡中攜帶有意義的數據(字節)。CAN有四種幀類型:數據幀、遠程幀、錯誤幀、過載幀。
數據幀
數據幀包含用于傳輸的節點數據的幀。數據幀由提供信息的附加字段組成,即仲裁字段、控制字段、數據字段、CRC字段、2位確認字段和幀結束。
有兩種類型的數據幀:標準幀格式、擴展幀格式
兩種格式的唯一區別是標準幀支持11位標識符,擴展幀支持29位標識符,由11位標識符和擴展18位標識符組成。IDE位在標準幀中是顯性的,在擴展幀中是隱性的。
標準幀格式:
標準幀主要用于發送數據。
圖2. 標準幀
術語
? SOF - 幀的開始,表示幀傳輸的開始。
? Identifier - 11位唯一的ID,也代表信息的優先級值越低,優先級越高。
? RTR - 遠程傳輸請求,它對數據幀是顯性的,對遠程幀是隱性的。
? IDE - 單一識別擴展,它對標準幀是顯性的,對擴展幀是隱性的。
? R0 - 保留位。
? DLC - 數據長度代碼,定義了正在發送的數據的長度,它的大小為4位。
? 數據——要傳輸的數據和長度由DLC決定。
? CRC——循環冗余校驗,它包含前面應用程序數據的校驗和,用于錯誤檢測。
? ACK——確認,它的長度為2位,如果接收到準確的消息,則占主導地位。
? EOF——幀的末端,必須是隱性的。
? IFS——幀間空間,它包含控制器將正確接收的幀移動到正確位置所需的時間。
擴展幀:
圖3. 擴展幀
它與標準幀相同,但有一些額外的字段。
SRR替代反向請求。SRR位總是作為隱性位傳輸,以確?;緮祿c擴展數據幀相比具有較高的優先權,如果兩個信息具有相同的11位標識符,它還包含一個11位標識符以外的18位標識符。
r1- 保留位。
遠程幀
遠程幀與數據幀相似,但有兩點不同。遠程幀是由接收方發送的,用于請求發送方提供數據,所以遠程幀和數據幀之間的區別是遠程幀不包含任何數據字段,因為它不用于數據傳輸。第二個區別是遠程幀的RTR 位為隱性狀態,當總線上具有相同標識符的數據幀和遠程幀同時發送時,由于數據幀RTR位是顯性的,數據幀將在仲裁中贏得總線控制權。
錯誤幀
錯誤幀是用于接收和發送消息時檢測出錯誤時,通知錯誤的幀。錯誤幀由六個顯性位組成的錯誤標志和由八個隱性位組成的錯誤界定符構成。
錯誤標志分為:主動錯誤標志、被動錯誤標志
主動錯誤標志:當錯誤主動節點檢測到一個總線錯誤時輸出的一個主動錯誤標志,來中斷當前的數據發送。其中主動錯誤標志由6個連續的顯性位構成。
被動錯誤標志:當錯誤被動節點檢測到一個總線錯誤時輸出的一個被動錯誤標志,并緊接著發送錯誤定界字段。其中錯誤被動標志由6個連續的隱性位構成。
錯誤計數器:如果在總線上檢測到一個錯誤,那么TEC或REC計數就會增加。
- 發送錯誤計數器(TEC)
- 接收錯誤計數器(REC)
? 當 TEC 和 REC 小于 128 時,發送活動錯誤幀
? 當 TEC 或 REC 大于 127 且小于 255 時,傳輸被動幀
? 當TEC大于255時,節點進入總線關閉狀態,此時不能發送幀
圖4. 錯誤轉換狀態圖
過載幀
過載幀是用于接收單元通知發送單元它尚未完成接收準備的幀。過載幀中包含兩個字段,過載標志和過載界定符。過載標志由6個顯性位和緊隨其后的其他節點產生的過載標志構成,過載界定符由8個隱性位組成,在以下兩種情況下,節點會發送過載幀:
- 當接收單元需要發送節點延緩下一幀傳輸
- 節點在幀間間隔檢測到非法顯性位
仲裁
仲裁是一種解決沖突的機制,當一個以上的節點同時準備傳輸信息時。只要總線是空閑的,任何節點都可以傳輸數據。如果多個節點同時準備傳輸數據,對總線的訪問就會發生沖突,可以通過使用標識符的仲裁來解決。在仲裁過程中,每個發射器都會將傳輸的比特值與總線上的比特值進行比較。如果比特值是相同的,節點繼續傳輸比特。如果傳輸的比特值與總線上的比特值不一樣,那么,優勢比特就會覆蓋劣勢比特。
CAN報文的仲裁字段由1位或29位標識符和RTR位組成。具有最低值的標識符具有最高的優先權。如果數據幀和遠程幀都有相同的標識符,并準備在同一時間發送數據,那么數據幀的優先級就高,因為遠程傳輸位(RTR)在數據幀中是主導位,在遠程幀中是隱性位。
消息級CAN總線錯誤控制機制
與其他協議相比,即CAN與LIN、CAN與MOD總線相比,CAN協議是穩健的,錯誤檢查使CAN協議達到穩健。通過這些機制,如果檢測到錯誤,節點就會傳送一個錯誤幀并銷毀傳送的幀。
CRC校驗
循環冗余校驗值由發送節點計算并通過CRC字段發送,該值被所有節點接收。然后所有接收節點計算CRC值并將該值與發送值匹配。如果值不同,則生成錯誤幀。
ACK時隙
當發送節點發送消息時,在確認時隙中發送一個隱性位。如果接收到一條消息,則確認槽由顯性位替換,該位將確認至少一個節點正確接收到該消息。如果該位是隱性的,則沒有節點正確接收到消息。
形式錯誤
當一個固定形式的位場含有1個或多個非法位,則檢測到一個形式錯誤,如幀結尾固定為隱性位,卻檢測到了顯性位。
*內容來源自PathPartner Technology,版權歸原作者所有,如涉及版權問題請聯系溝通
審核編輯:符乾江
-
mcu
+關注
關注
146文章
16987瀏覽量
350301 -
CAN總線
+關注
關注
145文章
1936瀏覽量
130629 -
汽車
+關注
關注
13文章
3422瀏覽量
37164
發布評論請先 登錄
相關推薦
評論