CAN協議是通過以下5種類型的幀進行的:
數據幀:用於發送單元想接收單元傳送數據的幀
遠程幀:用於接收到單元向具有相同ID的發送的單元請求數據的幀。
錯誤幀:用於當檢測出錯誤時想其他單元通知錯誤的幀
過載幀:用於接收單元通知其他尚未做好准備的幀
間隔幀:用於將數據幀和遙控幀與前面的幀分離開來的幀。
CAN協議支持兩種報文格式,其唯一的不同是標識符長度不同,標准格式為11位,擴展格式為29位。數據幀和遙控幀包含這兩種格式。
數據幀一般有7個段構成:
幀起始——表示數據幀開始的段
仲裁段——表示該幀優先級的段,由遠程傳輸請求位(RTR)組成,RTR標明是數據幀還是請求幀,請求幀沒有數據字節;
控制段——表示數據的字節數及保留位的段,包含標識符擴展位(IDE),指出是標准格式還是擴展格式。還包括一個保留位(用於將來擴展)。最后四個位用來指明數據場中的數據的長度(DLC)
數據段——數據的內容,一個幀可以發送0—8個字節的數據
CRC段——檢查幀的傳輸錯誤的段、
ACK段——確認可以正常接收的段,包括應答位和應答分隔符。均為隱形電平(邏輯1)
幀結束——表示數據幀結束的段。
如下圖,是數據幀的構成:
標准格式的數據段:識別符(ID)的長度 為11位,這些為按ID28到ID18的順序發送,最低位是ID18, 7個最高位(ID28-ID22)不能全是隱形;
擴展格式的數據段:標識符長度為29位,是在標准標識符的基礎上增加18位擴展符,可以分為11位的基本ID和18位的擴展ID,基本ID按ID28—ID18的順序發送,基本ID定義擴展幀的基本優先權。
擴展ID包含18位,按照ID17—ID0順序發送。
RTR位:在標准幀里識別符后面是RTR位,其在數據幀里必須全是顯性,在請求幀里必須全是隱性。
SRR位(擴展格式):替代遠程請求位(substitute remote request bit),是一個隱性位,帶替擴展格式中標准幀的RTR位的位置,因此在標准幀與擴展幀沖突時,通過標准幀優先於擴展幀這一途徑解決。
IDE 位(擴展格式)
IDE 的全稱是“識別符擴展位(Identifier Extension Bit)”
IDE 位屬於:
擴展格式的仲裁場 , 為“隱性”
標准格式的控制場 ,為“顯性”
控制場(標准格式以及擴展格式)
控制場由 6 個位組成。標准格式的控制場格式和擴展格式的不同。標准格式里的幀包括數據長度代碼、IDE 位(為顯性位,見上文) 、及保留位 r0。擴展格式里的幀包括數據長度代碼和兩個保留位:r1 和 r0。其保留位必須發送為顯性,但是接收器認可“顯性”和“隱性”位的組合。
https://blog.csdn.net/anew_moon/article/details/85621123