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
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...
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.
:
Bearbeitet durch User
Irgend W. schrieb: > Man sieht > auch nicht wie du das Array mit den 8Bit-Werten überhaupt > verarbeitest... Ich schreibe nacheinander die Werte Leopold N. schrieb: > 0x28 > 0xFF > 0x64 > 0x1E > 0x9C > 0x77 > 0x72 in das CRC_DR Register und lese danach den Wert aus dem CRC_DR Register aus.
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.
:
Bearbeitet durch User
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.
Ok, also REV_IN und REV_OUT zu setzen in Kombination mit explizitem 8-Bit Zugriff hat geholfen. Vielen Dank.
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.