詳解基于CAN總線的汽車儀表系統(tǒng)設計―CAN報文傳輸機制
CAN報文傳送
本文引用地址:http://butianyuan.cn/article/201808/386767.htm當CAN總線上的一個節(jié)點(站)發(fā)送數(shù)據(jù)時,它以報文形式廣播給網(wǎng)絡中所有節(jié)點。對每個節(jié)點來說,無論數(shù)據(jù)是否是發(fā)給自己的,都對其進行接收。每組報文開頭的n位字符為標識符(擴展幀格式為29位),定義了報文的優(yōu)先級。在同一系統(tǒng)中,標識符是唯一的,不可能有兩個站發(fā)送具有相同標識符的報文 1241。當幾個站同時競爭總線讀取時,這種配置十分重要。當一個站要向其他站發(fā)送數(shù)據(jù)時,該站的CPU將要發(fā)送的數(shù)據(jù)和自己的標識符傳送給本站的CAN 芯片,并處于準備狀態(tài);當他收到總線分配時,轉(zhuǎn)為發(fā)送報文狀態(tài)。CAN芯片將數(shù)據(jù)根據(jù)協(xié)議組織成一定的報文格式發(fā)出,這時網(wǎng)上的其他站處于接收狀態(tài)。每個處于接收狀態(tài)的站對接收到的報文進行檢測,判斷這些報文是否是發(fā)給自己的,以確定是否接收處理它。CAN總線以報文為單位進行數(shù)據(jù)傳送,報文的優(yōu)先級結(jié)合在標識符(n位或29位)中,具有最低二進制數(shù)的標識符有最高的優(yōu)先級??偩€讀取中的沖突可通過位仲裁解決。當幾個站同時發(fā)送報文時,發(fā)送優(yōu)先級最高的報文的站將獲得總線控制權(quán)。這種非破壞性位仲裁方法的優(yōu)點在于,在網(wǎng)絡最終確定哪一個站的報文被傳送以前,報文的起始部分己經(jīng)在網(wǎng)絡上傳送了。所有未獲得總線讀取權(quán)的站都成為具有最高優(yōu)先權(quán)報文的接收站,并且不會在總線再次空閑前發(fā)送報文。
在進行數(shù)據(jù)傳送時,發(fā)出報文的單元稱為該報文的發(fā)送器。該單元在總線空閑或丟失仲裁前恒為發(fā)送器。如果一個單元不是報文發(fā)送器,并且總線不處于空閑狀態(tài),則該單元為接收器。對于報文發(fā)送器和接收器,報文的實際有效時刻是不相同的。對于發(fā)送器而一言,如果直到幀結(jié)束末尾一直未出錯,則對于發(fā)送器報文是有效的,o如果報文受損,將允許按照優(yōu)先權(quán)順序自動重發(fā)送。為了能同其他報文進行總線訪問競爭,總線一旦空閑,重發(fā)送立即開始。對于接收器而言,如果知道幀結(jié)束的最后一位一直未出錯,則對于接收器的報文是有效的。構(gòu)成一幀的幀起始、總裁場、控制場、數(shù)據(jù)場CRC序列均借助位填充規(guī)則進行編碼。當發(fā)送器在發(fā)送的位流中檢測到5位連續(xù)的相同數(shù)值時,將自動地在實際發(fā)送位流中插入一個補碼位。數(shù)據(jù)幀和遠程幀的其余位場采用固定格式,不進行填充。出錯幀和超載幀同樣是固定格式,也不進行位填充。報文中的位流按照非歸零(NRz)碼方法編碼,這意味著一個完整位的位電平要么是“0”要么是“1”。報文傳送由4種不同類型的幀表示和控制:數(shù)據(jù)幀攜帶數(shù)據(jù)由發(fā)送器送至接收器;遠程幀通過總線單元發(fā)送,以請求發(fā)送具有相同標識符的數(shù)據(jù)幀;出錯幀由檢測出總線錯誤的任何單元發(fā)出;超載幀用于提供當前的和后續(xù)的數(shù)據(jù)幀的附加時間延遲。
2.2.6CAN的幀結(jié)構(gòu)
CAN2.OB建立了兩種不同的幀格式(適用于數(shù)據(jù)幀和遠程幀):一種是具有n位標識符的 Bas1cCAN(標準幀格式),另一種是具有29位標識符的 PeliCAN。
報文傳輸有以下4種不同類型的幀:
數(shù)據(jù)幀 (dataframe):數(shù)據(jù)幀將數(shù)據(jù)從發(fā)送器傳輸?shù)浇邮掌?
遠程幀 (remoteframe):總線單元發(fā)出遠程幀,請求發(fā)送具有同一標識符的數(shù)據(jù)幀;
錯誤幀 (errorframe):任何單元檢測到總線錯誤就發(fā)出錯誤幀;
過載幀 (overioadframe):過載幀用在相鄰數(shù)據(jù)幀或遠程幀之間提供附加的延時。
1.數(shù)據(jù)幀
數(shù)據(jù)幀由7個不同的位場組成:即幀起始、仲裁場、控制場、數(shù)據(jù)場、CRC
場、應答場、幀結(jié)束。結(jié)構(gòu)如圖2一4所示
標準幀格式與擴展幀格式中仲裁和控制域結(jié)構(gòu)不同,其結(jié)構(gòu)分別如下:
圖2一5標準格式的幀結(jié)構(gòu)
圖2一6擴展格式的幀結(jié)構(gòu)
(1)幀起始 (sOF)標志數(shù)據(jù)幀和遠程幀的起始,它僅由一個“1”構(gòu)成。只有在總線處于空閑狀態(tài)時,才允許節(jié)點開始發(fā)送。所有節(jié)點都必須同步于首先開始發(fā)送的那個節(jié)點的幀起始前沿。
(2)仲裁場由標識一符和遠程發(fā)送請求位(RTR)組成。仲裁場如圖2一7所示:
標識符:標識符的長度為11位,這些位以從高位到低位的順序發(fā)送,發(fā)送位為ID.0,其中最高7位(ID.10一ID.4)不能全為“1”。RTR位為“O”代表是數(shù)據(jù)幀,為“1”代表遠程幀。為“0”還是為“1”是由用戶填寫的。
(3)控制場由6位組成,如下圖2一8所示:
(4)數(shù)據(jù)場由數(shù)據(jù)幀中被發(fā)送的數(shù)據(jù)組成,它包括O一8個字節(jié),每個字節(jié)8位。首先發(fā)送的是最高有效位。
(5)CRC場包括CRC序列,后隨CRC界定符,CRC場結(jié)構(gòu)如下圖2一9所示
(6)應答場(AC均為兩位,包括應答間隙和應答界定符,結(jié)構(gòu)如下圖2一10
(7)幀結(jié)束:每個數(shù)據(jù)幀和遠程幀均由“1111111”7個隱性位組成的標志序列界定
2.遠程幀
需要獲得數(shù)據(jù)的節(jié)點可以借助于發(fā)送一個遠程幀來請求對應的節(jié)點發(fā)送數(shù)據(jù)給它。遠程幀同樣存在標準的和擴展的兩種格式。在兩種格式下,均由6個不同的位場組成:幀起始、仲裁場、控制場、CRC場、應答場和幀結(jié)束。同數(shù)據(jù)幀相比較,不同的是:遠程幀的RTR位是“1”(這須由用戶用程序填充)。遠程幀不存在數(shù)據(jù)場。DLC的數(shù)據(jù)值是獨立的,它可以是0一8中的任何數(shù)值。遠程幀的組成如下圖2一11所示:
評論