1 Wire CRC STM32

OP #7516472
Lesenswert?

Hi,

ich versuche gerade, die CRC Berechnung von Maxim mit der 8Bit CRC nach AN187 durchzuführen. Dafür möchte ich das STM32-interne CRC Modul benutzen (STM32L010RBT6). Dazu verwende ich den Code aus dem Anhang. Das Problem ist, dass die falsche Prüfsumme am Ende rauskommt. Getestet habe ich gegen diese Website (https://www.lddgo.net/en/encrypt/crc) und gegen den empfangenen CRC Code. Der ausgelesene 64-Bit ROM Code ist: 0x6472779C1E64FF28. Der CRC Code ist ja dann 0x64 (was die Website auch korrekt berechnet). Den CRC Datenstrom schiebe ich wie folgt in das CRC_DR: 0x28 0xFF 0x64 0x1E 0x9C 0x77 0x72

Doch schon für das erste Byte (0x28) wird ein CRC Wert von 0x3F aus dem CRC_DR ausgelesen, die Website sagt für diesen Wert einen CRC Code von 0xE1.

Ich verstehe nicht was ich jetzt falsch mache. Die Registerwerte des initialisierten CRC Moduls sind im Anhang.

Danke schonmal im Voraus

Angehängte Dateien:
(Firma: egal) #7516487
Lesenswert?

Leopold N. schrieb:

Dazu verwende ich den Code aus dem Anhang. Das Problem ist, dass die falsche Prüfsumme am Ende rauskommt. Getestet habe ich gegen diese Website (https://www.lddgo.net/en/encrypt/crc) und gegen den empfangenen CRC Code.

Stimmen da überhaupt der Startwert und Polynom überein? Du verrätst uns ja leider nicht mit was für Werten du die Funktion aufrufst und auch nicht mit welchen Werten du auf der Webseite getestet hast. Man sieht auch nicht wie du das Array mit den 8Bit-Werten überhaupt verarbeitest...

OP #7516491
Lesenswert?

Dadurch, dass die richtige Prüfsumme (0x64) rauskommt, vermute ich mal stark, dass die richtigen Parameter gewählt wurden. Als Algorithm muss man natürlich CRC-8-MAXIM auswählen. Der Startwert steht im CRC_INIT Register (0x00) und das Polynom ist 0x31 im CRC_POL Register.

#7516516
Lesenswert?

Caste dein DR Pointer Mal explizit auf 8 Bit bevor du drauf schreibst. Ich hatte damals, als ich die Routinen für mich geschrieben habe, damit Probleme weil dann teilweise ein 32 Bit Zugriff auf das Register stattfand.

P.S. Code als Bild ist suboptimal.

#7516555
Lesenswert?

Leopold N. schrieb:

Doch schon für das erste Byte (0x28) wird ein CRC Wert von 0x3F aus dem CRC_DR ausgelesen, die Website sagt für diesen Wert einen CRC Code von 0xE1.

Ich verstehe nicht was ich jetzt falsch mache.

Die REV_IN und REV_OUT Einstellungen sind falsch (die müssen beide gesetzt werden). Wenn man die CRC so berechnet wie das CRC Modul konfiguriert ist kommt 0x3F heraus und nicht 0xE1.

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