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

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

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

英創(chuàng)信息技術(shù)關(guān)于新CAN驅(qū)動(dòng)的錯(cuò)誤幀定義

英創(chuàng)信息技術(shù) ? 來源:英創(chuàng)信息技術(shù) ? 作者:英創(chuàng)信息技術(shù) ? 2020-02-05 10:27 ? 次閱讀

CAN總線產(chǎn)生的錯(cuò)誤以錯(cuò)誤幀的形式上報(bào)給應(yīng)用層。設(shè)置注冊表[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\CAN1] BusErrorReport項(xiàng)為1可以讓驅(qū)動(dòng)上報(bào)CAN總線錯(cuò)誤幀,為0,驅(qū)動(dòng)不會(huì)上報(bào)錯(cuò)誤幀。

幀格式

CAN幀結(jié)構(gòu)體定義如下,當(dāng)CAN_FRAME中CAN_ID的error為1時(shí),表示該幀為錯(cuò)誤幀。

typedefstruct{

unsignedintid:29;

unsignedinterror:1;

unsignedintremote:1;

unsignedintextended:1;

}CAN_ID;

typedefstruct_can_frame

{

CAN_ID can_id; /* 32 bit CAN_ID + EFF/RTR/ERR flags */

BYTE can_dlc; /* frame payload length in byte*/

BYTE data[CAN_MAX_DLEN];

} CAN_FRAME, *PCAN_FRAME;

錯(cuò)誤幀定義

可以參考例程中庫頭文件sdk_can.h,錯(cuò)誤幀標(biāo)記為CAN_ID的error,錯(cuò)誤類型存放在CAN_ID中,根據(jù)不同類型的錯(cuò)誤,詳細(xì)信息存放在幀結(jié)構(gòu)體CAN_FRAME的data中。

一個(gè)錯(cuò)誤幀中,可以包含多種錯(cuò)誤類型的錯(cuò)誤信息。

CAN_ERR_TX_TIMEOUT錯(cuò)誤

WINCE中暫時(shí)保留。

lost arbitration仲裁丟失錯(cuò)誤

#defineCAN_ERR_LOSTARB0x00000002U

當(dāng)錯(cuò)誤幀結(jié)構(gòu)體中CAN_ID& CAN_ERR_LOSTARB為真時(shí),表明該錯(cuò)誤產(chǎn)生。

controller problems控制器出錯(cuò)

#defineCAN_ERR_CRTL0x00000004U

當(dāng)錯(cuò)誤幀結(jié)構(gòu)體中CAN_ID& CAN_ERR_CRTL為真時(shí),表明該錯(cuò)誤產(chǎn)生。

詳細(xì)信息存放在錯(cuò)誤幀結(jié)構(gòu)體data[1]中。

接收buffer溢出

data[0] &0x01為真,表明該錯(cuò)誤產(chǎn)生。

需要及時(shí)處理接收到的數(shù)據(jù)包。

發(fā)送buffer溢出

data[0] &0x02為真,表明該錯(cuò)誤產(chǎn)生。

可能由于瞬間發(fā)送的數(shù)據(jù)包過多導(dǎo)致。

接收錯(cuò)誤達(dá)到警告級(jí)別

data[0] &0x04為真,表明該錯(cuò)誤產(chǎn)生。

當(dāng)該錯(cuò)誤提示,表明短期內(nèi)接收產(chǎn)生的錯(cuò)誤較多。

發(fā)送錯(cuò)誤達(dá)到警告級(jí)別

data[0] &0x08為真,表明該錯(cuò)誤產(chǎn)生。

當(dāng)該錯(cuò)誤提示,表明短期內(nèi)發(fā)送產(chǎn)生的錯(cuò)誤較多。

接收錯(cuò)誤達(dá)到嚴(yán)重錯(cuò)誤級(jí)別

data[0] &0x10為真,表明該錯(cuò)誤產(chǎn)生。

當(dāng)該錯(cuò)誤提示,表明短期內(nèi)接收產(chǎn)生的錯(cuò)誤過多。應(yīng)當(dāng)暫停CAN通信,檢查錯(cuò)誤原因。

