<strike id="kiyse"></strike>
  • <tr id="kiyse"></tr>
  • <strike id="kiyse"></strike><samp id="kiyse"><tbody id="kiyse"></tbody></samp>
    <strike id="kiyse"><s id="kiyse"></s></strike>
    <tr id="kiyse"></tr>
    <noframes id="kiyse"><code id="kiyse"></code></noframes>
    <th id="kiyse"></th>
    <samp id="kiyse"></samp>
  • <th id="kiyse"><s id="kiyse"></s></th>
  • 關(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ò)。

    国产成人精品一区在线| 亚洲精品无码不卡| 亚洲精品国产日韩| 欧亚精品卡一卡二卡三| 最新亚洲精品国偷自产在线| 亚洲人精品午夜射精日韩| AV天堂午夜精品一区二区三区| 亚洲一区精品无码| 国产91精品久久久久999| 91精品国产91久久久久久青草 | 国产精品无码一区二区在线| 国产精品视频白浆免费视频| 国产精品伦理一二三区伦理| 91综合精品网站久久| 中文字幕精品一区二区三区视频| 精品国产三级在线观看| 蜜桃麻豆WWW久久囤产精品| 亚洲精品无码专区在线在线播放 | 亚洲色精品三区二区一区| 午夜精品射精入后重之免费观看| 2048亚洲精品国产| 国产精品青草久久| 在线欧美精品一区二区三区| 日韩av无码久久精品免费| 亚洲精品国产精品乱码视色| 国产真实伦偷精品| 久久人午夜亚洲精品无码区| 久久狠狠高潮亚洲精品| 久久精品国产2020观看福利| 中文字幕精品久久| 久久精品国产72国产精福利| 国产乱码精品一区三上 | 日本精品一区二区三本中文| 99re热久久这里只有精品6| 中文字幕精品亚洲无线码一区| 精品视频一区二区| 国产精品公开免费视频| 精品久久久久久中文字幕无码| 亚洲精品123区在线观看| 揄拍自拍日韩精品| 久久精品免费一区二区|