CAN匯流排的汽車
CAN概念
CAN
是
控制器域網
(Controller Area Network, CAN) 的簡稱,是由研發和生產汽車電子產品著稱的
德國BOSCH
公司開發了的,並最終成為國際標準(
ISO11898
),是ISO國際標準化的
序列通訊協議
。是國際上應用最廣泛的
現場匯流排
之一。 在
北美
和
西歐
,
CAN匯流排協議
已經成為汽車
計算機控制系統
和嵌入式工業控制區域網的標準匯流排,並且擁有以CAN為底層協議專為
大型貨車
和重工機械車輛設計的
J1939協議
。近年來,其所具有的高可靠性和良好的錯誤檢測能力受到重視,被廣泛應用於汽車計算機控制系統和環境溫度惡劣、電磁輻射強和振動大的工業環境。
CAN的兩個ISO國際標準:
1)
ISO11898
:定義了通訊速率為 125 kbps~1 Mbps 的
高速 CAN
通訊標準,屬於閉環匯流排,傳輸速率可達1Mbps,匯流排長度 ≤ 40米。
2)
ISO11519
:定義了通訊速率為 10~125 kbps 的
低速 CAN
通訊標準,屬於開環匯流排,傳輸速率為40kbps時,匯流排長度可達1000米。
CAN種類
1)高速CAN:
a。根據線纜的長度提供從5Kbit/s到1Mbit/s的波特率。
b。高速CAN網路在每個網路端點端接一個120歐姆的電阻。
c。電平靜默為2。5V,上下限是3。5V和1。5V。
2) 容錯CAN:
a。提供5Kbit/s到125Kbits/s的波特率。
b。顯性時則為1V和4V。
3)單線CAN:
a。提供5Kbit/s到125Kbits/s的波特率。
b。單線CAN的波特率一般為33。3KHz。
汽車CAN網路
汽車CAN網路
汽車CAN匯流排
CAN組成
CAN匯流排的一個
幀
主要由
幀資訊
,
幀ID
和
幀資料
組成。
1)幀資訊
:分四類,
標準資料幀
(汽油車、電機)、
標準遠端幀
(少見)、
擴充套件資料幀(
廣大柴油車、部分汽油車)、
擴充套件遠端幀
(少見)。
2)幀ID:
是CAN的一種“地址”。CAN有個特點是
競爭機制
,
幀ID越小越有佔用匯流排資源的權利,越會優先發送。
CAN ID
DBC檔案:
車輛行業中,如果對車輛CAN總線上的每個幀ID及每個幀資料都做出了標準的解釋,形成了的檔案就是DBC檔案。
3)幀資料:
和串列埠相比,
CAN的幀資料只有8個位元組,即64個位
,不會再多了。但CAN FD作為新型匯流排解決了僅有8位元組這個問題。
4)終端電阻:
CAN和RS485一樣,要在終端減少差分訊號的反射,如不在兩個終端加電阻,訊號會反彈回來影響通訊。終端電阻在CAN總線上要有兩個,阻值為120歐姆,並聯,最遠的終端一邊一個。如果有多個節點的話,終端電阻應適當加大。
5)波特率
:常見的車輛波特率有500K,250K,125K,100K。
CAN匯流排標準
ISO標準
CAN標準分為
底層標準
(物理層和資料鏈路層)和
上層標準
(應用層)兩大類
ISO 11898-1 – CAN協議
ISO 11898-2 – CAN高速物理層
ISO 11898-3 – CAN低速可容錯物理層
ISO 11898-4 – 時間觸發CAN
ISO 11898-5 – “低功率模式高速介質存取單元” – 目前處於起草階段
ISO 11519-2 – 已過時,被11898-3取代。
ISO 14230 – “關鍵字協議2000” – 定義非CAN序列線路診斷的若干部分。
ISO 15765 – CAN總線上定義診斷的標準 – 本質上是CAN總線上的關鍵字協議2000。
J1939 – 卡車和客車領域應用最廣泛的基於CAN的高層協議,由SAE定義。J1939分成幾個部分,描述物理層、資料鏈路層、網路管理和大量預定義的報文。
ISO 11783 – 與J1939相似,但用於農業領域(諸如拖拉機)
ISO 11992 – 定義卡車和拖車之間的介面
NMEA 2000 – 基於J1939的協議,用於海事領域。由NMEA委員會定義。
如果沒有詳細說明談論中所使用哪種標準,通常其
預設是指ISO 11898-1定義的資料鏈路層協議和ISO 11898-2定義的物理層。
底層標準:
CAN底層標準都基本一樣,涵蓋OSI模型中的物理層和資料鏈路層,與ISO/OSI模型的對應關係如下圖所示:
對應關係
ISO 11898-1:資料鏈路層協議,描述CAN匯流排的基本架構,定義不同CAN匯流排裝置在資料鏈路層通訊方式
ISO 11898-2:高速CAN匯流排物理層協議,最高資料傳輸速率 1Mbps,應用為兩線平衡式訊號(CAN_H, CAN_L)
ISO 11898-3:定義低速CAN匯流排(LS-CAN, Fault-Tolerant CAN)物理層標準,資料傳輸速率在 5Kbps ~ 125Kbps 。Fault-Tolerant是指總線上一根傳輸訊號失效時,依靠另外的單根訊號也可以通訊
ISO 11898-4:定義CAN匯流排中的時間觸發機制(Time-Triggered CAN, TTCAN),定義與ISO 11898-1 配合的幀同步實體,實現汽車ECU之間基於時間觸發的通訊方式。
上層標準:
不同應用領域或製造商有不同的做法,沒有統一的國際標準
上層協議對比
CAN的幀種類(四種幀型別)
1)資料幀
用於傳送單元向接收單元傳送資料的幀。
資料幀的幀結構圖:
資料幀
SOF:表示資料幀開始;(1 bit),發出一個顯性位邊沿,網路節點以此開始同步
ID:標準格式11 bit,擴充套件格式29 bit包括Base ID(11 bit)和Extended IDr(18 bit),該區段標識資料幀的優先順序,數值越小,優先順序越高;
RTR:遠端傳輸請求位,0時表示為資料幀,1表示為遠端幀,也就是說RTR=1時,訊息幀的Data Field為空;(1 bit)
IDE:(1 bit)識別符號擴充套件位,0時表示為標準格式,1表示為擴充套件格式;擴充套件幀和標準幀格式不同,不能存在於同一can網路
DLC:資料長度程式碼,0-8表示資料長度為0~8 Byte;(4 bit)
Data Field:資料域;(0~8 Byte)
CRC (15 bit):
校驗域,從sof到資料場的所有資料進行encode
由傳送方填
校驗演算法G(x) = x15 + x14 + x10 + x8 + x7 + x4 + x3 + 1;(15 bit)
DEL:校驗域和應答域的隱性界定符;(1 bit)
ACK:(1 bit)
應答域,確認資料是否正常接收,所謂正常接收是指不含填充錯誤、格式錯誤、 CRC 錯誤。
傳送節點將此位為1,由接收方進行確認,收到訊息給出一個顯性位0
如果一個節點都沒有確認收到訊息,傳送方監聽此位為隱形位就會報錯
SRR:替代遠端請求位,在擴充套件格式中佔位用,必須為1;(1 bit)
EOF:連續7個隱性位(1)表示幀結束;(7 bit)
ITM(3 bit):
幀間空間,Intermission (ITM),又稱Interframe Space (IFS),連續3個隱性位,但它不屬於資料幀。
幀間空間是用於將資料幀和遠端幀與前面的幀分離開來的幀。資料幀和遠端幀可透過插入幀間空間將本幀與前面的任何幀(資料幀、遙控幀、錯誤幀、過載幀)分開。過載幀和錯誤幀前不能插入幀間空間。
2)遠端幀
用於接收單元向具有相同識別符號的傳送單元請求資料的幀。
遠端幀與資料幀的幀結構類似,區別:
1、資料幀的 RTR 值為“0”,遠端幀的 RTR 值為“1”。
2、遠端幀沒有資料塊。
3、遠端幀的 DLC 塊表示請求傳送單元傳送的資料長度。
格式圖
遠端幀
當總線上具有相同識別符號的資料幀和遠端幀同時傳送時,由於資料幀的 RTR 位是顯性的,資料幀將在仲裁中贏得匯流排控制權。
3)錯誤幀
用於當檢測出錯誤時向其它單元通知錯誤的幀。
錯誤幀的幀結構由錯誤標誌和錯誤界定符構成。
錯誤標誌:6bit,
錯誤標誌
錯誤界定符:由8bit的隱性位構成。
4)過載幀
接收單元通知傳送單元它尚未完成接收準備。
傳送過載幀的兩種情況:
1、接收單元條件的制約,要求傳送節點延緩下一個資料幀或遠端幀的傳輸。
2、幀間空間(Intermission)的 3 bit 內檢測到顯性位。
每個節點最多連續傳送兩條過載幀,過載幀由過載標誌和過載界定符(8 個隱性位)構成。
過載幀
資料幀和遠端幀比較:
比較
CAN匯流排仲裁
仲裁優先順序:
識別符號值越小,訊息的優先順序越高
線與邏輯
:只有節點發送的
全是隱性
,匯流排電平才表現
為隱性
所有傳送節點在傳送資料的同時,也檢測總線上的電平狀態,逐位對比總線上電平與自身傳送的電平。
1)發 0 出現 1 :報錯。
2)發 0 出現 0 :繼續。
3)發 1 出現 1: 繼續。
4)發 1 出現 0: 競爭失敗,轉為接收方。
傳送自檢
如下圖,競爭失敗的C節點會自動在檢測到匯流排空閒的第一時間再次嘗試傳送。
CAN 節點A和C同時傳送資料幀,CAN匯流排根據優先順序仲裁,C失去權力
CAN條件接收
在CAN總線上
訊息是廣播式
的,節點可以透過設定控制器中過濾碼(Filter Code )和掩碼(Mask Code),再檢驗總線上訊息的識別符號,來判斷是否接收該訊息,對於掩碼,“1”表示該位與本節點相關,“0”表示該位與本節點不相關。
CAN-BUS資料流程
STM32的can過濾碼
位填充
CAN匯流排採用NRZ編碼,沒有單獨時鐘線,優點是效率高,但卻不易區分哪裡是bit開始,哪裡是bit結束。因此為確保在同步通訊過程中有足夠的電平跳變,規範中應用到
位填充機制
,即在每連續 5個相同電平後插入1個
反相電平
,接收節點在收到訊息後自動將填充位刪除。
資料幀位填充比較圖
在幀內除了CRC界定符、ACK域和EOF外,其餘部分均應用到位填充機制,在應用到位填充的域,檢測到連續6個顯性位或隱性位均視為報錯。
CAN錯誤檢驗
CRC錯誤
1)在傳送訊息時,傳送節點會根據特定的多項式計算出由資料幀SOF位到資料域最末位的Checksum值,並將該值放在資料幀的CRC域,隨著資料幀廣播到總線上。
2)接收節點在收到資料後,應用同樣的多項式計算Checksum值,並與收到的Checksum值對比。如果兩者一致,正常接收;如果不一致,則捨棄該訊息,併發送錯誤幀請求傳送節點重傳訊息。
應答錯誤(ACK Error)
接收方會在收到訊息後在ack應答位給出一個顯性電平,如果傳送方檢測到該位為隱性,則報錯。
格式錯誤(Form Error)
檢測出與固定格式的位段相反的格式時所檢測到的錯誤,如檢測crc界定符和ack界定符以及eof區域是否出現顯性位。
位錯誤(Bit Error)
比較輸出電平和匯流排電平(不含填充位),當兩電平不一樣時所檢測到的錯誤。如傳送顯性位,但匯流排是隱性位就報錯。
填充錯誤(Stuff Error)
在需要位填充的段內,連續檢測到 6 位相同的電平時所檢測到的錯誤。
CAN匯流排錯誤檢測機制
CAN總線上的
每個節點控制器都會檢測訊息是否出錯
,如果節點發現訊息出錯,它將傳送錯誤標誌,從而打斷總線上正常的資料傳輸。總線上其它沒有發現原始訊息錯誤的節點,在收到錯誤標誌後將採取必要的措施,比如捨棄當前總線上的訊息。
CAN節點內部有兩種錯誤狀態計數器 :
1)TEC /Transmit Error Counter,傳送錯誤狀態計數器,出現一次錯誤該計數器值 +8
2)REC /Receive Error Counter,接收錯誤狀態計數器,出現一次錯誤該計數器值 +1
3)訊息成功傳送或接收一次,對應的 TEC 或 REC 值相應 -1
錯誤計數
CAN規範定義了節點的 3 種錯誤狀態:
1) 主動錯誤:正常狀態,在此狀態下,節點可以傳送所有型別的幀,包括錯誤幀;發現錯誤後會很積極主動地上報錯誤。
2)被動錯誤:節點可以傳送除錯誤幀以外的所有幀;TEC or REC 計數超過127就進入此狀態;此時,該節點發現錯誤後只會傳送6個隱性位,不會把錯誤廣播出去。並且,傳送連續幀時,中間必須間隔8bit的延緩時間。
3)匯流排關閉:節點被控制器從總線上隔離;或者TEC大於255,就會進入這個狀態,需要重啟,或者等待128個11位隱性位電平。
CAN匯流排錯誤檢測機制