幀編碼
幀中的位采用 NRZ (Non-return-to-zero 非歸零)方法編碼。相同帶寬,NRZ編碼信息量更大。
CAN用雙絞線的方式傳輸,兩條線壓差2V(CAN_H是3.5V左右,CAN_L是1.5V左右)為顯性,表示邏輯0;兩條線壓差0V(都是2.5V左右)為隱性,表示邏輯1。
我很長一段時間把顯性和隱性搞混,直到記住“顯靈”這個詞,顯性是0.
為了減少CAN信號錯誤,專家設計了位填充技術。CAN消息幀中,幀起始、仲裁場、控制場、數據場和CRC序列均用位填充的方法編碼。
當CAN發送器檢測到5個相同的位后,插入一個相反位,產生跳變沿,用來同步,以減少檢測錯誤。
填充位會被當成總線數據位處理,但接收器接收時會自動剔除填充位,這樣要傳輸的信息不會出現錯誤。
位的傳輸順序
數據幀和遠程幀里,從SOF開始,一個域接一個域地傳輸。在一個域內,字節傳輸順序是從MSB到LSB。在一個字節內,位傳輸順序是從bit 7到bit 0.
位時間
位時間是一個位的持續時間。我們是看表來確定時間,CAN總線的節點是通過時鐘發生器確定,而常用的時鐘發生器是石英晶振。石英晶振的頻率通常是波特率的整數倍。
上一篇提到波特率的時候,其單位是bit/s,則一位的時間=1/波特率。比如常用的500kbit/s,位時間是2us(通常要求誤差在±0.004us內)。
一個位時間可以分成很多段的時間量(Time quantum,簡寫為TQ)。前面說到CAN的時間是通過石英晶振的頻率確定,那晶振也是有很多一小段一小段的時間周期。可以理解為,若干個石英晶振的時間段組成了一個TQ,若干個TQ組成了一個位的時間。就像六十秒組成一分鐘,六十分鐘組成一小時。
和一分鐘固定等于六十秒不同,一個位可以分為1~32個TQ,具體是多少個可以由使用者規定。
一小時我們有時候分為前一刻鐘、前半個小時和后半個小時,一個位也可以分為很幾段。這個幾是固定的,是4,如下圖。
一個位時間可以分為:
同步段(Sync_Seg):1個TQ。同步段內有一個跳變沿,用來使總線上各個ECU同步,就跟港片里飛虎隊行動前都要對表一樣。
傳播段(Prop_Seg):用于補償各總線上各ECU之間的物理傳輸延遲時間(信號在總線上的傳播延遲和ECU內部延遲)。傳播段的長度不同的ECU不完全一致,一般在1~8個TQ。
相位緩沖段1(Phase_Seg 1)、相位緩沖段2(Phase_Seg 2):用于補償跳變沿的相位誤差,就是ECU間的晶振誤差。這兩段可以被再同步處理延長或縮短。通過再同步,可以延長相位緩沖段1,或縮短相位緩沖段2。
一個位的采樣點在相位緩沖段1的終點,通常是位時間的75%左右。
標準原文還詳細說明了延時后,如何處理才能使仲裁順利,感興趣可以自己看看。
bus off
一個ECU根據錯誤計數不同,可以處于以下三種狀態之一:錯誤激活(error-active)、錯誤認可(error-passive)或離線(bus-off)。
(當ECU進入bus off后,有快恢復和慢恢復兩種策略。兩種策略都會被ECU執行,先快后慢,具體策略由廠家決定。)
-
編碼器
+關注
關注
45文章
3751瀏覽量
136591 -
CAN總線
+關注
關注
145文章
1968瀏覽量
131984 -
時鐘發生器
+關注
關注
1文章
222瀏覽量
68675 -
CRC校驗
+關注
關注
0文章
84瀏覽量
15467 -
發送器
+關注
關注
1文章
261瀏覽量
27085
發布評論請先 登錄
相關推薦
汽車CAN總線滲透測試
can總線stm32交通燈
ISO11898物理層特性
CAN總線筆記 精選資料分享
CAN總線協議簡介
CAN總線過載幀及數據幀詳解

評論