使用的CRC-8/MAXIM:
参数模型: x8+x5+x4+1
在调试MAXIM一款ds2401芯片的时候,crc的验证
成功代码记录:
环境采用了啊哈C编译 代码来自网络
- #include <stdio.h>
- #include <stdlib.h>
- //CRC8 CRC 校验的等效多项式是: CRC = x8 + x5 + x4 + 1 DS2401
- /*
- 测试用例
- 使用的CRC-8/MAXIM:
- 参数模型: x8+x5+x4+1
- 多项式(hex):31
- 计算CRC初始值(hex):00
- 计算结果异或值(hex): 00
- 输入Ascii:123456789
- 结果(hex):A1
- */
- unsigned char CRC8Calculate(void *pBuf ,unsigned pBufSize)
- {
- unsigned char retCRCValue=0x00;
- unsigned char *pData;
- int i=0;
- unsigned char pDataBuf=0;
- // retCRCValue=0x01;
- pData=(unsigned char *)pBuf;
- // pDataBuf=pData[0];
- // cout<<hex<<pDataBuf<<endl;
- while(pBufSize--)
- {
- pDataBuf=*pData++;
- for(i=0;i<8;i++)
- {
- if((retCRCValue^(pDataBuf))&0x01)
- {
- retCRCValue^=0x18;
- retCRCValue>>=1;
- retCRCValue|=0x80;
- // printf("i=%d;retCRCValue=%x\n",i,retCRCValue);
- }
- else
- {
- retCRCValue>>=1;
- // printf("i=%d;retCRCValue=%x\n",i,retCRCValue);
- }
- pDataBuf>>=1;
- }
- }
- return retCRCValue;
- }
- int main()
- {
- #if 0
- //输入Ascii:123456789
- //结果(hex):A1
- unsigned char tempbuffer[15]={0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x00,0x00,0x00,0x00 };
- int i=0;
- tempbuffer[10]=CRC8Calculate(tempbuffer,9);
- #endif
- unsigned char tempbuffer[15]={0x02,0x24,0x8b,0x00,0x10,0x00,0x00,0x38,0x39,0x00,0x00,0x00,0x00 };
- int i=0;
- tempbuffer[10]=CRC8Calculate(tempbuffer,7);
- for(i=0;i<15;i++)
- {
- printf("%x ",tempbuffer[i]);
- }
- printf("\n");
- system("pause");
- return 0;
- }
程序运行:
逻辑分析仪: