0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

CAN報文為什么會發(fā)送失敗?

ZLG致遠電子 ? 2024-04-12 08:25 ? 次閱讀

CAN總線調(diào)試過程中出現(xiàn)報文發(fā)送失敗。很多工程師都對此只知其一不知其二,今天我們就以CAN報文發(fā)送失敗的問題來做一次探討。

在了解CAN報文為什么會發(fā)送失敗之前我們先看看一幀標(biāo)準(zhǔn)的CAN報文到底應(yīng)該是怎么樣的。表1是一幀正常標(biāo)準(zhǔn)數(shù)據(jù)幀的報文組成。
表1 標(biāo)準(zhǔn)數(shù)據(jù)幀報文格式組成24143244-f863-11ee-9118-92fbcf53809c.png

24197de4-f863-11ee-9118-92fbcf53809c.jpg

圖1 標(biāo)準(zhǔn)數(shù)據(jù)幀格式CAN總線是一種基于廣播的通訊方式,為了保證總線上的每一個正常節(jié)點都能正確的接收到報文,報文的發(fā)送者要求至少一個接收節(jié)點在報文發(fā)送結(jié)束前要作出應(yīng)答,這也是報文里ACK存在的原因。

一幀CAN報文中ACK段長度為2個位,包含應(yīng)答間隙(ACK Slot)和應(yīng)答界定符(ACK Delimter)。在應(yīng)答場里,發(fā)送器發(fā)送兩個隱性位。當(dāng)接收器正確地接收到有效的報文,接收器就會在應(yīng)答間隙(ACK Slot)期間(發(fā)送ACK信號)向發(fā)送器發(fā)送一“顯性”的位以示應(yīng)答。

應(yīng)答間隙:所有接收到匹配CRC序列(CRC SEQUENCE)的站會在應(yīng)答間隙(ACK Slot)期間用一顯性的位寫入發(fā)送器的隱性位來作出回答。

應(yīng)答界定符:ACK界定符是ACK場的第二個位,并且是一個必須為隱性的位。因此,應(yīng)答間隙(ACK Slot)被兩個隱性的位所包圍,也就是CRC界定符(CRC Delimter)和ACK界定符(ACK Delimter)。

241d1c2e-f863-11ee-9118-92fbcf53809c.png

圖2 正常ACK段報文

而如果總線上沒有ACK應(yīng)答(即應(yīng)答間隙為隱性),發(fā)送器就會發(fā)送一個錯誤標(biāo)志,并且發(fā)送錯誤計數(shù)器值加8,節(jié)點就會對報文進行自動重發(fā),若自動重發(fā)依然收不到ACK,則在發(fā)送錯誤計數(shù)器計數(shù)滿128后(即出現(xiàn)16幀錯誤幀),由錯誤主動轉(zhuǎn)為錯誤被動狀態(tài),如圖3所示。那導(dǎo)致ACK段出錯的原因有哪些呢?下面小編總結(jié)了一些。

  • 總線上只有一個有效節(jié)點:發(fā)送報文的節(jié)點在發(fā)送出一幀報文后會檢測總線上應(yīng)答間隙的狀態(tài),如果檢測到應(yīng)答間隙為隱性位,則表示該幀報文沒有得到ACK,發(fā)送失敗,需要重發(fā),而由于發(fā)送錯誤計數(shù)器會在發(fā)送失敗后累加,直到該節(jié)點關(guān)閉。所以,當(dāng)總線上只有一個有效節(jié)點時,這個節(jié)點是發(fā)不出去數(shù)據(jù)的,因為它所發(fā)出的數(shù)據(jù)幀中的ACK Slot沒有另外一個節(jié)點來填充,將永遠是隱性位,這個節(jié)點會一直重發(fā)數(shù)據(jù)直到發(fā)送成功或發(fā)送被取消。
  • 波特率不匹配或者節(jié)點沒有初始化,導(dǎo)致沒有ACK;
  • 總線線纜短路,斷路,接反;
  • 高速CAN總線上接的節(jié)點不是高速CAN,而是容錯低速CAN,導(dǎo)致不匹配。

