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这个值来。
请高手指教,谢谢! 先确认算法编程是否正确。 CRC16用软件计算还是挺方便的,用硬件还真没试过。先看看方法是否正确。
值是对的
只是不知道怎么计算的。回复 4楼chenbingjy 的帖子
你说的是软件还是硬件的计算方式。硬件
硬件计算的值是对的,我试验成功了。但硬件计算的那个值,我用软件计算不出来。好像分什么大端模式和小端模式。 <div class='shownolgin' data-isdigest='no'><p>算法找到了</p><p>unsigned int CRC16_IBM(unsigned char *puchMsg, unsigned int usDataLen) <br />
{ <br />
unsigned short wCRCin = 0x0000; <br />
unsigned short wCPoly = 0x8005; <br />
unsigned char wChar = 0; <br />
<br />
while (usDataLen--) <br />
{ <br />
wChar = *(puchMsg++); <br />
InvertUint8(&wChar,&wChar); <br />
wCRCin ^= (wChar << 8); <br />
for(int i = 0;i < 8;i++) <br />
{ <br />
if(wCRCin & 0x8000) <br />
wCRCin = (wCRCin << 1) ^ wCPoly; <br />
else <br />
wCRCin = wCRCin << 1; <br />
} <br />
} <br />
InvertUint16(&wCRCin,&wCRCin); <br />
return (wCRCin) ; <br />
} </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]