mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STM32 und CRC32 auf Datenlänge nicht durch 4 teilbar


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Rangi J. (rangi)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Darth Moan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?
    for(idx = 0; idx < CSE_SwDlCmd.Len; idx++)
    {
        *(__IO uint8_t*)(&CRC->DR) = CSE_ApplUpdtArr[idx];
    }

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."

Autor: Rangi J. (rangi)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
F411
"Each write operation into the data register creates a combination of 
the previous CRC value and the new one (CRC computation is done on the 
whole 32-bit data word, and not byte per byte)."

Autor: Darth Moan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jack (Gast)
Datum:

Bewertung
2 lesenswert
nicht 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

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.