查看: 12017|回复: 17

[已解决] 如何正确配置KINETIS 的CRC模块?对于MODBUS_RTU(已解决)

[复制链接]

该用户从未签到

1

主题

27

帖子

0

新手上路

Rank: 1

积分
22
最后登录
1970-1-1
发表于 2014-2-21 12:38:46 | 显示全部楼层 |阅读模式
你好
我用K10的CRC模块进行MODBUS_RTU通信的数据校验,用的是飞思卡尔提供的例程
int CRC_Config (uint32_t poly,uint32_t tot,uint32_t totr,uint32_t fxor,uint32_t tcrc)
{
uint32_t ctrl_reg;
int error = CRC_ERR_SUCCESS;
// Configure CRC_CTRL Register
if( tot > 3 ) {
error = CRC_ERR_TOT_VAL;
}
else if( totr > 3 ) {
error = CRC_ERR_TOTR_VAL;
}
else if( fxor > 1 ) {
error = CRC_ERR_FXOR_VAL;
}
else if( tcrc > 1 ) {
error = CRC_ERR_TCRC_VAL;
}
else {
ctrl_reg=(tot
我知道答案 目前已有16人回答
回复

使用道具 举报

该用户从未签到

1

主题

27

帖子

0

新手上路

Rank: 1

积分
22
最后登录
1970-1-1
 楼主| 发表于 2014-2-24 17:10:56 | 显示全部楼层

RE:如何正确配置KINETIS 的CRC模块?对于MODBUS_RTU

问题解决了,就用飞思卡尔的例程,不用做改动

crc_error=CRC_Config (0x8005,1 ,1,0,0);
crc = CRC_Cal_16(0xffff, stmsg, 10);

这样的计算结果就是MODBUS_RTU的CRC,试过了,绝对正确
回复 支持 1 反对 1

使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

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

    回复:如何正确配置KINETIS 的CRC模块?对于MODBUS_RTU

    楼主你好
    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-21 12:59:59 | 显示全部楼层

    回复:如何正确配置KINETIS 的CRC模块?对于MODBUS_RTU

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

    使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

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

    回复:如何正确配置KINETIS 的CRC模块?对于MODBUS_RTU

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

    使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

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

    回复:如何正确配置KINETIS 的CRC模块?对于MODBUS_RTU

    楼主你好,给你另外找了两个CRC计算器。
    比较简单的在线CRC计算器见链接(可惜未标明CRC标准计算细节):www.lammertbies.nl/comm/info/crc-calculation.html
    On-line CRC.jpg
     
     
    离线CRC计算器CRC_Calc v0.1(CRC种类很多,且标准有说明)见附件CRC_Calc v01.zip
    CRC MODBUS.jpg
     
    1.你需要改写CRC_Cal_16函数,在给返回值data_out赋值时,要根据输出结果是否byte转置加以区分:

    if(totr

    CRC_Calc v01.zip

    2.06 MB, 下载次数: 57

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

    使用道具 举报

    该用户从未签到

    1

    主题

    27

    帖子

    0

    新手上路

    Rank: 1

    积分
    22
    最后登录
    1970-1-1
     楼主| 发表于 2014-2-24 11:11:04 | 显示全部楼层

    RE:如何正确配置KINETIS 的CRC模块?对于MODBUS_RTU

    谢谢各位的关注,我的问题是,对有0XAA,0X55,0X11,0X22,0X33,0X44,0X55,0X66,0X77,0X88这样一组数,用来计算MODBUS_RTU的的值,POLY=0XA001,SEED=0XFFFF,其他的参数该怎么配置,才能得到正确的CRC值0XBD74,其他参数该怎么配置?参数太多, 我试了几种情况都不对,楼上的POLY为啥是2.CRC_Config(0x8005,2,3,0,0),为啥不是
    CRC_Config(0xA001,2,3,0,0)?MODBUS_RTU的POLY应该是0XA001才对啊?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    27

    帖子

    0

    新手上路

    Rank: 1

    积分
    22
    最后登录
    1970-1-1
     楼主| 发表于 2014-2-24 13:20:38 | 显示全部楼层

    RE:如何正确配置KINETIS 的CRC模块?对于MODBUS_RTU

    明白了,0XA001的位反序就是0X8005
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

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

    回复:如何正确配置KINETIS 的CRC模块?对于MODBUS_RTU

    回复第 7 楼 于2014-02-24 13:20:38发表:
    明白了,0XA001的位反序就是0X8005 

    恩 你这个问题正好和另外一位网友的帖子提问十分相似。www.nxpic.org.cn/bbs/article_1280_578444.html
    感谢你对飞思卡尔产品的关注!
    既然这个求助帖的问题解决了,请在标题末添加“(已解决)”字样。
    如果以后遇到新问题,欢迎在飞思卡尔FAE线上技术支持版块发求助帖提问。
     
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    27

    帖子

    0

    新手上路

    Rank: 1

    积分
    22
    最后登录
    1970-1-1
     楼主| 发表于 2014-2-24 15:12:29 | 显示全部楼层

    RE:如何正确配置KINETIS 的CRC模块?对于MODBUS_RTU

    楼上的提示让我明白了0XA001与0X8005的关系,但最终结果还是不对,我试了好几种可能,结果都不对,大家继续研究,争取能弄明白。
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

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

    回复:如何正确配置KINETIS 的CRC模块?对于MODBUS_RTU

    回复第 9 楼 于2014-02-24 15:12:29发表:
    楼上的提示让我明白了0XA001与0X8005的关系,但最终结果还是不对,我试了好几种可能,结果都不对,大家继续研究,争取能弄明白。 

    请问楼主是否有按照我在5楼红字标出的两处修改程序?
    因为我在TWR-K60D100M开发板上,输入你要求的数据,能够得到0XBD74结果。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-19 01:25 , Processed in 0.114133 second(s), 32 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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