發(fā)送錯(cuò)誤達(dá)到嚴(yán)重錯(cuò)誤級(jí)別

data[0] &0x20為真,表明該錯(cuò)誤產(chǎn)生。

當(dāng)該錯(cuò)誤提示,表明短期內(nèi)發(fā)送產(chǎn)生的錯(cuò)誤過多。應(yīng)當(dāng)暫停CAN通信,檢查錯(cuò)誤原因。

恢復(fù)到錯(cuò)誤激活狀態(tài)

data[0] &0x40為真,表明恢復(fù)到錯(cuò)誤激活狀態(tài)。

CAN通信協(xié)議出錯(cuò)

#defineCAN_ERR_PROT0x00000008U

當(dāng)錯(cuò)誤幀結(jié)構(gòu)體中CAN_ID& CAN_ERR_PROT為真時(shí),表明該錯(cuò)誤產(chǎn)生。

詳細(xì)信息存放在錯(cuò)誤幀結(jié)構(gòu)體data[2]和data[3]中,其中data[2]表明協(xié)議錯(cuò)誤類型,data[3]表明協(xié)議出錯(cuò)的位置

(類型)單bit出錯(cuò)

data[2] &0x01為真,表明協(xié)議單bit出錯(cuò)。

(類型)幀格式出錯(cuò)

data[2] &0x02為真,表明幀格式出錯(cuò)。

(類型)位填充出錯(cuò)

data[2] &0x04為真,表明位填充出錯(cuò)。

(類型)dominant bit發(fā)送失敗

data[2] &0x08為真,表明dominant bit發(fā)送失敗。

(類型)recessive bit發(fā)送失敗

data[2] &0x10為真,表明recessive bi發(fā)送失敗。

(類型)總線過載

data[2] &0x20為真,表明總線過載。

(類型)active error announcement

data[2] &0x40為真,active error announcement。

(類型)傳輸出錯(cuò)

data[2] &0x80為真,傳輸出錯(cuò)。

位置

data[3]為0x03表明協(xié)議SOF幀頭位置

data[3]為0x02表明協(xié)議ID第28-21bits(SFF:10-3)

data[3]為0x06表明協(xié)議ID第20-18bits(SFF:2-0)

data[3]為0x04表明協(xié)議substitute RTR位(SFF:RTR)

data[3]為0x05表明協(xié)議identifier extension標(biāo)準(zhǔn)擴(kuò)展位

data[3]為0x07表明協(xié)議ID第17-13bits

data[3]為0x0F表明協(xié)議ID第12-5bits

data[3]為0x0E表明協(xié)議ID第4-0bits

data[3]為0x0C表明協(xié)議RTR位

data[3]為0x0D表明接收bit 1

data[3]為0x09表明接收bit 0

data[3]為0x0B表明DLC位

data[3]為0x0A表明DATA位

data[3]為0x08表明CRC序列

data[3]為0x18表明CRC分隔符

data[3]為0x19表明ACK應(yīng)答位

data[3]為0x1B表明ACK分隔符

data[3]為0x1A表明幀尾

data[3]為0x12表明間歇

收發(fā)狀態(tài)錯(cuò)誤

#defineCAN_ERR_TRX0x00000010U

當(dāng)錯(cuò)誤幀結(jié)構(gòu)體中CAN_ID& CAN_ERR_TRX為真時(shí),表明在收發(fā)時(shí)CAN狀態(tài)有誤。

詳細(xì)信息存放在錯(cuò)誤幀結(jié)構(gòu)體data[4]中,data[4]中1個(gè)字節(jié)8bit中,高4位表示CANL值,分別代表如下CANH錯(cuò)誤

高4位表示CANH值,分別代表如下CANL錯(cuò)誤

高低位值以排列組合方式存在。

無ACK錯(cuò)誤

#defineCAN_ERR_ACK0x00000020U

當(dāng)錯(cuò)誤幀結(jié)構(gòu)體中CAN_ID& CAN_ERR_ACK為真時(shí),表明該錯(cuò)誤產(chǎn)生。

總線關(guān)閉

#defineCAN_ERR_BUSOFF0x00000040U

