Forum: Mikrocontroller und Digitale Elektronik CRC Polynom für Extended Hamming Code (11, 16)


von Oskar M. (Gast)


Lesenswert?

Hallo,

Ich möchte eine SPI Übertragung per CRC absichern.
Es geht um einen Motorregler für den Traktionsantrieb eines 
Modellfahrzeugs. Der Regler basiert auf einem STM32F405 und arbeitet mit 
16kHz Regeltakt. Über Voll-Duplex SPI werden via DMA asynchron ca alle 
20ms 3 Datenpakete a 16 Bit empfangen. Eine CS Leitung gibt es nicht, 
nach dem empfangen des letzten Datenpakets wird aber eine gewisse Zeit 
gewartet, bis neu empfangen wird. Darüber soll sichergestellt werden, 
dass die Datenpakete in der richtigen Reihenfolge und nicht bitweise 
verschoben ankommen. Nach einem Reset einer der beiden beteiligten µC 
könnten aber durchaus 3 falsche Pakete empfangen werden. Diese sollen 
auf jeden Fall detektiert werden.
Da für meine Nutzdaten (Sollgeschwindigkeit, zulässige 
Maximalbeschleunigung und zulässiger Ruck) 10 bis 11 Bit ausreichend 
sind und der STM ja über eine Hardware CRC Einheit verfügt würde ich die 
Übetragung gerne per CRC absichern. Würden falsche Daten empfangen gäbe 
es für ca 20ms (bis zur nächsten Übertragung) falsche Sollwerte.
Ich habe nicht besonders viel Ahnung von Codierungstheorie, bin aber bei 
meiner Recherche auf den Hamming Code gestoßen, mit dem auch ein Bit 
Fehler korrigierbar sind. Da ich 16 Bit zur Verfügung habe würde sich 
der extended Hamming Code (16, 11) anbieten. Ist der für diesen 
Anwendungszweck geeignet? In diesem Thema 
(Beitrag "Hamming Code") ist die Rede davon, dass 
der Hamming Code bei verschobenen Bits nutzlos ist.

Falls er geeignet wäre, wie mache ich aus den CRC Polynomen des Hamming 
Code (15, 11) ( z^4 + z + 1 ) und dem CRC Polynom für Parity Bits ( x + 
1 ) ein neues CRC Polynom? Kann ich die einfach multiplizieren und die 
Vorfaktoren modulo 2 nehmen ( z^5 + z^4 + z^2 + 1 )? Die Ordnung des 
Polynoms ist die  die ich erwarten würde.

Falls nein, welchen Code könnte ich nehmen?


LG und vielen Dank,
Oskar

von Oskar M. (Gast)


Lesenswert?

EDIT: Mir ist bewusst, dass die Hardware CRC Einheit keine Fehler 
korrigieren wird. Ich würde die Einheit benutzen, um komplett fehlerfrei 
übertragene Pakete (oder solche, deren Fehler nicht detektierbar sind) 
direkt weiter zu verwenden, in den Übrigen würde ich dann versuchen 
Fehler zu korrigieren und sie andernfalls komplett verwerfen.

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
Noch kein Account? Hier anmelden.