STM32 und CRC32 auf Datenlänge nicht durch 4 teilbar

OP #5394008
Lesenswert?
• ▲
▼
Hallo Forum,
ich berechne mit der HW-Einheit auf dem STM32 eine CRC32.
- Initialisieren
- Byte-Array auf 32Bit-Array casten
- nacheinander 32Bit-Werte aus dem Array ins DR schreiben
- am Ende DR lesen, XOR mit 0xFFFFFFFF

Das ganze funtioniert auch super, es kommt genau der Wert raus, den ich 
benötige.
Jetzt habe ich allerdings Daten deren Länge nicht durch 4 teilbar ist. 
Dann funktioniert das ganze nicht mehr.
Speziell geht es um den Chunk einer png-Datei. Der ist 4 + 13 Bytes 
lang:
0x49 0x48 0x44 0x52 0x00 0x00 0x01 0x90 0x00 0x00 0x01 0x2C 0x01 0x00 
0x00 0x00 0x00 -> CRC=0xC5CCD86F

Wie kann ich das auf dem STM rechnen? Denn ich kann nur 32 auf einmal 
reinschreiben. Kann man die Länge festlegen?

Danke für Antworten
Gast #5394109
Lesenswert?
• ▲
▼
Rangi J. schrieb:
> Wie kann ich das auf dem STM rechnen? Denn ich kann nur 32 auf einmal
> reinschreiben. Kann man die Länge festlegen?

Wie kommst du darauf?
1
    for(idx = 0; idx < CSE_SwDlCmd.Len; idx++)
2
    {
3
        *(__IO uint8_t*)(&CRC->DR) = CSE_ApplUpdtArr[idx];
4
    }

Funktioniert wunderbar.
Oder welche STM32 hast du, dass dieser es verbietet byteweise ins DR zu
schreiben?

"The CRC (cyclic redundancy check) calculation unit is used to get a CRC
code from 8-, 16- or 32-bit data word and a generator polynomial."
Gast #5394150
Lesenswert?
• ▲
▼
Moin,

interessant! Ich dachte die CRC Einheiten wären gleich.

Aber der die F4 scheinen tatsaechlich nur 32bit writes zu erlauben:
"The CRC registers have to be accessed by words (32 bits)."

Dann hilft wohl nur auf 4 byte aligned aufzufüllen. Wenn das nicht geht,
muss man wohl die letzten 1..3 Bytes in SW nachrechnen. Also die
zwischen CRC aus der HW als Initialwert fuer die SW CRC nehmen. Sind ja
zum Glück nur maximal 3 bytes.
Gast #5394318
Lesenswert?
• ▲
▼
Wenn man das noch so macht, wie man das "immer" gemacht hat, dann ein 
Vielfaches von vier mit der Hardware rechnen, den Wert aus DR lesen, die 
fehlenden Bytes (maximal drei) mit einer Software-Version des 
Algorithmus zu addieren und zum Abschluss  ^ 0x

Padding (Auffüllen) mit Nullen funktioniert nicht! Das gibt komplett 
andere CRCs. Das ist eine gewünschte Eigenschaft von CRCs, NUllen sind 
relevant. Das sind keine simplen Summen, bei denen das Addieren von 
Nullen nichts ändern würde.

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.