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