查看: 6406|回复: 13

[已解决] 飞思卡尔KE02的CRC例程结果不正确(已解决)

[复制链接]

该用户从未签到

196

主题

495

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1482
最后登录
2020-12-3
发表于 2014-2-20 14:39:25 | 显示全部楼层 |阅读模式
我使用KE02上的例程中的CRC_demo.
 uint8_t MessageSource[] = {0x12,0x23,0x34,0x45,0x56,0x67,0x78,0x89} ;                      /*!< initialize mesasge */
   
   
    printf("\nRunning the CRC_demo project.\n");         
    /* inital CRC register works under 16-bit mode */
    pCRC_Config->u32PolyData            = 0xA001;                   /*!< initialize CRC-CCITT poly value */
    u32SeedValue                        = 0xffff;                   /*!< set CRC-CCITT seed value */    
    pCRC_Config->bWidth                 = CRC_WIDTH_16BIT;
    pCRC_Config->bTransposeReadType     = CRC_READ_TRANSPOSE_NONE;  /*!< do not transpose in read */     
    pCRC_Config->bTransposeWriteType    = CRC_WRITE_TRANSPOSE_NONE; /*!< do not transpose in write */
    pCRC_Config->bFinalXOR = FALSE;


    /* begin to CRC-CCITT convertion */   
    CRC_Init(pCRC_Config);                                          /*!< crc module inital as 16-bit mode */ 
   
    u32Crc_ConverterResult = CRC_Cal16(u32SeedValue, &MessageSource[0], (sizeof(MessageSource)));   
    printf("CRC-CCITT function calculation result = 0x%x @seed = 0x%x .\n", u32Crc_ConverterResult, u32SeedValue );
   
获得的结果为0xc871.
我从网上下载了一个软件,

其计算结果为0x5856
他们怎么不同?到底是哪个对?求指教。
 
 
我知道答案 目前已有12人回答

CRC16.rar

11.48 KB, 下载次数: 18, 下载积分: 威望 1

回复

