mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CRC Berechnung Firmware


Autor: Leonhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen,

bezüglich einer CRC Berechnung über eine Firmware von insgesamt 128kByte 
suche ich ein Verfahren und wie man dieses realisieren könnte.

Autor: PittyJ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Google spuckt sowas aus:
https://www.lammertbies.nl/comm/info/crc-calculation.html

Warum geht das nicht?

Autor: Dr. Sommer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Implementiere den CRC Algorithmus wie er auf Wikipedia steht. Was gibt's 
da noch an Verfahren zu suchen?

Autor: Leonhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf dieser Seite war ich bereits schon. Mir ist nur noch nicht ganz klar 
wie so eine CRC Berechnung über einen 128kByte Block realisiert werden 
kann.

Autor: Leonhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Natürlich ohne Lookup Tabelle.

Autor: Michael Demuth (Firma: indEAS) (indeas)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Microchip PIC24er Familie hat eine "CRC-Engine" an Bord:
http://ww1.microchip.com/downloads/en/DeviceDoc/39714a.pdf

Autor: Viewer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leonhard schrieb:
> Guten Morgen,
>
> bezüglich einer CRC Berechnung über eine Firmware von insgesamt 128kByte
> suche ich ein Verfahren und wie man dieses realisieren könnte.

CRC32 oder ADLER32

Autor: Erwin D. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Viewer schrieb:
> Leonhard schrieb:
>> Guten Morgen,
>>
>> bezüglich einer CRC Berechnung über eine Firmware von insgesamt 128kByte
>> suche ich ein Verfahren und wie man dieses realisieren könnte.
>
> CRC32 oder ADLER32

Adler berechnet KEINE CRC

Zur CRC ist auch wichtig zu wissen, welches Polynom verwendet wird und 
welcher Startwert. Wenn die nicht übereinstimmen bei Sender und 
Empfänger, kommen unterschiedliche Ergebnisse raus und somit nützt das 
nix...

Autor: Leonhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte eine CRC32 Berechnung realisieren.
Die Berechnung soll auf der PC Seite sowie im Mikrocontroller 
durchgefühert werden.

Autor: Leonhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt auf dem Mikrocontroller einen CRC Engine. Allerdings weiss ich 
die exakte Implementierung nicht. Auf der PC Seite soll ja auch die 
Berechnung durchgeführt werden.

Autor: Leonhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Startwert: 0
Polynom: 0x4C11DB7

Autor: Erwin D. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leonhard schrieb:
> Startwert: 0
> Polynom: 0x4C11DB7

Damit hast du doch schon alles, ws du brauchst. Die Umsetzung ist hier 
beschrieben.
https://de.wikipedia.org/wiki/Zyklische_Redundanzp...

Wenn das nicht reicht, gibt es noch die Suchmaschine deines geringsten 
Mißtrauens. Da gibt es unzählige Beispiele, wie man den Algorithmus 
implementieren kann.

Autor: Erwin D. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nochwas: Wenn auf dem (unbekannten) µC eine CRC-Engine existiert, gibts 
da bestimmt ein Datenblatt und Application Notes vom Hersteller. Und 
auch dafür existieren garantiert Beispiele und Anleitungen in Hülle und 
Fülle. Wenn du verrätst, um welchen µC es sich handelt, findet sich hier 
im Forum vielleicht sogar jemand, der genau das schonmal gemacht hat und 
dir Tipps geben kann.

Autor: Kaj (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leonhard schrieb:
> Polynom: 0x4C11DB7
Meinst du nicht eher 0x104C11DB7 ?

Autor: Leonhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich benutzte den XMC4700 von Infineon.

Autor: ♪Geist (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leonhard schrieb:
> Guten Morgen,
>
> bezüglich einer CRC Berechnung über eine Firmware von insgesamt 128kByte
> suche ich ein Verfahren und wie man dieses realisieren könnte.

Hier bitte schön, das habe ich aus meiner Firmware für dich rausgekrammt 
:)
uint32_t crc32_check (uint8_t* buf, uint16_t len) {

  uint32_t* pBuffer = (uint32_t*)buf;
  uint32_t BufferLength = (len/4);
  uint32_t index = 0;

  if(!CRCenabledFlag) {
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);
  }
  CRC_ResetDR();

  for(index = 0; index < BufferLength; index++) {
     CRC->DR = __RBIT(pBuffer[index]);
  }
  return __RBIT(CRC->DR) ^ 0xFFFFFFFF;
}

Autor: ♪Geist (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
EDIT: Ahh jetzt...Ha

Leonhard schrieb:
> Ich benutzte den XMC4700 von Infineon.

Ach jetzt...
Schau Hier: habe für dich gegoogelt:
http://www.infineon.com/cms/en/product/promopages/...

Autor: Leonhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die interne CRC Berechnung von Infineon habe ich schon Inbetrieb 
genommen.
Die Berechnung scheint auch zu funktionieren. Jetzt benötige ich diese 
Implementierung auch auf der PC Seite.

Autor: Leonhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die folgende Implemntierung bringt mir auf der PC Seite nichts.
uint32_t crc32_check (uint8_t* buf, uint16_t len) {

  uint32_t* pBuffer = (uint32_t*)buf;
  uint32_t BufferLength = (len/4);
  uint32_t index = 0;

  if(!CRCenabledFlag) {
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);
  }
  CRC_ResetDR();

  for(index = 0; index < BufferLength; index++) {
     CRC->DR = __RBIT(pBuffer[index]);
  }
  return __RBIT(CRC->DR) ^ 0xFFFFFFFF;
}

Autor: Erwin D. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leonhard schrieb:
> Jetzt benötige ich diese
> Implementierung auch auf der PC Seite.

Dann schau dir mal den verlinkten Wikipedia-Artikel an. Da steht ein 
C-Beispiel für die CRC32 drin.

Autor: DerDan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Tool SRecCut http://srecord.sourceforge.net/ kann ganz tool CRC 
berechnungen durchfüren und in dein Image einfügen. Auch der IAR 
Compiler bringt dafür Tools mit...

mfg

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.