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