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

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

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

CAN 會(huì)收到錯(cuò)誤的數(shù)據(jù)嗎?

ZLG致遠(yuǎn)電子 ? 2024-04-04 08:24 ? 次閱讀

CAN-bus總線協(xié)議以高穩(wěn)定性,高容錯(cuò)率而著稱(chēng)于世,然而仍有很多用戶在使用的時(shí)候擔(dān)心CAN會(huì)接受到錯(cuò)誤的信息,在數(shù)據(jù)里增加了CRC校驗(yàn)的部分,這種做法是否有必要?CAN會(huì)收到錯(cuò)誤的數(shù)據(jù)嗎?信息的傳遞,古往今來(lái)都是人類(lèi)無(wú)比關(guān)注的一個(gè)問(wèn)題。從最原始的肢體語(yǔ)言到高端的電子信號(hào),信息傳達(dá)的方法五花八門(mén)。而對(duì)于信息安全的追求也是從古至今未有變過(guò),我國(guó)西周時(shí)期的《太公兵法》就有過(guò)“陰符”“陰書(shū)”的設(shè)計(jì)來(lái)保證信息的安全。

而在我們的工業(yè)生產(chǎn)中,為了保證信號(hào)的正確傳遞的方法更是五花八門(mén)。而在信息傳遞過(guò)程中采取CAN協(xié)議是一種常見(jiàn)的減少出錯(cuò)率的方案。那么,問(wèn)題來(lái)了,CAN協(xié)議何德何能能讓傳輸?shù)男盘?hào)不出錯(cuò)呢?今天就讓我們來(lái)深入分析一番。利用CANScope總線綜合分析儀來(lái)抓取一幀CAN的報(bào)文如下:

a3383908-f219-11ee-9118-92fbcf53809c.jpg圖2 CANScope總線綜合分析儀抓取的報(bào)文

圖中可以看出CAN協(xié)議采取了差分信號(hào)傳輸?shù)姆绞?,可以有效杜絕來(lái)自外部的屏蔽干擾。而在最后一行的協(xié)議解析部分,經(jīng)過(guò)觀察我們發(fā)現(xiàn)一幀信號(hào)被分割成了不同顏色的一段段,每一段究竟是何含義?保證信號(hào)正確傳輸?shù)拿孛芫碗[藏在這些段落里。讓我們來(lái)庖丁解牛分別為大家分析下。

  • 幀起啟:在數(shù)據(jù)的開(kāi)始,是一個(gè)1位的數(shù)據(jù)頭,表示數(shù)據(jù)幀都開(kāi)始

a3402f5a-f219-11ee-9118-92fbcf53809c.png

圖3 數(shù)據(jù)頭

  • 仲裁段:標(biāo)志了本幀數(shù)據(jù)的優(yōu)先級(jí),其中包含了一個(gè)ID碼,仲裁段中的ID碼值越小,幀數(shù)據(jù)的優(yōu)先級(jí)就越高,CAN控制器在發(fā)送數(shù)據(jù)的同時(shí)會(huì)監(jiān)聽(tīng)電纜上的電平狀態(tài),如果發(fā)現(xiàn)仲裁位的電平與本節(jié)點(diǎn)發(fā)出的電平不一致,則退出發(fā)送放棄總線使用權(quán)。這樣的設(shè)計(jì)可以提高總線的利用率,并且能讓重要的信息優(yōu)先發(fā)送。

a343cd04-f219-11ee-9118-92fbcf53809c.png

圖4 仲裁段

  • 控制段:共六位,用于表示數(shù)據(jù)長(zhǎng)度。在數(shù)據(jù)的控制段存有保留位以供未來(lái)協(xié)議規(guī)則擴(kuò)展。

a34776c0-f219-11ee-9118-92fbcf53809c.png

圖5 控制段

  • 數(shù)據(jù)段:經(jīng)過(guò)前面的鋪墊,數(shù)據(jù)段所編碼的即是本幀數(shù)據(jù)所需要傳達(dá)的信息。一幀信號(hào)可以傳送0~8位數(shù)據(jù),每字節(jié)8位。短小精悍保證信息的實(shí)時(shí)性。

a34ddd08-f219-11ee-9118-92fbcf53809c.png

圖6 數(shù)據(jù)段

  • CRC段:CRC段即是保證數(shù)據(jù)準(zhǔn)確的一個(gè)關(guān)鍵所在(敲黑板)。為防止信號(hào)由于某種原因被更改,CAN的數(shù)據(jù)鏈路層上加入了CRC校驗(yàn)。發(fā)送節(jié)點(diǎn)會(huì)根據(jù)發(fā)送內(nèi)容計(jì)算得到一個(gè)CRC值填入CRC段進(jìn)行發(fā)送,而相應(yīng)的接收節(jié)點(diǎn)也會(huì)對(duì)接收到的數(shù)據(jù)進(jìn)行計(jì)算,并將計(jì)算出的CRC值和接收到的進(jìn)行比對(duì)。能夠?qū)Φ蒙习堤?hào)的才是自己人,如果對(duì)照有誤那么就說(shuō)明傳輸?shù)男盘?hào)出現(xiàn)了問(wèn)題,需要反饋錯(cuò)誤消息。這樣的機(jī)制保證了CAN不會(huì)收到錯(cuò)誤的信息,其安全性毋庸置疑。

