mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CRC-Neuling


Autor: Johannes Lange (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gerd T. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: MichaelS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Johannes Lange (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.