CAN總線上傳輸?shù)?a target="_blank">信息稱為報文,當總線空閑時任何連接的單元都可以開始發(fā)送新的報文。
CAN通信是通過以下5種類型的幀進行的:
數(shù)據(jù)幀
遙控幀
錯誤幀
過載幀
幀間隔
另外,數(shù)據(jù)幀和遙控幀有標準格式和擴展格式兩種格式。標準格式有 11 個位的標識符(Identifier: 以下簡稱 ID), 擴展格式有 29 個位的 ID。
各種幀的用途如下表所示:
數(shù)據(jù)幀由7個段構成,圖解說明如下所示:
幀起始:表示數(shù)據(jù)幀開始的段;
仲裁段:表示該幀優(yōu)先級的段,根據(jù)仲裁段ID碼長度的不同,分為標準幀(CAN 2.0A)和擴展幀(CAN 2.0B);
控制段:表示數(shù)據(jù)的字節(jié)數(shù)及保留位的段;
數(shù)據(jù)段:數(shù)據(jù)的內(nèi)容,可發(fā)送0~8個字節(jié)的數(shù)據(jù);
CRC段:檢查幀的傳輸錯誤的段;
ACK段:表示確認正常接收的段;
幀結(jié)束:表示數(shù)據(jù)幀結(jié)束的段。
1
數(shù)據(jù)幀
1.1、幀起始
幀起始由1個顯性位組成??偩€空閑時,發(fā)送節(jié)點發(fā)送幀起始,其他接收節(jié)點同步于該幀起始位。
總線上的電平有顯性電平和隱性電平兩種。
總線上執(zhí)行邏輯上的線“與”時,顯性電平的邏輯值為“0”,隱性電平為“1”。
“顯性”具有“優(yōu)先”的意味,只要有一個單元輸出顯性電平,總線上即為顯性電平。并且,“隱性”具有“包容”的意味,只有所有的單元都輸出隱性電平,總線上才為隱性電平。(顯性電平比隱性電平更強。)
1.2、仲裁段
仲裁段用于寫明需要發(fā)送到目的CAN節(jié)點的地址、確定發(fā)送的幀類型(當前發(fā)送的是數(shù)據(jù)幀還是遙控幀),并確定發(fā)送的幀格式是標準幀還是擴展幀。
仲裁段在標準格式幀和擴展格式幀中有所不同。標準格式幀的仲裁段由11位標識符和遠程發(fā)送請求位RTR組成,擴展格式幀的仲裁場由29位標識符和遠程發(fā)送請求位RTR組成。
1.2.1、標準數(shù)據(jù)幀
標準數(shù)據(jù)幀基于早期的CAN規(guī)格(1.0和2.0A版),使用了11位的識別域。
CAN標準幀幀信息是11字節(jié),包括幀描述符和幀數(shù)據(jù)兩部分。如下表所列:
前3字節(jié)為幀描述部分。字節(jié)1為幀信息,第7位(FF)表示幀格式,在標準幀中FF=0,第6位(RTR)表示幀的類型,RTR=0表示為數(shù)據(jù)幀,RTR=1表示為遠程幀。DLC表示在數(shù)據(jù)幀時實際的數(shù)據(jù)長度。
標準數(shù)據(jù)幀的 ID 有 11 個位。從 ID10到 ID0依次發(fā)送。禁止高 7 位都為隱性(禁止設定:ID=1111111XXXX)。
字節(jié)2~3為報文識別碼,其高11位有效。
字節(jié)4~11為數(shù)據(jù)幀的實際數(shù)據(jù),遠程幀時無效。
1.2.2、擴展數(shù)據(jù)幀
CAN擴展幀幀信息是13字節(jié),包括幀描述符和幀數(shù)據(jù)兩部分,如下表所示:
前5字節(jié)為幀描述部分。字節(jié)1為幀信息,第7位(FF)表示幀格式,在擴展幀中FF=1,第6位(RTR)表示幀的類型,RTR=0表示為數(shù)據(jù)幀,RTR=1表示為遠程幀。DLC表示在數(shù)據(jù)幀時實際的數(shù)據(jù)長度。
擴展格式的 ID 有 29 個位。基本 ID 從 ID28 到 ID18,擴展 ID 由 ID17 到 ID0 表示。基本 ID 和 標準格式的 ID 相同。禁止高 7 位都為隱性(禁止設定:基本 ID=1111111XXXX)。
字節(jié)2~5為報文識別碼,其高28位有效。
字節(jié)6~13為數(shù)據(jù)幀的實際數(shù)據(jù),遠程幀時無效。
1.3、控制段
控制段由6個位組成,包括數(shù)據(jù)長度代碼和兩個將來作為擴展用的保留位,標準格式和擴展格式的構成有所不同。
數(shù)據(jù)長度代碼指示了數(shù)據(jù)段中的字節(jié)數(shù)量。數(shù)據(jù)長度代碼為4個位,在控制段里被發(fā)送,數(shù)據(jù)幀長度允許的字節(jié)數(shù)為0、1、2、3、4、5、6、7、8,其他數(shù)值為非法的。
保留位(r0、r1)必須全部以顯性電平發(fā)送。但接收方可以接收顯性、隱性及其任意組合的電平。
數(shù)據(jù)長度碼(DLC)與數(shù)據(jù)的字節(jié)數(shù)的對應關系如下表所示:
數(shù)據(jù)的字節(jié)數(shù)必須為 0~8 字節(jié),但接收方對 DLC = 9~15 的情況并不視為錯誤。
1.4、數(shù)據(jù)段
數(shù)據(jù)段由數(shù)據(jù)幀中的發(fā)送數(shù)據(jù)組成,它可以為0~8字節(jié),每字節(jié)包含了8位,首先發(fā)送最高有效位MSB,依次發(fā)送至最低有效位LSB。
1.5、CRC段
CRC段是檢查幀傳輸錯誤的幀,包括:15 個位的 CRC序列(CRC SEQUENCE)和1 個位的CRC界定符(CRC DELIMITER)構成。
CRC序列是根據(jù)多項式生成的 CRC 值,CRC 的計算范圍包括:幀起始、仲裁段、控制段、數(shù)據(jù) 段。接收方以同樣的算法計算 CRC 值并進行比較,不一致時會通報錯誤。
1.6、ACK段
ACK段用來確認是否正常接收。由 ACK 槽(ACK SLOT)和 ACK 界定符(ACK DELIMITER)2 個位構成。
發(fā)送單元在 ACK 段發(fā)送 2 個位的隱性位。當接收器正確地接收到有效的報文時,接收器就會在應答間隙(ACK SLOT)期間(發(fā)送ACK 信號)向發(fā)送器發(fā)送一個“顯性”的位以示應答,通知發(fā)送單元正常接收結(jié)束,這稱作“發(fā)送 ACK”或者“返回 ACK”。
發(fā)送 ACK/返回 ACK是在既不處于總線關閉態(tài)也不處于休眠態(tài)的所有接收單元中,接收到正常消息的單元 (發(fā)送單元不發(fā)送 ACK)。所謂正常消息是指不含填充錯誤、格式錯誤、CRC 錯誤的消息。
1.7、幀結(jié)束
幀結(jié)束是由每一個數(shù)據(jù)幀和遠程幀的標志序列界定的,這個標志序列由7個“隱性”位組成。
2
標準數(shù)據(jù)幀和擴展數(shù)據(jù)幀
CAN協(xié)議可以接收和發(fā)送11位標準數(shù)據(jù)幀和29位擴展數(shù)據(jù)幀,CAN標準數(shù)據(jù)幀和擴展數(shù)據(jù)幀只是幀ID長度不同,以便可以擴展更多CAN節(jié)點。
2.1、標準數(shù)據(jù)幀
標準數(shù)據(jù)幀基于早期的CAN規(guī)格(1.0和2.0A版),使用了11位的識別域。
CAN標準幀幀信息是11字節(jié),包括幀描述符和幀數(shù)據(jù)兩部分。如下表所列:
前3字節(jié)為幀描述部分。字節(jié)1為幀信息,第7位(FF)表示幀格式,在標準幀中FF=0,第6位(RTR)表示幀的類型,RTR=0表示為數(shù)據(jù)幀,RTR=1表示為遠程幀。DLC表示在數(shù)據(jù)幀時實際的數(shù)據(jù)長度。
標準數(shù)據(jù)幀的 ID 有 11 個位。從 ID10 到 ID0 依次發(fā)送,可以出現(xiàn)2^11種報文,幀ID的范圍是:000-7FF,禁止高 7 位都為隱性(禁止設定:ID=1111111XXXX)。
字節(jié)2~3為報文識別碼,其高11位有效。
字節(jié)4~11為數(shù)據(jù)幀的實際數(shù)據(jù),遠程幀時無效。
2.2、擴展數(shù)據(jù)幀
CAN擴展幀幀信息是13字節(jié),包括幀描述符和幀數(shù)據(jù)兩部分,如下表所示:
前5字節(jié)為幀描述部分。字節(jié)1為幀信息,第7位(FF)表示幀格式,在擴展幀中FF=1,第6位(RTR)表示幀的類型,RTR=0表示為數(shù)據(jù)幀,RTR=1表示為遠程幀。DLC表示在數(shù)據(jù)幀時實際的數(shù)據(jù)長度。
擴展格式的 ID 有 29 個位,基本 ID 從 ID28 到 ID18,擴展 ID 由 ID17 到 ID0 表示,基本 ID 和 標準格式的 ID 相同,可以出現(xiàn)2^29種報文,且在數(shù)據(jù)鏈路上是有間隙的(對操作者透明),幀ID的范圍是0000 0000-1FFF FFFF,禁止高 7 位都為隱性(禁止設定:基本 ID=1111111XXXX)。
字節(jié)2~5為報文識別碼,其高28位有效。
字節(jié)6~13為數(shù)據(jù)幀的實際數(shù)據(jù),遠程幀時無效。
2.3、標準數(shù)據(jù)幀和擴展數(shù)據(jù)幀的特性
CAN標準數(shù)據(jù)幀和擴展數(shù)據(jù)幀只是幀ID長度不同,功能上都是相同的,它們有一個共同的特性:幀ID數(shù)值越小,優(yōu)先級越高。
3
遙控幀
3.1、遙控幀格式
遙控幀是接收單元向發(fā)送單元請求發(fā)送數(shù)據(jù)所用的幀,遙控幀由 6 個段組成,遙控幀沒有數(shù)據(jù)段。
遙控幀的構成如下所示:
幀起始(SOF):表示幀開始的段;
仲裁段:表示該幀優(yōu)先級的段??烧埱缶哂邢嗤?ID 的數(shù)據(jù)幀;
控制段:表示數(shù)據(jù)的字節(jié)數(shù)及保留位的段;
CRC 段:檢查幀的傳輸錯誤的段;
ACK 段:表示確認正常接收的段;
幀結(jié)束:表示遙控幀結(jié)束的段。
遙控幀格式如下圖所示:
3.2、數(shù)據(jù)幀和遙控幀的區(qū)別
數(shù)據(jù)幀和遙控幀主要有兩點區(qū)別:
遙控幀沒有數(shù)據(jù)幀的數(shù)據(jù)段;
遙控幀RTR位是隱性,RTR位的極性表示了所發(fā)送的幀是數(shù)據(jù)幀(RTR位“顯性”)還是遠程幀(RTR位“隱性”)。所以,沒有數(shù)據(jù)段的數(shù)據(jù)幀和遙控幀可通過 RTR 位區(qū)別開來。
4
錯誤幀
4.1、錯誤幀格式
錯誤幀由錯誤標志(Error Flag)和錯誤界定符(Error Delimiter)組成。
接收節(jié)點發(fā)現(xiàn)總線上的報文有錯誤時,將自動發(fā)出活動錯誤標志,它是6個連續(xù)的顯性位。其他節(jié)點檢測到活動錯誤標志后發(fā)送錯誤認可標志,它由6個連續(xù)的隱性位組成。由于各個接收節(jié)點發(fā)現(xiàn)錯誤的時間可能不同,所以總線上實際的錯誤標志可能由6~12個顯性位組成。
錯誤界定符由 8 個位的隱性位構成。當錯誤標志發(fā)生后,每一個CAN 節(jié)點監(jiān)視總線,直至檢測到一個顯性電平的跳變。此時表示所有的節(jié)點已經(jīng)完成了錯誤標志的發(fā)送,并開始發(fā)送8個隱性電平的界定符。
如下所示:
4.2、主動錯誤標志和被動錯誤標志
錯誤標志包括主動錯誤標志和被動錯誤標志兩種。
主動錯誤標志:處于主動錯誤狀態(tài)的單元檢測出錯誤時輸出的錯誤標志,6 個位的顯性位;
被動錯誤標志:處于被動錯誤狀態(tài)的單元檢測出錯誤時輸出的錯誤標志,6 個位的隱性位。
4.3、錯誤幀種類
錯誤幀共有 5 種,多種錯誤可能同時發(fā)生,種類如下所示:
位錯誤
填充錯誤
CRC 錯誤
格式錯誤
ACK 錯誤
錯誤的種類、錯誤的內(nèi)容、錯誤檢測幀和檢測單元如下表所示:
重點聊一聊位錯誤和格式錯誤。
位錯誤特性如下所示:
位錯誤由向總線上輸出數(shù)據(jù)幀、遙控幀、錯誤幀、過載幀的單元和輸出 ACK 的單元、輸出錯誤的單元來檢測;
在仲裁段輸出隱性電平,但檢測出顯性電平時,將被視為仲裁失利,而不是位錯誤;
在仲裁段作為填充位輸出隱性電平時,但檢測出顯性電平時,將不視為位錯誤,而是填充錯誤;
發(fā)送單元在 ACK 段輸出隱性電平,但檢測到顯性電平時,將被判斷為其它單元的 ACK 應答,而非位錯誤;
輸出被動錯誤標志(6 個位隱性位)但檢測出顯性電平時,將遵從錯誤標志的結(jié)束條件,等待檢測出連續(xù)相同 6 個位的值(顯性或隱性),并不視為位錯誤。
格式錯誤特性如下所示:
即使接收單元檢測出 EOF(7 個位的隱性位)的最后一位(第 8 個位)為顯性電平,也不視為格式錯誤;
即使接收單元檢測出數(shù)據(jù)長度碼(DLC)中 9~15 的值時,也不視為格式錯誤。
發(fā)送單元發(fā)送完錯誤幀后,將再次發(fā)送數(shù)據(jù)幀或遙控幀,錯誤標志輸出時序如下表所示:
5
過載幀
過載幀是用于接收單元通知其尚未完成接收準備的幀,過載幀由過載標志和過載界定符構成。
過載標志由6個位的顯性位組成,過載標志的構成與主動錯誤標志的構成相同。過載標志其形式破壞了間歇場的固定格式,結(jié)果使其他所有節(jié)點也檢測到了一個出錯狀態(tài),就都各自送出一個超載標志。
過載界定符由8個位的隱性位組成,過載界定符的構成與錯誤界定符的構成相同。過載標志發(fā)送完畢后,每個節(jié)點都對總線進行監(jiān)察,直到檢測到一個隱性位為止。此時,每個節(jié)點均已發(fā)送完各自的過載標志,接著所有節(jié)點還要同時開始發(fā)送7個隱性位,配齊長達8位的過載界定符。
過載幀的構成如下圖所示:
6
幀間隔
幀間隔是用于分隔數(shù)據(jù)幀和遙控幀的幀。數(shù)據(jù)幀和遙控幀可通過插入幀間隔將本幀與前面的任何幀(數(shù)據(jù)幀、遙控幀、錯誤幀、過載幀)分開,過載幀和錯誤幀前不能插入幀間隔。
幀間隔的構成如下圖所示:
幀間隔由間隔段、總線空閑段和延遲傳送段組成,具體說明如下所示:
間隔段:間歇由3個隱性位構成。在間歇期間,不允許任何節(jié)點發(fā)送數(shù)據(jù)幀或遠程幀。唯一可以執(zhí)行的操作是通報超載狀態(tài);
總線空閑段:總線空閑時間長短不限??偩€一經(jīng)確認處于空閑狀態(tài),則任何節(jié)點都可以訪問總線來傳送信息。因另一幀正在傳送而延期發(fā)送的幀是從間歇之后的第一位開始送出的。通過對總線進行檢測,出現(xiàn)在總線空閑期間的顯性位將被認為是幀起始;
延遲傳送段:處于錯誤認可狀態(tài)的節(jié)點完成其發(fā)送動作后,在被允許發(fā)送下一幀以前,它要在間歇之后送出8個隱性位。如果間歇期間執(zhí)行了(由另一個節(jié)點引起的)發(fā)送動作,此節(jié)點將會變成正被發(fā)送的幀的接收器。
審核編輯:劉清
-
CAN總線
+關注
關注
145文章
1952瀏覽量
130819 -
接收器
+關注
關注
14文章
2473瀏覽量
71952 -
ACK
+關注
關注
0文章
28瀏覽量
11155 -
CRC校驗
+關注
關注
0文章
84瀏覽量
15213
原文標題:一文搞懂CAN總線協(xié)議幀格式
文章出處:【微信號:美男子玩編程,微信公眾號:美男子玩編程】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論