最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

K課堂 | CAN總線基礎(chǔ)知識匯總, 一文搞懂! (下篇)

2023-02-15 19:10 作者:KVASER克薩CAN總線  | 我要投稿

本篇內(nèi)容根據(jù)Kvaser《CAN協(xié)議教程》內(nèi)容進行整理?!禖AN協(xié)議教程》簡要闡述ISO 11898-1和ISO 11898-2標(biāo)準(zhǔn),主要介紹CAN在汽車設(shè)計、工業(yè)自動化控制和許多其它應(yīng)用中的基礎(chǔ)知識,希望能對CAN總線技術(shù)的學(xué)習(xí)者有所幫助。

內(nèi)容框架如下:


上篇(已更新,進入Kvaser主頁專欄查看


介紹CAN總線

CAN報文

  • CAN報文/?報文類型/?標(biāo)準(zhǔn)CAN vs.擴展CAN/?基本CAN和完整CAN/?總線仲裁和報文優(yōu)先級/?報文尋址和標(biāo)識/?標(biāo)識符值注意事項

CAN物理層

  • CAN總線/?不同的物理層/?最大總線速度/?最小總線速度/?最大電纜長度/?總線端接/?電纜/?CAN連接器


下篇(本篇內(nèi)容)


CAN示波器圖片

CAN連接器

  • 9 針 DSUB/ 5 針Mini-C/ 6針 Deutsch DT04-6P

CAN位時序

  • 位布局/ 時鐘同步/ 位時序寄存器計算

CAN錯誤處理

  • CAN 怎樣處理錯誤/ 錯誤檢測機制/ 錯誤限制機制/ 總線故障模式

高層協(xié)議

  • 不同的高層協(xié)議/ 其他相關(guān)協(xié)議和標(biāo)準(zhǔn)

圖1是一幅來自最普通的 ISO11898CAN 總線的圖片,以 1Mbps 速率運行。收發(fā)器是82C251。也就是說,物理層是由 ISO 11898 指定的。

圖 1

測量在 CAN_H(CAN 高位)和 GND(接地)之間進行。注意,靜態(tài)和隱性總線電壓約為 2.5V。

傳送顯性位時,電壓升高到約 3.5V。

圖2是同一總線,但是測量在 CAN_L(CAN 低位)和 GND(接地)之間進行:

圖 2

圖3是另一個報文,以 125kbps 速率發(fā)送。報文的(11 位)標(biāo)識符是 300,或十六進制12c。仔細查看就可識別報文中的第一個位。

圖 3

圖4這是一幅更復(fù)雜的圖片。它顯示與上面例子相同的報文。仍然是 11 位標(biāo)識符 300,速率仍然是 125kbps,但是 CAN 總線上沒有端接。CAN 電纜是短扁平帶狀線纜。

圖 4

那么,發(fā)生了什么情況?

這是 125kbps,所以一位是 8 微秒。

? 首先傳送節(jié)點發(fā)送一個起始位。這是一個邏輯‘0’,即一個顯性電平。

??然后傳送標(biāo)識符。十進制 300 是十六進制 12c,或者二進制 001 0010 1100。前兩個 0 會順利傳送。這解釋了圖片中看到的 24 微秒的顯性電平。

??然后應(yīng)該傳送一個‘1’。但是因為總線沒有端接,所以斜率上升不是預(yù)期的結(jié)果。傳送節(jié)點現(xiàn)在會認(rèn)為它在總線上看到的是‘0’。

??因為這種情況發(fā)生在仲裁階段,所以傳送節(jié)點將停止傳送,其認(rèn)為有其它節(jié)點正在傳送??偩€現(xiàn)在將變?yōu)殡[性狀態(tài),因為實際上沒有節(jié)點在傳送。

??在 6 個隱性位之后,傳送節(jié)點和接收節(jié)點都將檢測到填充錯誤,并開始進行錯誤處理。這時已經(jīng)過了 80 微秒(1 個起始位,2 個‘0’,1 個誤解位和 6 個隱性位,總共 10 個位,等于80 微秒)。

??檢測到填充錯誤的所有節(jié)點現(xiàn)在將開始傳送錯誤幀。這種情況下錯誤幀為被動模式,因為在捕獲到上方圖像之前產(chǎn)生了許多錯誤,所以傳送節(jié)點是被動錯誤模式。被動型錯誤幀和主動型錯誤幀相似,但是使用隱性電平進行傳送,所以在總線上不可見。

??被動型錯誤幀占用 6 位時間。

??然后所有節(jié)點等待 8 個隱性位的周期,稱為錯誤定界符。

??然后所有節(jié)點等待 3 個隱性位的周期,稱為間歇。

??對以上數(shù)字求和,結(jié)果是 1+6+6+8+3 = 24 個隱性位 = 192 微秒(如圖)

? 經(jīng)驗:始終端接 CAN總線!反射不一定有害,但是損壞的邊緣形狀將破壞通信。

圖5是同一 CAN 總線在另一時間尺度中的情況:

圖 5

CAN 總線大約長 2 厘米(8 英寸)。下沖和震蕩是可見的,但是在這種情況中顯然不重要。這次,平緩的上升斜率是問題所在。

圖6里是相同的設(shè)置,但是這次傳送節(jié)點和接收節(jié)點都是主動錯誤模式:

圖 6

發(fā)生了什么情況?

??如上圖所示,傳送了三個‘0’(耗時 24 微秒),下一位被誤解,所以傳送節(jié)點認(rèn)為它已經(jīng)失去了仲裁。

??傳送節(jié)點等待 6 位,然后檢測到一個填充錯誤。誤解的位和這 6 個位需 56 微秒。

??傳送節(jié)點和接收節(jié)點現(xiàn)在開始傳送錯誤幀。它是 6 個顯性位(48 微秒)。

??傳送錯誤幀的節(jié)點現(xiàn)在等待 8 個隱性位,但隨著上升斜率的壞處,第一個位被誤解。節(jié)點將認(rèn)為這是另一個節(jié)點在傳送錯誤幀,所以將忽略它。

??當(dāng)總線回到隱性電平時,所有節(jié)點等待 8 位。

??然后是 3 個隱性位的間歇。

? 3+9 = 12 位 = 96 微秒,如圖所示。

??然后傳送節(jié)點重新嘗試并得到相同的結(jié)果。一段時間以后傳送節(jié)點進入被動錯誤模式,并將按照前面所述那樣運行。

圖7是另一幅圖片。在此設(shè)置中,CAN 總線上只有一個節(jié)點(正確端接)。該節(jié)點試圖傳送一條報文,但是沒有其它節(jié)點在偵聽。

圖 7

那么會發(fā)生什么情況?

??首先傳送節(jié)點發(fā)送整個報文。

??傳送節(jié)點期望在 ACK 時隙中填充一個顯性電平。但是,因為沒有其它節(jié)點在偵聽,沒有任何ACK 到達,所以傳送節(jié)點檢測到一個確認(rèn)錯誤。

??然后傳送節(jié)點傳送一個被動錯誤標(biāo)志(上圖中,嘗試發(fā)送了幾秒鐘,所以不再是主動錯誤模式,而是被動模式)。

??被動錯誤標(biāo)志后面跟隨一個錯誤定界符和間歇。

??因為這個節(jié)點嘗試發(fā)送一個報文但是操作失敗,它必須再等待 8 位才能開始新的傳送。這種情況在 CAN 規(guī)范中稱為“暫停傳送”。

??傳送節(jié)點還必須將其傳送錯誤計數(shù)增加 8。但是這是 CAN 規(guī)范中的特殊情況,只有當(dāng)傳送節(jié)點是主動錯誤模式時才會發(fā)生。當(dāng)傳送節(jié)點進入被動錯誤模式時,它不會增加其傳送節(jié)點錯誤計數(shù)(這種情況中),而是會不斷重試傳送。

所以你在上圖中看到的是一個正在發(fā)送的報文,然后是短暫停頓,它是錯誤標(biāo)志、錯誤定界符、間歇和暫停傳送的總和。然后報文被不斷重傳……

1.?9 針 DSUB

CiA推薦使用這種連接器布局,幾乎是行業(yè)標(biāo)準(zhǔn)。

如果供電,電壓范圍應(yīng)該為+7至+13V,額定電流為100mA。模塊提供一個公接頭,內(nèi)部必須連接引腳3和6。

引腳編號適用于接頭側(cè)視圖的公接頭或焊接側(cè)視圖的母接頭。為了方便記住引腳編號,可留意CAN_LOW 的引腳號小,而 CAN_HIGH 的引腳號大。

2.?5 針 Mini-C

DeviceNet 和 SDS 都使用這種接頭,并且這兩種協(xié)議恰好兼容。

模塊含公接頭。輸入電壓為 24V+/-1%。

注意:在 DeviceNet 規(guī)范版本 1.x 中,圖 9.13 中母接頭的編號順序錯誤。規(guī)范 2.0 及更高版本的編號順序正確。

3.?6 針 Deutsch DT04-6P


CANHUG 推薦將其用移動液壓應(yīng)用場合中。

模塊端為公接頭,總線端為母接頭。目前對于供電沒有建議值。

1.?位布局

出于時序目的,CAN 總線上的每一位都劃分成至少 4 個時間份額。時間份額邏輯上劃分成四組或四段:

? 同步段

??傳播段

??相位段1

??相位段2

以下是 CAN 數(shù)據(jù)位的圖片:

總是一個時間份額長的同步段用于時鐘同步??偩€上的數(shù)據(jù)改變時,預(yù)計會出現(xiàn)一個位邊界。需要傳播段來補償總線線路中的延遲。

如果需要保持時鐘同步,相位段可能會縮短(相位段 1)或延長(相位段 2)。

在相位段 1 和相位段 2 之間的邊界采樣總線電平。

大部分 CAN 控制器還提供在一個位期間進行三次采樣選項。這種情況中,在采樣點之前的兩個時間份額的邊界上進行采樣,結(jié)果取決于擇多譯碼(至少是 82527 的情況)。

2.?時鐘同步

為了調(diào)整片上總線時鐘,CAN 控制器可以將一個位的長度縮短或延長整數(shù)個時間份額。這些位時間調(diào)整的最大值稱為同步跳轉(zhuǎn)寬度(SJW)。

硬同步在起始位從隱性到顯性轉(zhuǎn)換時產(chǎn)生。位時間從該邊界重新開始。

當(dāng)報文中的同步段內(nèi)不發(fā)生位邊沿時,會發(fā)生重新同步。其中一個相位段被縮短或延長,取決于信號中的相位誤差;可以使用的最大量由“同步跳轉(zhuǎn)寬度”參數(shù)確定。

3.?位時序寄存器計算

大多數(shù) CAN 控制器允許編程器使用以下參數(shù)設(shè)置位時序:

??時鐘預(yù)分頻器值

??采樣點前的時間份額數(shù)

??采樣點后的時間份額數(shù)

??同步跳轉(zhuǎn)寬度(SJW)中的時間份額數(shù)

通常為此提供兩個寄存器:btr0 和 btr1。但是,不同控制器之間略有差異,因此請仔細閱讀數(shù)據(jù)表。

恩智浦(恩飛公司)82c200 和 SJA1000 的寄存器布局如下:

??BRP0..BRP5 設(shè)置時鐘預(yù)分頻器值

??SJW0..SJW1 設(shè)置 SJW 的長度

??TSEG10..TSEG13 設(shè)置采樣點之前的時間份額數(shù)(不包含起始位)

??TSEG20..TSEG22 設(shè)置采樣點之后的時間份額數(shù)

??如果要獲取三個樣本,則 SAM 設(shè)置為 1,如果一個樣本就已足夠,則設(shè)置為 0。

注意:這些參數(shù)的實際值比寫入寄存器的值多1。

示例:如果提供給 SJA1000 的振蕩器信號是 16MHz,并且我們想要 250kbps 的比特率,采樣點接近整個位的 62%,以及 SJW 為 2 個時間份額,那么我們可以設(shè)置:

BRP=4,其給出時間份額長度為 2*4/16000000s= 500ns,并且

TSEG1=5,其給出采樣點前有 5 個時間份額,并且

TSEG2=3,其給出采樣點后有 3 個時間份額。

每個位將包含 5+3=8 個時間份額,這樣所需的比特率為 1/(8*500ns)=250kbps。寄存器值應(yīng)該為:

btr0 = (SJW - 1) * 64 + (BRP -1) =

(2-1)*64 + (4-1) =

67 =

0×43

btr1 = SAM * 128 + (TSEG2 - 1)* 16 + (TSEG1 - 1) =

0*128 + (3-1)*16 + (4-1) = ("4″ 因為起始位不包括在內(nèi))

35 =

0×23

采樣點為位的 5/8=62.5%。

1.?CAN 怎樣處理錯誤

錯誤處理內(nèi)建在 CAN 協(xié)議中,對 CAN 系統(tǒng)的運行十分重要。錯誤處理的目標(biāo)是檢測 CAN 總線上出現(xiàn)的報文中的錯誤,從而傳送節(jié)點可以重傳出錯的報文??偩€上的每個 CAN 控制器都會嘗試檢測報文中的錯誤。如果發(fā)現(xiàn)錯誤,發(fā)現(xiàn)節(jié)點將傳送一個錯誤標(biāo)志,從而中斷總線通信。其它節(jié)點將檢測錯誤標(biāo)志導(dǎo)致的錯誤(如果它們尚未檢測到初始錯誤)并采取合適的措施,例如丟棄當(dāng)前報文。

每個節(jié)點維護兩個錯誤計數(shù)器:傳送錯誤計數(shù)器和接收錯誤計數(shù)器。有幾條規(guī)則規(guī)定這些計數(shù)器如何遞增或遞減。實質(zhì)上,檢測到故障的傳送節(jié)點增加其傳送錯誤計數(shù)器比偵聽節(jié)點增加其接收錯誤計數(shù)器要快。這是因為很有可能是傳送節(jié)點發(fā)生了故障!當(dāng)任何錯誤計數(shù)器增加到超過某個值時,節(jié)點將首先進入“被動錯誤”,也就是說,它在檢測到錯誤時不會主動阻止總線通信,然后“離開總線”,這意味著節(jié)點根本不參與總線通信。

使用錯誤計數(shù)器,CAN 節(jié)點不但可以檢測故障,而且可以執(zhí)行錯誤限制。

2.?錯誤檢測機制

CAN 協(xié)議定義了五種以上不同的方法來檢測錯誤。其中兩種在位級別工作,另外三種在報文級別工作。

??位監(jiān)控

??位填充

??幀檢查

??確認(rèn)檢查

??循環(huán)冗余檢查

01. 位監(jiān)控

CAN 總線上的每個傳送節(jié)點都會監(jiān)控(也就是回讀)傳送的信號電平。如果位級別實際讀取的與傳送的不同,則發(fā)出信號指示位錯誤。(仲裁過程中不會發(fā)出位錯誤)。

02. 位填充

當(dāng)一個節(jié)點已經(jīng)發(fā)送了相同級別的五個連續(xù)位時,它將向輸出位流添加相反電平的第六位。接收方將刪除這個額外的位。這樣做是為了避免總線上出現(xiàn)過度的直流電成分,但它同時也給予了接收方檢測錯誤的額外機會:如果總線上出現(xiàn)五個以上相同級別的連續(xù)位,會發(fā)出信號指示填充錯誤。

03. 幀檢查

CAN 報文的一些部分具有固定的格式,也就是說,標(biāo)準(zhǔn)明確定義了何種級別和何時必須發(fā)生。(那些部分是 CRC 定界符、ACK 定界符、幀結(jié)束以及間歇,但是間歇還有一些另外的特殊錯誤檢查規(guī)則)。如果 CAN 控制器在這些固定字段中的一個中檢測到無效值,將發(fā)出組成錯誤。

04. 確認(rèn)檢查

正確接收報文的總線上的所有節(jié)點(不管這些節(jié)點是否對報文內(nèi)容“感興趣”)預(yù)期將在報文中所謂的確認(rèn)時隙中發(fā)送一個顯性電平。發(fā)送節(jié)點在此將發(fā)送隱性電平。如果發(fā)送節(jié)點無法在確認(rèn)時隙中檢測到顯性電平,會發(fā)出確認(rèn)錯誤的信號。

05. 循環(huán)冗余檢查

每個報文都包含一個15位的循環(huán)冗余校驗和(CRC)。節(jié)點如果在報文中檢測到與自己計算所得不同的 CRC,將發(fā)出 CRC 錯誤的信號。

3

錯誤限制機制


總線上的每個 CAN 控制器都將在每個報文中嘗試檢測以上列出的錯誤。如果發(fā)現(xiàn)錯誤,發(fā)現(xiàn)節(jié)點將傳送一個錯誤標(biāo)志,從而中斷總線通信。其它節(jié)點將檢測錯誤標(biāo)志導(dǎo)致的錯誤(如果它們尚未檢測到初始錯誤)并采取合適的措施,例如丟棄當(dāng)前報文。

每個節(jié)點維護兩個錯誤計數(shù)器:傳送錯誤計數(shù)器和接收錯誤計數(shù)器。有幾條規(guī)則規(guī)定這些計數(shù)器如何遞增或遞減。實質(zhì)上,檢測到故障的傳送節(jié)點增加其傳送錯誤計數(shù)器比偵聽節(jié)點增加其接收錯誤計數(shù)器要快。這是因為很有可能是傳送節(jié)點發(fā)生了故障!

節(jié)點開始時處于主動錯誤模式。當(dāng)兩個錯誤計數(shù)器中的任何一個計數(shù)超過 127 時,節(jié)點將進入稱為被動錯誤狀態(tài)。當(dāng)傳送錯誤計數(shù)器達到 255 以上時,節(jié)點將進入總線關(guān)閉狀態(tài)。

??主動錯誤節(jié)點將在檢測到錯誤時發(fā)送主動錯誤標(biāo)志

??被動錯誤節(jié)點將在檢測到錯誤時發(fā)送被動錯誤標(biāo)志

??總線關(guān)閉節(jié)點不會在總線上傳送任何內(nèi)容

增加和減少錯誤計數(shù)器的規(guī)則略顯復(fù)雜,但是原理比較簡單:傳送錯誤給出 8 個錯誤點,而接收錯誤給出 1 個錯誤點。正確傳送和/或接收的報文會導(dǎo)致計數(shù)器減少。

示例(略簡化):假設(shè)總線上節(jié)點 A 運氣不好。每當(dāng) A 嘗試發(fā)送報文時,它都會失?。o論什么原因)。每次發(fā)生這種情況,它將其發(fā)送錯誤計數(shù)器增加 8 并發(fā)送主動錯誤標(biāo)志。然后它將嘗試重傳報文,但是一直失敗。

當(dāng)傳送錯誤計數(shù)器超過 127 時(也就是在 16 次嘗試之后),節(jié)點 A 進入被動錯誤模式。不同之處在于它現(xiàn)在將在總線上傳輸被動錯誤標(biāo)志。被動錯誤標(biāo)志包含 6 個隱性位,不會破壞其它總線通信,所以其它節(jié)點不會偵聽到有關(guān)總線錯誤的反饋。但是,A 繼續(xù)增加其發(fā)送錯誤計數(shù)器。當(dāng)它升高到 255 以上時,節(jié)點 A 最終放棄傳送并進入總線關(guān)閉模式。

其它節(jié)點怎樣響應(yīng)節(jié)點 A?對于 A 傳送的每個主動錯誤標(biāo)志,其它節(jié)點將其自身接收錯誤計數(shù)器增加 1。當(dāng) A 進入總線關(guān)閉時,其他節(jié)點的接收錯誤計數(shù)器的計數(shù)遠低于錯誤被動極限值 127。

每次正確收到一條報文,這個計數(shù)將減 1。但是,節(jié)點 A 將停留在總線關(guān)閉模式。

大部分 CAN 控制器將為兩種狀態(tài)提供狀態(tài)位(和相應(yīng)的中斷):

??“錯誤警告” – 一個或兩個錯誤計數(shù)器的計數(shù)超過 96

??“總線關(guān)閉”,如上所述。

部分是這樣,但不是所有!控制器還為被動錯誤狀態(tài)提供了一個位。一些控制器還可以直接訪問錯誤計數(shù)器。

CAN 控制器在發(fā)生錯誤時自動重傳報文的特性有時候會很煩人。市場上至少有一種控制器(飛利浦公司生產(chǎn)的 SJA1000)允許對錯誤處理完全人工控制。

4.?總線故障模式

ISO11898 標(biāo)準(zhǔn)列出了 CAN 總線電纜的幾種故障模式:

??CAN_H 中斷

??CAN_L 中斷

??CAN_H 短路到電池電壓

??CAN_L 短路到接地

??CAN_H 短路到接地

??CAN_L 短路到電池電壓

??CAN_L 短路到 CAN_H 線路

??CAN_H 和 CAN_L 在同一個位置中斷

??丟失到終端網(wǎng)絡(luò)的連接

對于故障 1-6 和 9,建議減小 S/N 比率保持總線繼續(xù)工作。對于故障 8,建議保持產(chǎn)生的子系統(tǒng)繼續(xù)工作。對于故障 7,可以選擇減小 S/N 比率繼續(xù)工作。

實踐中,使用 82C250 類型收發(fā)器的 CAN 系統(tǒng)無法在發(fā)生故障 1-7 時繼續(xù)工作,在發(fā)生故障 8-9時可能無法繼續(xù)工作。

但是,存在諸如 TJA1053 等有容錯能力的驅(qū)動程序可以處理所有故障。通常,獲得這種容錯能力的代價是最大速度受到限制。對于 TJA1053,最大速度是 125kbps。

CAN 標(biāo)準(zhǔn)在基本級定義硬件(“物理層” - 有幾種)和通信(“數(shù)據(jù)鏈路層”)。CAN 協(xié)議本身只是規(guī)定如何使用共享通信介質(zhì)將小數(shù)據(jù)包從 A 點傳輸?shù)?B 點。它不包含流量控制,數(shù)據(jù)傳輸大于可容納 8 字節(jié)的報文,節(jié)點地址,通信建立等。

