#include #include #include #include /*********************************************************************/ uint32_t reverse(uint32_t x, int bits) /*********************************************************************/ { x = ((x & 0x55555555) << 1) | ((x & 0xAAAAAAAA) >> 1); // Swap _<>_ x = ((x & 0x33333333) << 2) | ((x & 0xCCCCCCCC) >> 2); // Swap __<>__ x = ((x & 0x0F0F0F0F) << 4) | ((x & 0xF0F0F0F0) >> 4); // Swap ____<>____ x = ((x & 0x00FF00FF) << 8) | ((x & 0xFF00FF00) >> 8); // Swap ... x = ((x & 0x0000FFFF) << 16) | ((x & 0xFFFF0000) >> 16); // Swap ... return x >> (32 - bits) ; } /*********************************************************************/ uint32_t crcX(uint32_t crc, uint8_t databit, uint32_t mirrpoly ) /*********************************************************************/ { // der braucht das gespiegelte Polynom crc = crc ^ (databit&1); if(crc&1) crc=(crc>>1)^mirrpoly; else crc=(crc>>1); return(crc); } /*******************************************************************/ uint32_t crc32(uint32_t crc, uint8_t byte) /*******************************************************************/ { int8_t i; crc = crc ^ byte; for(i=7; i>=0; i--) crc=(crc>>1)^(0xedb88320ul & (-(crc&1))); return(crc); } /*******************************************************************/ uint32_t crc16(uint16_t crc, uint8_t byte) /*******************************************************************/ { int8_t i; crc = crc ^ byte; for(i=7; i>=0; i--) crc=(crc>>1)^(0xa001u & (-(crc&1))); return(crc); } /*******************************************************************/ int main(int argc , char ** argv) /*******************************************************************/ { uint32_t reg = 0xffffffff; uint32_t reg16 = 0x0000,regreg; int16_t y[2]; int16_t n,k,m; int16_t yalt[2]; uint32_t poly32=reverse(0x04c11db7,32); uint32_t poly7 =reverse(0x09,7); uint32_t poly16 =0xa001u; uint32_t poly; uint8_t npoly; uint32_t crc; reg16=crc16(reg16,'0'); reg16=crc16(reg16,'1'); reg16=crc16(reg16,'2'); reg16=crc16(reg16,'3'); //printf("%04x %04x \n",reg16,reg16^0xffff); reg = 0xffffffff; reg=crc32(reg,(uint8_t)0x20); reg=crc32(reg,(uint8_t)0x00); reg=crc32(reg,(uint8_t)0x07); reg=crc32(reg,(uint8_t)0x70); reg=crc32(reg,(uint8_t)0x26); reg=crc32(reg,(uint8_t)0x68); reg=crc32(reg,(uint8_t)0xcd); reg=crc32(reg,(uint8_t)0x61); printf("%08x %08x \n",reg,reg^0xffffffff); reg = 0xffffffff; poly = poly32; for(k=0;k<8;k++) reg=crcX(reg,(uint8_t)((0x20>>k)&1),poly); for(k=0;k<8;k++) reg=crcX(reg,(uint8_t)((0x00>>k)&1),poly); for(k=0;k<8;k++) reg=crcX(reg,(uint8_t)((0x07>>k)&1),poly); for(k=0;k<8;k++) reg=crcX(reg,(uint8_t)((0x70>>k)&1),poly); for(k=0;k<8;k++) reg=crcX(reg,(uint8_t)((0x26>>k)&1),poly); for(k=0;k<8;k++) reg=crcX(reg,(uint8_t)((0x68>>k)&1),poly); for(k=0;k<8;k++) reg=crcX(reg,(uint8_t)((0xcd>>k)&1),poly); for(k=0;k<8;k++) reg=crcX(reg,(uint8_t)((0x61>>k)&1),poly); printf("%08x %08x \n",reg,reg^0xffffffff); reg = 0x7f; poly = poly7; // 9 Bit senden reg=crcX(reg,0,poly); reg=crcX(reg,1,poly); reg=crcX(reg,0,poly); reg=crcX(reg,1,poly); reg=crcX(reg,0,poly); reg=crcX(reg,1,poly); reg=crcX(reg,0,poly); reg=crcX(reg,1,poly); reg=crcX(reg,1,poly); // CRC7 ist 0x49 reg=crcX(reg,1,poly); reg=crcX(reg,0,poly); reg=crcX(reg,0,poly); reg=crcX(reg,1,poly); reg=crcX(reg,0,poly); reg=crcX(reg,0,poly); reg=crcX(reg,1,poly); //for(k=0;k<8;k++) reg=crcX(reg,(uint8_t)((0x26>>k)&1),poly); //for(k=0;k<8;k++) reg=crcX(reg,(uint8_t)((0x68>>k)&1),poly); //for(k=0;k<8;k++) reg=crcX(reg,(uint8_t)((0xcd>>k)&1),poly); //for(k=0;k<8;k++) reg=crcX(reg,(uint8_t)((0x61>>k)&1),poly); printf("%08x %08x \n",reg,poly7); return; }