CRC Berechnung Firmware

Gast #4737731
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...
Gast #4737793
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.
Gast #4737820
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 
:)
1
uint32_t crc32_check (uint8_t* buf, uint16_t len) {
2

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

7
  if(!CRCenabledFlag) {
8
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);
9
  }
10
  CRC_ResetDR();
11

12
  for(index = 0; index < BufferLength; index++) {
13
     CRC->DR = __RBIT(pBuffer[index]);
14
  }
15
  return __RBIT(CRC->DR) ^ 0xFFFFFFFF;
16
}
Gast #4737835
Lesenswert?
• ▲
▼
Die folgende Implemntierung bringt mir auf der PC Seite nichts.
1
uint32_t crc32_check (uint8_t* buf, uint16_t len) {
2

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

7
  if(!CRCenabledFlag) {
8
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);
9
  }
10
  CRC_ResetDR();
11

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

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.