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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren