Forum: Mikrocontroller und Digitale Elektronik CRC-Neuling


von Johannes Lange (Gast)


Lesenswert?

Hallo Zusammen,

ich benoetige, fuer eine Datenuebertragung nach DIN EN 60870-5-1 eine
CRC-Pruefsummenberechnung fuer folgendes Polynom:
X^7 + X^6 + X^5 + X^2 + 1
Hat jemand fuer die zugehoerige CRC-Berechnung einen passenden
Quell-Code? Oder kann mir jemand erklaeren, wie soetwas berechnet
wird?

Schon mal vielen Dank

Gruß
Johannes

von Gerd T. (Gast)


Lesenswert?

Hi,

ich hab den hier genommen


unsigned char crc(unsigned char size, unsigned int * mem, unsigned char
crc)
{
   #define poly 0x1021 // g(x) = x^16+ x^12 + x^5 + 1
   unsigned int i;
   unsigned char j, b, m;

   // While (more message bits)
   for (i=0; i < size; i++)
   {
      m = mem[i];
      for( j = 8; j; j-- )
      {
         b = 0;
         if(crc & 0x80)//00)
            b++;
         crc <<= 1;           // Shift the register left by one bit,
         if ((m & 0x80) != 0)
           crc |= 1;
         m <<= 1;
         if (b != 0)  // If (a 1 bit popped out during step 3)
           crc ^= poly;          // Register = Register XOR Poly.
       }
   }
   return crc;
}

musst halt nur das Polynom anpassen.

Ob der deiner Norm entspricht weis ich allerdings nicht.

MfG
GT

von MichaelS (Gast)


Lesenswert?


von Johannes Lange (Gast)


Lesenswert?

Hallo,
@MichaelS: Vielen Dank fuer die hilfreichen Links.

@Gerd T.: Anhand des CRCGUIDE.HTM (s. Links von MichaelS) habe ich
heraus gefunden, das aus dem Polynom X^16+X^12+X^5+1 der Hex-Wert des
Polynoms so ermittelt wird, in dem die fuehrende 1 (X^16 = 17.Bit)
einfach weggelassen wird.

Muss ich beim Polynom X^7+X^6+X^5+X^2+1 auch die fuehrende 1 (X^7 =
8.Bit) weglassen (ergibt 0x65) oder bleibt die fuehrende 1, da es ja
nur 8 bits sind (ergibt 0xE5)?

Waere gut wenn Du (oder irgend jemand) mir da weiter helfen koennte.

Gruß

Johannes

von Oliver (Gast)


Lesenswert?

Hallo Johannes,

Dein Polynom heißt 0xE5. x^7 entspricht 2^7, x^6 entspricht 2^6. Paßt
also alles in Dein Byte.

@Gert: Was ist das denn für eine CRC-Berechnung? Du rechnest mit einem
16-Bit CCITT-Polynom und gibts nur einen 8-Bit Wert zurück???


Grüße
Oliver

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.