激情综合丁香-激情综合六月-激情综合婷婷亚洲图片-激情综合图区-激情综合网五月

關(guān)于新CAN驅(qū)動的錯(cuò)誤幀定義

 2016-12-30              

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


幀格式


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

  typedef struct{

        unsigned int id:29;

        unsigned int error:1;       

        unsigned int remote:1;

        unsigned int extended:1;

  }CAN_ID;

 

  typedef struct _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ò)誤信息。


    1. CAN_ERR_TX_TIMEOUT錯(cuò)誤

        WINCE中暫時(shí)保留。



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

        #define CAN_ERR_LOSTARB  0x00000002U

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



    3. controller problems控制器出錯(cuò)

      #define CAN_ERR_CRTL  0x00000004U

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

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


            接收buffer溢出

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

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


            發(fā)送buffer溢出

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

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


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

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

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


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

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

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


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

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

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


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

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

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

 

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

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



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

      #define CAN_ERR_PROT  0x00000008U

    當(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表明間歇



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

      #define CAN_ERR_TRX  0x00000010U

    當(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ò)誤

CAN錯(cuò)誤幀定義.gif

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

CAN錯(cuò)誤幀定義.gif

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



    6無ACK錯(cuò)誤

      #define CAN_ERR_ACK  0x00000020U

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



    7總線關(guān)閉

      #define CAN_ERR_BUSOFF  0x00000040U

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



    8總線錯(cuò)誤

      #define CAN_ERR_BUSERROR  0x00000080U

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

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



    9控制器重啟

      #define CAN_ERR_RESTARTED  0x00000100U 

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



示例

  當(dāng)收到一幀錯(cuò)誤幀,錯(cuò)誤幀ID為0x88,data數(shù)據(jù)data[0]~data[4]為0x00,0x00,0x00,0x1b,0x00時(shí)

       查ID可知,當(dāng)前CAN出現(xiàn)總線錯(cuò)誤+通信錯(cuò)誤,即0x80 && 0x08。根據(jù)通信錯(cuò)誤data[2]和data[3]可知,上報(bào)故障為ACK解析出錯(cuò),即data[3]=0x1b。由此判斷有可能CAN總線受到干擾,或者有設(shè)備發(fā)送協(xié)議有錯(cuò)。

主站蜘蛛池模板: 一级毛片免费一级直接观看| 伊人久久成人成综合网222| 偷看老师裙底无内裤福利图片| 思思99| jul724青木玲中文字幕| 免费网址你懂的| 最黄毛片| 欧美性视频一区二区三区| 久久一区不卡中文字幕| 老外一级毛片免费看| 免费日比视频| 国产91在线精品| 黑粗硬大欧美| 久久久久久久久久久9精品视频 | 亚洲欧美日韩国产精品第不页| 久久午夜精品2区| 色视频在线观看网站| 国产不卡一卡2卡三卡4卡5卡在线| 黄色录像免费看| 精品日韩一区二区三区视频| 色综合天天综合网国产成人网| 九九热精| 亚洲经典一区二区三区| 国产成人v爽在线免播放观看 | 黄色成人毛片| 国产精品爽爽影院在线| 久久97久久99久久综合| 亚洲女同视频| 一级做一级爱a做片性视频视频 | 国产男女性做爽歪歪爱视频| 亚洲国产一成人久久精品| 久久久国产精品va麻豆| 曰本变态bdsm色虐七v| 色婷婷视频| 欧美人伦禁忌dvd| 欧美黄色特级视频| 性欧美视频在线观看| 国产成人精品.一二区| 欧美日韩亚洲综合在线一区二区| 91专区| 久久久线视频|