a351f32a-f219-11ee-9118-92fbcf53809c.png

圖7 CRC段

  • ACK段:用于表征信號(hào)是否被正確接收,接受正常的節(jié)點(diǎn)在ACK的第一位會(huì)發(fā)出一個(gè)顯性位。根據(jù)ACK的狀態(tài),發(fā)送節(jié)點(diǎn)就可以了解到數(shù)據(jù)是否被傳輸成功。若發(fā)送失敗,發(fā)送節(jié)點(diǎn)會(huì)根據(jù)自身狀態(tài)來(lái)決定是否重傳。

a35aad94-f219-11ee-9118-92fbcf53809c.png

圖8 ACK段

  • 幀結(jié)束:由7個(gè)隱性位組成,表示該幀結(jié)束。

a35ecbea-f219-11ee-9118-92fbcf53809c.png

圖9 幀結(jié)束經(jīng)過(guò)這樣一番抽絲剝繭的分析,CAN的報(bào)文結(jié)構(gòu)就這樣清晰的展現(xiàn)在我們面前。由于CRC段的存在,CAN出錯(cuò)的概率十分之小。CRC校驗(yàn)所使用的CRC多項(xiàng)式最多可以檢測(cè)出5個(gè)離散錯(cuò)誤,或發(fā)現(xiàn)長(zhǎng)度在15位以下偶然出現(xiàn)的突發(fā)錯(cuò)誤。CRC校驗(yàn)對(duì)SOF位、仲裁段、控制段和數(shù)據(jù)段的位序列進(jìn)行計(jì)算,但不考慮填充位。CAN協(xié)議中規(guī)定的15位校驗(yàn)序列源自于BCH代碼,它是一種特別適用于127位以下消息長(zhǎng)度的循環(huán)代碼。CAN協(xié)議中所應(yīng)用的15位多項(xiàng)式如下:

X15+X14+X10+X8+X7+X4+X3+1

在發(fā)送或接收收到數(shù)據(jù)場(chǎng)的最后一位后,CRC寄存器就會(huì)包含待傳輸或者待接收的CRC序列。將計(jì)算出的CRC序列與接收到的CRC序列相除,接收器就可以識(shí)別出可能存在的CRC錯(cuò)誤。

有些工程師擔(dān)心CAN收到錯(cuò)誤的信息,在數(shù)據(jù)中又做了CRC校驗(yàn)的工作,豈不知在數(shù)據(jù)鏈路層CAN已經(jīng)自備了CRC校驗(yàn)的工作,在數(shù)據(jù)中再加入CRC校驗(yàn)實(shí)際上是沒(méi)有什么必要的。

a3628190-f219-11ee-9118-92fbcf53809c.png

CAN總線不但規(guī)定了物理層的差分傳輸規(guī)范,還規(guī)定了數(shù)據(jù)鏈路層的分包校驗(yàn)規(guī)則,而這兩個(gè)都是由硬件自動(dòng)完成,接收時(shí),無(wú)需考慮是否有錯(cuò)誤,只要從緩沖區(qū)取出數(shù)據(jù)即可,CAN的CRC校驗(yàn)可以保證錯(cuò)誤率在10的-9次方以下。毫無(wú)疑問(wèn)是一種非常安全可靠的傳輸協(xié)議。

a366f6d0-f219-11ee-9118-92fbcf53809c.jpg