為了管理系統(tǒng)內(nèi)的通信,需要更高層協(xié)議(HLP)。術(shù)語 HLP 來源于 OSI 模型及其七個層次。HLP通常規(guī)定如下:

??啟動行為

??如何在系統(tǒng)內(nèi)不同的節(jié)點中分發(fā)報文標(biāo)識符

??如何編譯數(shù)據(jù)幀的內(nèi)容

??系統(tǒng)內(nèi)的狀態(tài)報告

1.?不同的高層協(xié)議

CAN 總線有很多(幾十種)高層協(xié)議。最常見的如下:

??CanKingdom

??CANopen

??CCP/XCP

??DeviceNet

??MilCAN

??NMEA 2000?

??OSEK/VDX

??SDS

??J1939:?簡介和標(biāo)準(zhǔn)概述

2.?其他相關(guān)協(xié)議和標(biāo)準(zhǔn)

和 CAN 關(guān)系密切的協(xié)議和標(biāo)準(zhǔn)非常多。下面列出了幾種:

??LIN 總線

??J1587?

??J1708?

??J2534?

??RP1210A, RP1210 B


K課堂 | CAN總線基礎(chǔ)知識匯總, 一文搞懂! (下篇)的評論 (共 條)

分享到微博請遵守國家法律
洮南市| 常山县| 久治县| 高雄县| 余干县| 安龙县| 岳普湖县| 孟州市| 安陆市| 府谷县| 壤塘县| 德昌县| 东阿县| 金湖县| 黄大仙区| 论坛| 崇左市| 灵璧县| 元朗区| 迁安市| 荥经县| 辉南县| 山阳县| 临朐县| 乌恰县| 江孜县| 齐河县| 诸暨市| 余庆县| 新昌县| 泸州市| 页游| 静海县| 内黄县| 临沧市| 石家庄市| 汉川市| 禹城市| 武平县| 珠海市| 绥德县|