當(dāng)錯(cuò)誤幀結(jié)構(gòu)體中CAN_ID& CAN_ERR_BUSOFF為真時(shí),表明總線關(guān)閉。

總線錯(cuò)誤

#defineCAN_ERR_BUSERROR0x00000080U

當(dāng)錯(cuò)誤幀結(jié)構(gòu)體中CAN_ID& CAN_ERR_BUSERROR為真時(shí),表明該錯(cuò)誤產(chǎn)生。

該錯(cuò)誤通常與其它錯(cuò)誤一起發(fā)出。

控制器重啟

#defineCAN_ERR_RESTARTED0x00000100U

當(dāng)錯(cuò)誤幀結(jié)構(gòu)體中CAN_ID& CAN_ERR_RESTARTED為真時(shí),表明控制器重啟。

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

    關(guān)注

    7

    文章

    6081

    瀏覽量

    34936
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    can標(biāo)準(zhǔn)和擴(kuò)展能否共存

    CAN(Controller Area Network)是一種用于汽車和工業(yè)自動(dòng)化領(lǐng)域的現(xiàn)場總線通信協(xié)議。CAN協(xié)議具有多種格式,包括標(biāo)準(zhǔn)和擴(kuò)展
    的頭像 發(fā)表于 07-24 15:24 ?830次閱讀

    can標(biāo)準(zhǔn)和擴(kuò)展的區(qū)別

    CAN(Controller Area Network)是一種用于汽車和工業(yè)領(lǐng)域的通信協(xié)議,它允許多個(gè)設(shè)備在同一總線上進(jìn)行通信。CAN協(xié)議有兩種類型:標(biāo)準(zhǔn)和擴(kuò)展
    的頭像 發(fā)表于 07-24 15:20 ?691次閱讀

    can網(wǎng)絡(luò)數(shù)據(jù)的特點(diǎn)

    特點(diǎn),在分布式系統(tǒng)中得到了廣泛應(yīng)用。 數(shù)據(jù)的重要性 :數(shù)據(jù)CAN網(wǎng)絡(luò)中用于數(shù)據(jù)傳輸?shù)幕締卧?,其結(jié)構(gòu)設(shè)計(jì)和特性直接關(guān)系到整個(gè)網(wǎng)絡(luò)的通信效率和可靠性。 二、數(shù)據(jù)的結(jié)構(gòu) 基本構(gòu)成
    的頭像 發(fā)表于 07-24 15:18 ?211次閱讀

    can數(shù)據(jù)有哪幾個(gè)域組成

    CAN(控制器局域網(wǎng)絡(luò))是一種基于消息傳遞的通信協(xié)議,廣泛應(yīng)用于汽車、工業(yè)自動(dòng)化和嵌入式系統(tǒng)等領(lǐng)域。CAN協(xié)議的數(shù)據(jù)是用于傳輸信息的基本單位。 1.
    的頭像 發(fā)表于 07-24 15:14 ?384次閱讀

    CAN數(shù)據(jù)的各個(gè)域及其作用

    CAN(Controller Area Network)是一種用于汽車電子系統(tǒng)中的通信協(xié)議,它具有高可靠性、實(shí)時(shí)性和靈活性等特點(diǎn)。在CAN通信中,數(shù)據(jù)是最基本的通信單元,用于傳輸信息
    的頭像 發(fā)表于 07-24 15:10 ?427次閱讀

    一文讀懂CAN通訊錯(cuò)誤

    CAN總線通信技術(shù)廣泛應(yīng)用于多個(gè)行業(yè),是每個(gè)總線設(shè)計(jì)工程師必學(xué)的一個(gè)通訊網(wǎng)絡(luò)。然而,對于CAN通信中的錯(cuò)誤,許多人僅停留在表面了解,缺乏深
    的頭像 發(fā)表于 06-12 08:24 ?2098次閱讀
    一文讀懂<b class='flag-5'>CAN</b>通訊<b class='flag-5'>錯(cuò)誤</b><b class='flag-5'>幀</b>

    一文讀懂CAN控制器錯(cuò)誤處理的原理

    CAN通訊的錯(cuò)誤到底是如何被界定的?本文帶你輕松了解!錯(cuò)誤標(biāo)定檢測到錯(cuò)誤條件的站通過發(fā)送錯(cuò)誤標(biāo)
    的頭像 發(fā)表于 04-26 08:25 ?1322次閱讀
    一文讀懂<b class='flag-5'>CAN</b>控制器<b class='flag-5'>錯(cuò)誤</b>處理的原理

    請問用CAN存儲(chǔ)器存儲(chǔ)的CAN總線數(shù)據(jù)格式有哪些呢?

    之間的信息傳輸。下面將詳細(xì)介紹CAN總線數(shù)據(jù)的格式。 CAN總線數(shù)據(jù)分為兩種類型:標(biāo)準(zhǔn)和擴(kuò)
    的頭像 發(fā)表于 01-31 13:46 ?984次閱讀

    CAN總線的標(biāo)準(zhǔn)和擴(kuò)展有什么區(qū)別呢?分別適用于什么工況?

    CAN總線的標(biāo)準(zhǔn)和擴(kuò)展CAN協(xié)議中的兩種類型。
    的頭像 發(fā)表于 01-30 09:41 ?4620次閱讀
    <b class='flag-5'>CAN</b>總線的標(biāo)準(zhǔn)<b class='flag-5'>幀</b>和擴(kuò)展<b class='flag-5'>幀</b>有什么區(qū)別呢?分別適用于什么工況?

    CAN通信協(xié)議中有哪幾種類型?CAN通信中格式的作用

    CAN通信協(xié)議中有四種類型,分別是數(shù)據(jù)、遠(yuǎn)程、錯(cuò)誤和過載
    的頭像 發(fā)表于 01-30 09:18 ?4339次閱讀

    Coral3568如何軟硬件過濾can及優(yōu)化?

    structcan_filterfilter[1];/*規(guī)則:可以接收ID為0x200數(shù)據(jù)錯(cuò)誤*/filter[0].can_mask=CAN
    的頭像 發(fā)表于 12-08 15:52 ?446次閱讀
    Coral3568如何軟硬件過濾<b class='flag-5'>can</b><b class='flag-5'>幀</b>及優(yōu)化?

    can標(biāo)準(zhǔn)和擴(kuò)展區(qū)別

    標(biāo)準(zhǔn)和擴(kuò)展是用于在控制器局域網(wǎng)(CAN)中傳輸數(shù)據(jù)的兩種基本格式。它們在結(jié)構(gòu)、標(biāo)識(shí)符長度、數(shù)據(jù)長度以及數(shù)據(jù)傳輸和應(yīng)用上存在一些區(qū)別。本文將詳細(xì)介紹標(biāo)準(zhǔn)
    的頭像 發(fā)表于 12-08 10:08 ?7726次閱讀

    如何用示波器排查CAN的各種錯(cuò)誤呢?

    如何用示波器排查CAN的各種錯(cuò)誤呢? 導(dǎo)言: 控制器局域網(wǎng)絡(luò)(Controller Area Network,CAN)是一種常用的現(xiàn)場總線通信協(xié)議,廣泛應(yīng)用于汽車電子系統(tǒng)、工業(yè)自動(dòng)化
    的頭像 發(fā)表于 12-07 11:09 ?954次閱讀

    分享一種用CAN波形的幅度和脈寬信息來精確定位錯(cuò)誤來源的方法

    我們先從基礎(chǔ)的講起。CAN節(jié)點(diǎn)的電路一般如下圖所示,MCU內(nèi)置了CAN控制器用來將MCU的數(shù)據(jù)封裝為CAN格式,同時(shí)它也負(fù)責(zé)CAN
    的頭像 發(fā)表于 10-08 15:52 ?1427次閱讀
    分享一種用<b class='flag-5'>CAN</b>波形的幅度和脈寬<b class='flag-5'>信息</b>來精確定位<b class='flag-5'>錯(cuò)誤</b><b class='flag-5'>幀</b>來源的方法

    信息技術(shù)是干什么?

    廣播電子技術(shù)信息技術(shù)
    橙群微電子
    發(fā)布于 :2023年09月22日 09:17:48