Guten Morgen, bezüglich einer CRC Berechnung über eine Firmware von insgesamt 128kByte suche ich ein Verfahren und wie man dieses realisieren könnte.
Google spuckt sowas aus: https://www.lammertbies.nl/comm/info/crc-calculation.html Warum geht das nicht?
Implementiere den CRC Algorithmus wie er auf Wikipedia steht. Was gibt's da noch an Verfahren zu suchen?
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.
Die Microchip PIC24er Familie hat eine "CRC-Engine" an Bord: http://ww1.microchip.com/downloads/en/DeviceDoc/39714a.pdf
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
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...
Ich möchte eine CRC32 Berechnung realisieren. Die Berechnung soll auf der PC Seite sowie im Mikrocontroller durchgefühert werden.
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.
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_Redundanzpr%C3%BCfung 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.
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.
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 | }
|
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/aim-mc/dave_downloads.html
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.
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 | }
|
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.
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.