<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ū)動(dòng)的錯(cuò)誤幀定義

     2016-12-30              

      CAN總線產(chǎn)生的錯(cuò)誤以錯(cuò)誤幀的形式上報(bào)給應(yīng)用層。設(shè)置注冊(cè)表[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ò)誤幀。

      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ò)誤幀定義


      可以參考例程中庫(kù)頭文件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á)到警告級(jí)別

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

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


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

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

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


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

                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ò)誤級(jí)別

           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午夜精品无码专区| 99久久99热精品免费观看国产| 亚洲精品无码专区在线播放| 国产乱码伦精品一区二区三区麻豆| 人妻无码久久精品人妻| 久久精品国产99久久丝袜| 在线亚洲精品视频| 久久精品国产亚洲| 国产在线91精品入口| 四虎永久精品免费观看| 美利坚永久精品视频在线观看| 7777久久久国产精品消防器材| 亚洲欧美日韩国产精品一区| 精品人妻va出轨中文字幕| 国产精品乱码高清在线观看| 女人国产香蕉久久精品| 精品一区二区视频在线观看| 久久免费的精品国产V∧| 国产精品人成在线播放新网站| 9久久这里只有精品国产| 国产成人精品福利网站在线观看| 国产精品亚洲色婷婷99久久精品| 69国产精品视频免费| 精品久久久久久无码国产| 国产精品亚洲专区无码WEB| 最新露脸国产精品视频| 91国内揄拍国内精品情侣对白 | 国产精品无码AV一区二区三区| 亚洲国产一成久久精品国产成人综合| 国产精品爽爽影院在线| 国产精品第20页| 2021国产精品自拍| 亚洲国产精品综合久久2007| 精品偷自拍另类在线观看| 久久精品人人做人人爽电影蜜月| 久久99久久精品视频| 中文字幕精品无码一区二区| 久久久99精品成人片中文字幕 | 99re国产精品视频首页| 国内精品国语自产拍在线观看|