CAN總線在信號(hào)的實(shí)時(shí)傳輸方面具有非常好的優(yōu)越性,通過(guò)ZPS-CANFD總線分析儀可以很好的完成CAN總線的故障排查與檢測(cè)標(biāo)定。致遠(yuǎn)電子憑借自身掌握的核心技術(shù)可為用戶解決工業(yè)現(xiàn)場(chǎng)的各種疑難問(wèn)題,期待與您一同成長(zhǎng)。

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

    關(guān)注

    57

    文章

    2754

    瀏覽量

    463703
  • 工業(yè)
    +關(guān)注

    關(guān)注

    3

    文章

    1831

    瀏覽量

    46578
  • 電子信號(hào)
    +關(guān)注

    關(guān)注

    1

    文章

    38

    瀏覽量

    4469
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    使用Dave IDE將更新的固件配置刷新到XMC4700,會(huì)收到J-Link驅(qū)動(dòng)程序錯(cuò)誤怎么解決?

    ; 調(diào)試器即可刷新,但當(dāng)我按下調(diào)試\"(似乎是按下閃存的按鈕)時(shí),我還是會(huì)收到 J-Link 驅(qū)動(dòng)程序錯(cuò)誤。 你能幫我解決這個(gè)問(wèn)題嗎? 我的總體目標(biāo)是為Distance2Gol上的一條I2C線路配置一個(gè)地址,這樣我就可以從Arduino向它寫(xiě)入并最終從中接收
    發(fā)表于 01-23 07:54

    CAN報(bào)文中ACK應(yīng)答錯(cuò)誤的檢測(cè)原理

    上有一個(gè)節(jié)點(diǎn)正確接收到數(shù)據(jù),則ACK SLOT就會(huì)被填入顯性電平;那么,接收錯(cuò)誤的節(jié)點(diǎn)如何來(lái)告知發(fā)送者此次發(fā)送不成功呢?這時(shí)候就要用到CAN錯(cuò)誤
    發(fā)表于 07-02 05:22

    PSoC 5LP:CAN錯(cuò)誤管理

    CAN總線寫(xiě)入CAN總線。但他不會(huì)收到任何ACK或錯(cuò)誤(ACK錯(cuò)誤,位錯(cuò)誤)發(fā)生。所以他將重新
    發(fā)表于 12-13 14:40

    為什么進(jìn)行單片機(jī)之間的通訊時(shí)從機(jī)才會(huì)收到數(shù)據(jù)?

    進(jìn)行單片機(jī)之間的通訊時(shí),當(dāng)把主機(jī)電源拔下或者插上一剎那,從機(jī)才會(huì)收到數(shù)據(jù),而且兩者之間的導(dǎo)線是熱的,不知道是什么原因?
    發(fā)表于 07-11 03:39

    使用CH579作為從機(jī)向主機(jī)notify的時(shí)候,發(fā)送頻繁會(huì)收到pending錯(cuò)誤怎么解決?

    我在使用CH579作為從機(jī)向主機(jī)notify的時(shí)候,如果發(fā)送頻繁,經(jīng)常會(huì)收到pending錯(cuò)誤,如果在每包之間增加一個(gè)延時(shí),就可以解決,現(xiàn)在我希望提高點(diǎn)效率,有沒(méi)有什么方法可以知道這個(gè)notify的狀態(tài),當(dāng)前是否可以發(fā)送一類(lèi)的,或者有什么設(shè)置可以讓他不會(huì)因?yàn)榘l(fā)送頻繁導(dǎo)致出
    發(fā)表于 08-31 07:27

    如何保證CAN數(shù)據(jù)的正確性

    CANbus總線協(xié)議以高穩(wěn)定性,高容錯(cuò)率而著稱(chēng)于世,然而仍有很多用戶在使用的時(shí)候擔(dān)心CAN會(huì)接受到錯(cuò)誤的信息,在數(shù)據(jù)里增加了CRC校驗(yàn)的部分,這種做法是否有必要,CAN 會(huì)收到
    發(fā)表于 07-19 18:53 ?2033次閱讀

    STM32的CAN收發(fā)數(shù)據(jù)死在硬件錯(cuò)誤中斷

    STM32的CAN收發(fā)數(shù)據(jù)死在硬件錯(cuò)誤中斷使用uCosIII的消息隊(duì)列,當(dāng)CAN收到數(shù)據(jù),使用
    發(fā)表于 12-09 09:36 ?22次下載
    STM32的<b class='flag-5'>CAN</b>收發(fā)<b class='flag-5'>數(shù)據(jù)</b>死在硬件<b class='flag-5'>錯(cuò)誤</b>中斷

    關(guān)于CAN總線錯(cuò)誤的相關(guān)知識(shí)

    在本系列文章中,我們將為您詳細(xì)介紹CAN總線錯(cuò)誤的相關(guān)知識(shí),包括CAN總線錯(cuò)誤的基礎(chǔ)概念、CAN總線錯(cuò)誤
    的頭像 發(fā)表于 05-27 17:56 ?3115次閱讀

    CAN總線錯(cuò)誤的類(lèi)型介紹

    在本系列文章中,我們將為您詳細(xì)介紹CAN總線錯(cuò)誤的相關(guān)知識(shí),包括CAN總線錯(cuò)誤的基礎(chǔ)概念、CAN總線錯(cuò)誤
    的頭像 發(fā)表于 06-13 16:08 ?8228次閱讀

    虹科干貨 | 帶你全面認(rèn)識(shí)“CAN總線錯(cuò)誤”(二)——CAN錯(cuò)誤類(lèi)型

    AsimpleintrotoCANerrorsCAN總線錯(cuò)誤介紹在本系列文章中,我們將為您詳細(xì)介紹CAN總線錯(cuò)誤的相關(guān)知識(shí),包括CAN總線錯(cuò)誤
    的頭像 發(fā)表于 06-09 09:46 ?2174次閱讀
    虹科干貨 | 帶你全面認(rèn)識(shí)“<b class='flag-5'>CAN</b>總線<b class='flag-5'>錯(cuò)誤</b>”(二)——<b class='flag-5'>CAN</b><b class='flag-5'>錯(cuò)誤</b>類(lèi)型

    虹科干貨 | 帶你全面了解“CAN總線錯(cuò)誤”(三)——CAN節(jié)點(diǎn)狀態(tài)與錯(cuò)誤計(jì)數(shù)器

    AsimpleintrotoCANerrorsCAN總線錯(cuò)誤介紹在本系列文章中,我們將為您詳細(xì)介紹CAN總線錯(cuò)誤的相關(guān)知識(shí),包括CAN總線錯(cuò)誤
    的頭像 發(fā)表于 06-09 09:46 ?2411次閱讀
    虹科干貨 | 帶你全面了解“<b class='flag-5'>CAN</b>總線<b class='flag-5'>錯(cuò)誤</b>”(三)——<b class='flag-5'>CAN</b>節(jié)點(diǎn)狀態(tài)與<b class='flag-5'>錯(cuò)誤</b>計(jì)數(shù)器

    虹科干貨 | 帶你全面認(rèn)識(shí)“CAN總線錯(cuò)誤”(一)——CAN總線錯(cuò)誤錯(cuò)誤

    AsimpleintrotoCANerrorsCAN總線錯(cuò)誤介紹在本系列文章中,我們將為您詳細(xì)介紹CAN總線錯(cuò)誤的相關(guān)知識(shí),包括CAN總線錯(cuò)誤
    的頭像 發(fā)表于 05-27 10:39 ?4624次閱讀
    虹科干貨 | 帶你全面認(rèn)識(shí)“<b class='flag-5'>CAN</b>總線<b class='flag-5'>錯(cuò)誤</b>”(一)——<b class='flag-5'>CAN</b>總線<b class='flag-5'>錯(cuò)誤</b>與<b class='flag-5'>錯(cuò)誤</b>幀

    虹科干貨 | 帶你全面認(rèn)識(shí)“CAN總線錯(cuò)誤”(二)——CAN錯(cuò)誤類(lèi)型

    AsimpleintrotoCANerrorsCAN總線錯(cuò)誤介紹在本系列文章中,我們將為您詳細(xì)介紹CAN總線錯(cuò)誤的相關(guān)知識(shí),包括CAN總線錯(cuò)誤
    的頭像 發(fā)表于 06-02 09:41 ?1445次閱讀
    虹科干貨 | 帶你全面認(rèn)識(shí)“<b class='flag-5'>CAN</b>總線<b class='flag-5'>錯(cuò)誤</b>”(二)——<b class='flag-5'>CAN</b><b class='flag-5'>錯(cuò)誤</b>類(lèi)型

    虹科干貨 | 帶你全面了解“CAN總線錯(cuò)誤”(四)——在實(shí)踐中生成和記錄CAN錯(cuò)誤

    AsimpleintrotoCANerrorsCAN總線錯(cuò)誤介紹在本系列文章中,我們將為您詳細(xì)介紹CAN總線錯(cuò)誤的相關(guān)知識(shí),包括CAN總線錯(cuò)誤
    的頭像 發(fā)表于 06-09 10:21 ?1723次閱讀
    虹科干貨 | 帶你全面了解“<b class='flag-5'>CAN</b>總線<b class='flag-5'>錯(cuò)誤</b>”(四)——在實(shí)踐中生成和記錄<b class='flag-5'>CAN</b><b class='flag-5'>錯(cuò)誤</b>

    認(rèn)識(shí)CAN總線錯(cuò)誤 CAN總線錯(cuò)誤分析與解決

    認(rèn)識(shí)CAN 總線錯(cuò)誤的第一步就是了解認(rèn)識(shí)CAN 總線協(xié)議和它的具體功能,這樣才能更容易地理解CAN 總線是如何去發(fā)現(xiàn)并解決錯(cuò)誤的。
    發(fā)表于 08-14 15:18 ?6279次閱讀
    認(rèn)識(shí)<b class='flag-5'>CAN</b>總線<b class='flag-5'>錯(cuò)誤</b> <b class='flag-5'>CAN</b>總線<b class='flag-5'>錯(cuò)誤</b>分析與解決