Forum: Mikrocontroller und Digitale Elektronik CRC-Neuling


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.