使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2014-2-20 15:52:54 | 显示全部楼层

    回复:飞思卡尔KE02的CRC例程结果不正确

    楼主你好
    CRC计算会因为seed值、转置多项式、输出异或、输入移位、输出移位都会导致结果不同。
    是否有尝试过使用其他CRC计算器,获得相同的计算结果?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2014-2-20 16:06:53 | 显示全部楼层

    回复:飞思卡尔KE02的CRC例程结果不正确

    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2014-2-20 16:11:16 | 显示全部楼层

    回复:飞思卡尔KE02的CRC例程结果不正确

    你使用的这个CRC计算器,没有写明我在2楼提到的那些细节,所以计算结果可能不同。
    我按照你程序的配置,在我提供网址的CRC在线计算器中修改相应设置,得到了0xc871这个结果。
    CRC result.jpg
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2014-2-21 13:33:17 | 显示全部楼层

    回复:飞思卡尔KE02的CRC例程结果不正确

    回复第 4 楼 于2014-02-20 16:11:16发表:
    你使用的这个CRC计算器,没有写明我在2楼提到的那些细节,所以计算结果可能不同。
    我按照你程序的配置,在我提供网址的CRC在线计算器中修改相应设置,得到了0xc871这个结果。

     

    网上许多CRC计算器仅仅让用户输入待计算数据,然后输出不同应用(比如用于CRC-CCITT、Modbus)的CRC结果。
    并未明确描述出计算细节,所以可能你在使用飞思卡尔芯片CRC模块时不知道该如何正确配置该模块。
    楼主最好首先确定,自己想要使用的CRC标准细节:seed值、转置多项式、输出异或、输入移位、输出移位
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    196

    主题

    495

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1482
    最后登录
    2020-12-3
     楼主| 发表于 2014-2-21 14:06:53 | 显示全部楼层

    回复:飞思卡尔KE02的CRC例程结果不正确

    回复第 4 楼 于2014-02-20 16:11:16发表:
    你使用的这个CRC计算器,没有写明我在2楼提到的那些细节,所以计算结果可能不同。
    我按照你程序的配置,在我提供网址的CRC在线计算器中修改相应设置,得到了0xc871这个结果。

     

    我这有一定CRC16的计算代码

    unsigned int crc16(unsigned char *buf, unsigned int length)

    {

        unsigned int i;

        unsigned int j;

        unsigned int c;

        unsigned int crc = 0xFFFF;

        for (i=0; i= 1;

                    crc ^= 0xA001;

                 }

                 else

                 {

                    crc >>= 1;

                 }

            }

       }

        crc = ((crc>>8) + (crc
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2014-2-21 15:06:28 | 显示全部楼层

    回复:飞思卡尔KE02的CRC例程结果不正确

    <div style="padding:5px;border:1px dashed #ccc;">回复第 6 楼 于2014-02-21 14:06:53发表:
    回复第 4 楼 于2014-02-20 16:11:16发表:
    你使用的这个CRC计算器,没有写明我在2楼提到的那些细节,所以计算结果可能不同。
    我按照你程序的配置,在我提供网址的CRC在线计算器中修改相应设置,得到了0xc871这个结果。

     

    我这有一定CRC16的计算代码
    unsigned int crc16(unsigned char *buf, unsigned int length)

    {

        unsigned int i;

        unsigned int j;

        unsigned int c;

        unsigned int crc = 0xFFFF;

        for (i=0; i= 1;

                    crc ^= 0xA001;

                 }

                 else

                 {

                    crc >>= 1;

                 }

            }

       }

        crc = ((crc>>8) + (crcbWidth                 = CRC_WIDTH_16BIT;
        pCRC_Config->bTransposeReadType     = CRC_READ_TRANSPOSE_BIT;  /*!< do not transpose in read */     
        pCRC_Config->bTransposeWriteType    = CRC_WRITE_TRANSPOSE_BIT; /*!< do not transpose in write */
        pCRC_Config->bFinalXOR = FALSE;
     
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    65

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    233
    最后登录
    1970-1-1
    发表于 2014-2-21 15:07:43 | 显示全部楼层

    回复:飞思卡尔KE02的CRC例程结果不正确

     你的KE02的代码 是哪个版本?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    196

    主题

    495

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1482
    最后登录
    2020-12-3
     楼主| 发表于 2014-2-21 15:33:50 | 显示全部楼层

    回复:飞思卡尔KE02的CRC例程结果不正确

    回复第 8 楼 于2014-02-21 15:07:43发表:
     你的KE02的代码 是哪个版本?
     

    飞思卡尔官方提供的例程
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    196

    主题

    495

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1482
    最后登录
    2020-12-3
     楼主| 发表于 2014-2-21 15:40:47 | 显示全部楼层

    回复:飞思卡尔KE02的CRC例程结果不正确

    <div style="padding:5px;border:1px dashed #ccc;">回复第 7 楼 于2014-02-21 15:06:28发表:
    回复第 6 楼 于2014-02-21 14:06:53发表:
    回复第 4 楼 于2014-02-20 16:11:16发表:
    你使用的这个CRC计算器,没有写明我在2楼提到的那些细节,所以计算结果可能不同。
    我按照你程序的配置,在我提供网址的CRC在线计算器中修改相应设置,得到了0xc871这个结果。

     

    我这有一定CRC16的计算代码
    unsigned int crc16(unsigned char *buf, unsigned int length)

    {

        unsigned int i;

        unsigned int j;

        unsigned int c;

        unsigned int crc = 0xFFFF;

        for (i=0; i= 1;

                    crc ^= 0xA001;

                 }

                 else

                 {

                    crc >>= 1;

                 }

            }

       }

        crc = ((crc>>8) + (crcbWidth                 = CRC_WIDTH_16BIT;
        pCRC_Config->bTransposeReadType     = CRC_READ_TRANSPOSE_BIT;  /*!< do not transpose in read */     
        pCRC_Config->bTransposeWriteType    = CRC_WRITE_TRANSPOSE_BIT; /*!< do not transpose in write */
        pCRC_Config->bFinalXOR = FALSE;
     
     

    为什么会这样呢?如果我换一个生成多项式,对应的生成多项式又为多少呢?
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-18 21:40 , Processed in 0.110692 second(s), 31 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表