24205d76-f863-11ee-9118-92fbcf53809c.jpg

圖3 應(yīng)答界定符錯誤幀242459c6-f863-11ee-9118-92fbcf53809c.png

圖4 沒有ACK的報文

當(dāng)你在調(diào)試CAN總線時出現(xiàn)節(jié)點發(fā)送報文失敗的情況時,一定要檢查是不是以上幾點疏漏導(dǎo)致你的總線上ACK異常。而借助恰當(dāng)?shù)膬x器,可以在查找CAN總線錯誤時事半功倍。圖4即采用致遠電子的CANScope來對錯誤幀進行標(biāo)記,同時找到錯誤幀對應(yīng)的波形來查找出錯誤情況。CANScope還可以對CAN總線物理層、數(shù)據(jù)鏈路層、應(yīng)用層做一系列的測試,為CAN工程師解決測試難題。

243449d0-f863-11ee-9118-92fbcf53809c.jpg

圖5 CANScope測試項目

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • CAN總線
    +關(guān)注

    關(guān)注

    145

    文章

    1898

    瀏覽量

    130333
  • 數(shù)據(jù)幀
    +關(guān)注

    關(guān)注

    0

    文章

    41

    瀏覽量

    6695
  • can報文
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    2303
收藏 人收藏

    評論

    相關(guān)推薦

    CAN總線的報文類型介紹

    CAN(Controller Area Network)總線是一種廣泛使用的串行通信協(xié)議,特別適用于汽車和工業(yè)自動化領(lǐng)域。CAN總線上的報文類型主要可以分為以下幾種,每種類型都有其特定的用途和格式。
    的頭像 發(fā)表于 09-03 14:20 ?266次閱讀

    如何在CANtest上通過報文發(fā)送實現(xiàn)CCP指令的發(fā)送

    如題,我在CANtest上通過CAN報文發(fā)送了CCP指令\'CONNECT\'、\'SET-MTA\'和‘Upload’。前兩個指令的返回均沒有報錯,可\'Upload\'的返回直接
    發(fā)表于 08-13 10:46

    基于VB6.0 實現(xiàn) CAN信號收發(fā) Demo

    、VB6.0、libTSCAN1關(guān)于Demo工程簡要描述:VB6.0編程語言調(diào)用libTSCAN接口實現(xiàn)硬件掃描、連接、CAN報文單幀發(fā)送、周期發(fā)送、
    的頭像 發(fā)表于 07-27 08:21 ?507次閱讀
    基于VB6.0 實現(xiàn) <b class='flag-5'>CAN</b>信號收發(fā) Demo

    CYT2BL和SDL v8.0.0是否有可能實現(xiàn)以相同ID發(fā)送和接收CAN報文(RxID、TxID)的功能?

    我使用的是 CYT2BL 和 SDL v8.0.0。 我想發(fā)送和接收具有相同 ID 的 CAN 報文。 1.是否有可能實現(xiàn)以相同 ID 發(fā)送和接收
    發(fā)表于 07-23 06:12

    TC3XX can發(fā)送報文,周期上下波動嚴重怎么解決?

    使用FULL CAN發(fā)送,周期調(diào)用Can_17_McmCan_lWriteMsgObj發(fā)送報文,查看周期是穩(wěn)定的,但到發(fā)出來和中斷觸發(fā)的時間會上下波動,而且波動越來越大。
    發(fā)表于 07-11 08:00

    試圖從CAN卡向TC375發(fā)送報文時,TC375始終收不到,為什么?

    我試圖在TC375上進行CAN收發(fā)測試,測試目的是完成TC375和CAN卡的通訊,現(xiàn)在我已經(jīng)成功地將CAN報文從TC375發(fā)送到了
    發(fā)表于 07-04 06:04

    如何通過CAN報文TC375傳輸數(shù)據(jù)?

    從示例 MCMCAN_1_KIT_TC375_LK 和 ADC_Single_Channel_1_TC375_LK 開始,我必須用 CAN 報文發(fā)送從模擬通道獲取的數(shù)值。 我就是這么做的: void
    發(fā)表于 05-28 08:30

    TC387從App跳回PBL在下載SBL,進入SBL后上位機發(fā)送CAN報文響應(yīng)超時,怎么解決?

    你好,我目前實現(xiàn)了 PBL SBL 但目前的問題是:將SBL下載到RAM區(qū)域后,通過SBL下載App正常;但從App跳回PBL在下載SBL,進入SBL后上位機發(fā)送CAN 報文響應(yīng)超時。我在SBL中
    發(fā)表于 05-24 08:12

    CAN報文格式和發(fā)送總流程

    在標(biāo)準(zhǔn)格式中,報文的起始位稱為幀起始(SOF),然后是由11位標(biāo)識符和遠程發(fā)送請求位(RTR)組成的仲裁場。RTR位標(biāo)明是數(shù)據(jù)幀還是請求幀,在請求幀中沒有數(shù)據(jù)字節(jié)。
    發(fā)表于 04-11 10:07 ?6883次閱讀
    <b class='flag-5'>CAN</b>的<b class='flag-5'>報文</b>格式和<b class='flag-5'>發(fā)送</b>總流程

    TC387模塊CAN0的節(jié)點2作為CANA使用,CANA既收不到報文也發(fā)不出報文如何解決?

    TC387模塊CAN0的節(jié)點2作為CANA使用,CAN1的節(jié)點0作為CANB使用,配置基本相同。但CANB的通信正常,而在TJA1145正常情形下,CANA既收不到報文,也發(fā)不出報文
    發(fā)表于 02-19 06:43

    MCU怎樣判斷CAN發(fā)送狀態(tài)?

    (); } 如此配置發(fā)現(xiàn)在一幀報文發(fā)送完了后,不能進入can發(fā)送中斷, 2、能有別的標(biāo)志位來判斷can
    發(fā)表于 02-18 08:33

    CAN FD在發(fā)送報文時會有發(fā)不出去的現(xiàn)象怎么解決?

    現(xiàn)象描述: 在發(fā)送多幀報文數(shù)據(jù)時,出現(xiàn)了較為嚴重的報文丟失現(xiàn)象。編寫測試程序,在for循環(huán)中循環(huán)發(fā)送id為0-7ff的報文,對返回值進行了判
    發(fā)表于 02-02 07:48

    TSMaster報文發(fā)送的信號生成器操作說明

    信號生成器功能是TSMaster分析中的報文發(fā)送模塊。信號生成器用于發(fā)送和配置每個CAN/LIN信號的值變化行為,簡而言之,這是一個可以控制和調(diào)整C
    的頭像 發(fā)表于 12-23 08:21 ?737次閱讀
    TSMaster<b class='flag-5'>報文</b><b class='flag-5'>發(fā)送</b>的信號生成器操作說明

    S32K144搭載S32K1XX_MCAL4_2_RTM_1_0_6以及S32DS編譯軟件使用CAN模塊無法發(fā)送報文怎么解決?

    下的MCAL422_EB_project,編譯環(huán)境使用的是S32 Design Studio for S32 Platform 3.4,主工程如附件文件夾下的MCAL422_S32DS_project。不知是否可以檢查我的項目哪里配置或使用不當(dāng)導(dǎo)致CAN報文
    發(fā)表于 11-13 08:29

    車載時鐘同步can_tsync同步原理

    master在t01時刻以廣播的形式發(fā)送一個sync報文,并把時間秒部分的時間放到報文上,發(fā)送到time slave;使用can conf
    的頭像 發(fā)表于 10-27 14:32 ?1954次閱讀
    車載時鐘同步<b class='flag-5'>can</b>_tsync同步原理