chenbingjy 发表于 2013-8-4 16:06

CRC校验的问题

我用NXP810的CRC16例程做实验,发现
LPC_CRC->WR_DATA_WORD = 0x3534;
    if (LPC_CRC->SUM != 0xD7D6) {                                       /* ²âÊÔʧ°Ü£¬LEDÉÁ˸            */
      while (1) {
            LPC_GPIO_PORT->PIN0 &= ~LED;                              /* µãÁÁLED                      */
            myDelay(100);                                             /* ÑÓʱ 100ms                   */
            LPC_GPIO_PORT->PIN0 |=LED;                              /* ϨÃðLED                      */
            myDelay(100);                                             /* ÑÓʱ 100ms                   */
      }
    }
   
    LPC_GPIO_PORT->PIN0&= ~LED;                                       /* ²âÊÔͨ¹ý£¬µãÁÁLED            */
我找了好多算法,都算不出0XD7D6这个值来。
请高手指教,谢谢!

chunyang 发表于 2013-8-4 23:25

先确认算法编程是否正确。

zhaojun_xf 发表于 2013-8-5 06:19

CRC16用软件计算还是挺方便的,用硬件还真没试过。先看看方法是否正确。

chenbingjy 发表于 2013-8-5 08:21

值是对的

只是不知道怎么计算的。

zhaojun_xf 发表于 2013-8-5 10:32

回复 4楼chenbingjy 的帖子

你说的是软件还是硬件的计算方式。

chenbingjy 发表于 2013-8-5 14:10

硬件

硬件计算的值是对的,我试验成功了。但硬件计算的那个值,我用软件计算不出来。好像分什么大端模式和小端模式。

chenbingjy 发表于 2024-8-29 16:22

<div class='shownolgin' data-isdigest='no'><p>算法找到了</p>

<p>unsigned int CRC16_IBM(unsigned char *puchMsg, unsigned int usDataLen) &nbsp;<br />
{ &nbsp;<br />
&nbsp; unsigned short wCRCin = 0x0000; &nbsp;<br />
&nbsp; unsigned short wCPoly = 0x8005; &nbsp;<br />
&nbsp; unsigned char wChar = 0; &nbsp;<br />
&nbsp; &nbsp;&nbsp;<br />
&nbsp; while (usDataLen--) &nbsp; &nbsp;&nbsp;<br />
&nbsp; { &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; wChar = *(puchMsg++); &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; InvertUint8(&amp;wChar,&amp;wChar); &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; wCRCin ^= (wChar &lt;&lt; 8); &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; for(int i = 0;i &lt; 8;i++) &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; { &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(wCRCin &amp; 0x8000) &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; wCRCin = (wCRCin &lt;&lt; 1) ^ wCPoly; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; wCRCin = wCRCin &lt;&lt; 1; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; } &nbsp;<br />
&nbsp; } &nbsp;<br />
&nbsp; InvertUint16(&amp;wCRCin,&amp;wCRCin); &nbsp;<br />
&nbsp; return (wCRCin) ; &nbsp;<br />
} &nbsp;</p>
</div><script>showreplylogin();</script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>
页: [1]
查看完整版本: CRC校验的问题