一.CAN總線當(dāng)中幀的種類
CAN總線當(dāng)中通信是通過以下 5 種類型的幀進(jìn)行的。
? 數(shù)據(jù)幀
? 遙控幀
? 錯(cuò)誤幀
? 過載幀
? 幀間隔
數(shù)據(jù)幀和遙控幀有標(biāo)準(zhǔn)格式和擴(kuò)展格式兩種格式。標(biāo)準(zhǔn)格式有11個(gè)位的標(biāo)識(shí)符,擴(kuò)展格式有29個(gè)位的ID。
二.五種類型幀用途說明
幀類型 幀用途 數(shù)據(jù)幀 用于發(fā)送單元向接收單元傳送數(shù)據(jù)的幀 遙控幀 用于接收單元向具有相同ID的發(fā)送單元請(qǐng)求數(shù)據(jù)的幀 錯(cuò)誤幀 用于當(dāng)檢測(cè)出錯(cuò)誤時(shí)向其它單元通知錯(cuò)誤的幀 過載幀 用于接收單元通知其尚未做好接收準(zhǔn)備的幀 幀間隔 用于將數(shù)據(jù)幀及遙控幀與前面的幀分離開來的
三.數(shù)據(jù)幀的組成
數(shù)據(jù)幀是五種類型幀當(dāng)中最為常用的幀。它結(jié)構(gòu)上由7段組成:幀起始+仲裁段+控制段+數(shù)據(jù)段+CRC段+ACK段+幀結(jié)束
No 名稱 介紹 01 幀起始 表示幀的開始,由一個(gè)的顯性電平組成 02 仲裁段 表示幀的優(yōu)先級(jí), 由標(biāo)識(shí)符(ID)和傳送幀類型(RTR)組成 03 控制段 表示數(shù)據(jù)的字節(jié)數(shù),由6個(gè)bit構(gòu)成 04 數(shù)據(jù)段 可發(fā)送0~8 個(gè)字節(jié)的數(shù)據(jù) 05 CRC段 用于校驗(yàn)傳輸是否正確 06 ACK段 表示確認(rèn)是否正常接收 07 幀結(jié)束 由7個(gè)連續(xù)的隱形位組成
![]()
1)幀起始
表示數(shù)據(jù)幀開始的段
無論是標(biāo)準(zhǔn)數(shù)據(jù)幀還是擴(kuò)展數(shù)據(jù)幀都包含這兩個(gè)段。幀起始標(biāo)志著數(shù)據(jù)幀和遠(yuǎn)程幀的起始,由一個(gè)單獨(dú)的顯性位(邏輯0)組成。總線空閑時(shí),發(fā)送節(jié)點(diǎn)發(fā)送幀起始,其他接收節(jié)點(diǎn)同步于該幀起始位。(總線空閑時(shí)為隱性位,故幀起始以顯性位非常好識(shí)別)
2)仲裁段
表示該幀優(yōu)先級(jí)的段, 標(biāo)準(zhǔn)格式和擴(kuò)展格式在此的構(gòu)成有所不同。
標(biāo)準(zhǔn)格式的ID有11個(gè)位。從ID28到ID18被依次發(fā)送。禁止高7位都為隱性。(禁止設(shè)定:ID=1111111XXXX)
擴(kuò)展格式的ID有29個(gè)位。基本ID從ID28到ID18,擴(kuò)展ID由ID17到ID0表示。基本ID和標(biāo)準(zhǔn)格式的ID相同。禁止高7位都為隱性。(禁止設(shè)定:基本ID=1111111XXXX)
3)控制段
控制段共6位。
標(biāo)準(zhǔn)幀的控制段由擴(kuò)展幀標(biāo)志位IDE、保留位r0和數(shù)據(jù)長(zhǎng)度代碼DLC組成;
擴(kuò)展幀控制段則由r1、r0和DLC組成。
IDE:標(biāo)準(zhǔn)幀中該位位于控制段,為顯性0。擴(kuò)展幀中屬于仲裁段,為隱性1。
保留位(r0、r1) 保留位必須全部以顯性電平發(fā)送。但接收方可以接收顯性、隱性及其任意組合的電平
4)數(shù)據(jù)段
標(biāo)準(zhǔn)、擴(kuò)展格式相同) 數(shù)據(jù)段可包含 0~8 個(gè)字節(jié)的數(shù)據(jù)。從 MSB(最高位)開始輸出
5)CRC段
為了保證報(bào)文的正確傳輸,CAN的報(bào)文包含了一段15位的CRC校驗(yàn)碼,一旦接收節(jié)點(diǎn)算出的CRC碼跟接收到的CRC碼不同,則它會(huì)向發(fā)送節(jié)點(diǎn)反饋出錯(cuò)信息,利用錯(cuò)誤幀請(qǐng)求它重新發(fā)送。CRC部分的計(jì)算一般由CAN控制器硬件完成.
CRC界定符恒為隱性1。
6)ACK段
用來確認(rèn)是否正常接收。由ACK槽(ACK Slot)和ACK界定符2個(gè)位構(gòu)成。
應(yīng)答槽:
發(fā)送節(jié)點(diǎn):發(fā)送隱性電平1
接受成功的節(jié)點(diǎn):發(fā)送顯性電平0
總線電平與與節(jié)點(diǎn)的發(fā)送結(jié)果對(duì)比:顯性發(fā)送成功,隱性發(fā)送失敗。
應(yīng)答標(biāo)識(shí):一個(gè)隱性電平1
7)幀結(jié)束
表示該幀的結(jié)束的段,由7個(gè)連續(xù)的隱形位(1111111)組成
四.遙控幀的組成
幀起始+仲裁段+控制段+ CRC段+ACK段+幀結(jié)束。和數(shù)據(jù)幀相對(duì)比,遠(yuǎn)程幀是沒有數(shù)據(jù)段的。
比較內(nèi)容 數(shù)據(jù)幀 遠(yuǎn)程幀 ID 發(fā)送節(jié)點(diǎn)的ID 被請(qǐng)求發(fā)送節(jié)點(diǎn)的ID SRR 顯性電平 隱性電平 RTR 顯性電平 隱性電平 DLC 發(fā)送的數(shù)據(jù)長(zhǎng)度 接收的數(shù)據(jù)長(zhǎng)度 是否有數(shù)據(jù)段 有 沒有 CRC校驗(yàn)范圍 起始幀+仲裁段+控制段+數(shù)據(jù)段 起始幀+仲裁段+控制段
RTR 遠(yuǎn)程發(fā)送請(qǐng)求位
SRR 代替遠(yuǎn)程請(qǐng)求位
DLC 數(shù)據(jù)長(zhǎng)度位
CRC 校驗(yàn)位
五.錯(cuò)誤幀的組成
用于在接收和發(fā)送消息時(shí)檢測(cè)出錯(cuò)誤通知錯(cuò)誤的幀,錯(cuò)誤幀由錯(cuò)誤標(biāo)志和錯(cuò)誤界定符構(gòu)成,其中錯(cuò)誤界定符由 8 個(gè)位的隱性位構(gòu)成。
1)主動(dòng)錯(cuò)誤狀態(tài)
可以正常參加總線通信的狀態(tài),處于主動(dòng)錯(cuò)誤狀態(tài)的單元檢測(cè)出錯(cuò)誤時(shí),輸出主動(dòng)錯(cuò)誤標(biāo)志。
2)被動(dòng)錯(cuò)誤狀態(tài)
是易引起錯(cuò)誤的狀態(tài)。處于被動(dòng)錯(cuò)誤狀態(tài)的單元雖能參加總線通信,但為不妨礙其他單元通信,接收時(shí)不能積極地發(fā)送錯(cuò)誤通知;處于被動(dòng)錯(cuò)誤狀態(tài)的單元即使檢測(cè)出錯(cuò)誤,而其它處于主動(dòng)錯(cuò)誤狀態(tài)的單元如果沒發(fā)現(xiàn)錯(cuò)誤,整個(gè)總線也被認(rèn)為是沒有錯(cuò)誤的。處于被動(dòng)錯(cuò)誤狀態(tài)的單元檢測(cè)出錯(cuò)誤時(shí),輸出被動(dòng)錯(cuò)誤標(biāo)志。另外,處于被動(dòng)錯(cuò)誤狀態(tài)的單元在不能馬上再次開始發(fā)送。在開始下次發(fā)送前,在間隔幀期間內(nèi)必須插入“延遲傳送”(8個(gè)位的隱性位)。
3)總線關(guān)閉態(tài)
總線關(guān)閉態(tài)是不能參加總線上通信的狀態(tài)。信息的接收和發(fā)送均被禁止。這些狀態(tài)依靠發(fā)送錯(cuò)誤計(jì)數(shù)和接收錯(cuò)誤計(jì)數(shù)來管理,根據(jù)計(jì)數(shù)值決定進(jìn)入何種狀態(tài)。
處于總線關(guān)閉態(tài)的單元,檢測(cè)到128次連續(xù)11個(gè)位的隱性位的時(shí)候,發(fā)送錯(cuò)誤計(jì)時(shí)器和接收錯(cuò)誤計(jì)時(shí)器都將置為0。
![]()
單元錯(cuò)誤狀態(tài) 發(fā)送錯(cuò)誤計(jì)數(shù)值(TEC) 接收錯(cuò)誤計(jì)數(shù)值(REC) 主動(dòng)錯(cuò)誤狀態(tài) 0~127 且 0~127 被動(dòng)錯(cuò)誤狀態(tài) 128~255 或 128~255 總線關(guān)閉態(tài) 256~ ? 256~ ?
4)CAN-Bus錯(cuò)誤類型
1.CRC錯(cuò)誤
發(fā)送節(jié)點(diǎn)計(jì)算得到的CRC值與接收到的CRC值不同時(shí)發(fā)送該錯(cuò)誤
2.格式錯(cuò)誤
傳輸?shù)臄?shù)據(jù)幀格式與任何一種合法的幀格式不符合時(shí)發(fā)生該錯(cuò)誤
3.應(yīng)答錯(cuò)誤
發(fā)送節(jié)點(diǎn)在ACK階段沒有接收到應(yīng)答信號(hào)時(shí)發(fā)生該錯(cuò)誤
4.位發(fā)送錯(cuò)誤
發(fā)送節(jié)點(diǎn)在發(fā)送時(shí)發(fā)現(xiàn)總線電平與發(fā)送電平不相同時(shí)發(fā)生該錯(cuò)誤
5.位填充錯(cuò)誤
通信線纜上傳輸信號(hào)違反位填充規(guī)則時(shí)發(fā)生該錯(cuò)誤
六.過載幀的組成
當(dāng)某個(gè)接收節(jié)點(diǎn)沒有做好接收下一幀數(shù)據(jù)的準(zhǔn)備時(shí),將發(fā)送過載幀以通知發(fā)送節(jié)點(diǎn);
1)過載幀的構(gòu)成
過載幀由過載標(biāo)志(6個(gè)位的顯性位)和過載界定符(8個(gè)位的隱性位)構(gòu)成。
過載界定符的構(gòu)成與錯(cuò)誤界定符的構(gòu)成相同,過載標(biāo)志的構(gòu)成與主動(dòng)錯(cuò)誤標(biāo)志的構(gòu)成也相同。
2)過載幀原理
對(duì)于過載幀的幀結(jié)構(gòu)我們可以這樣理解:接收節(jié)點(diǎn)達(dá)到接收極限時(shí),就會(huì)發(fā)出過載幀到總線上,顯然,過載標(biāo)志的6個(gè)連續(xù)顯性位會(huì)屏蔽掉總線上其它節(jié)點(diǎn)的發(fā)送,也就是說這個(gè)時(shí)候的接收節(jié)點(diǎn)通過發(fā)送過載幀的方式來破壞其它節(jié)點(diǎn)的發(fā)送,這樣在接收節(jié)點(diǎn)發(fā)送過載幀期間,
其它節(jié)點(diǎn)就不能成功發(fā)送報(bào)文,于是就相當(dāng)于把其它節(jié)點(diǎn)的發(fā)送推遲了,也就是說接收節(jié)點(diǎn)在其發(fā)送過載幀的這段時(shí)間得以“休息”。
3)有3種情況會(huì)引起過載幀
1.接收節(jié)點(diǎn)自身原因。接收節(jié)點(diǎn)由于某種原因需要延遲接收下一個(gè)數(shù)據(jù)幀或者遙控幀。
2.在幀間隔的間歇段的第一位和第二位檢測(cè)到一個(gè)顯性位(正常的間歇段都是隱性位)。幀間隔的間隔段本應(yīng)是三個(gè)連續(xù)的隱性位,如果接收節(jié)點(diǎn)在間隔段檢測(cè)到顯性位,那么就意味著此時(shí)有報(bào)文發(fā)向接收節(jié)點(diǎn),但這個(gè)時(shí)候是不應(yīng)該有報(bào)文發(fā)來的,于是接收節(jié)點(diǎn)發(fā)送過載幀。
3.CAN節(jié)點(diǎn)在錯(cuò)誤界定符或過載界定符的第八位(最后一位)聽到一個(gè)顯性位0,節(jié)點(diǎn)會(huì)發(fā)送一個(gè)過載幀,且錯(cuò)誤計(jì)數(shù)器不會(huì)增加。接收節(jié)點(diǎn)在錯(cuò)誤界定符和過載界定符的最后一位聽到顯性位,也意味著有報(bào)文發(fā)向接收節(jié)點(diǎn),但這個(gè)時(shí)候是不應(yīng)該有報(bào)文發(fā)來的,于是接收節(jié)點(diǎn)發(fā)送過載幀。
七.間隔幀的組成
幀間隔是用于分隔數(shù)據(jù)幀和遙控幀的幀。數(shù)據(jù)幀和遙控幀可通過插入幀間隔將本幀與前面的任何幀(數(shù)據(jù)幀、遙控幀、錯(cuò)誤幀、過載幀)分開。
過載幀和錯(cuò)誤幀前不能插入幀間隔。
來自汽車以太網(wǎng)技術(shù)研究實(shí)驗(yàn)室公眾號(hào)
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.