Forum: FPGA, VHDL & Co. einfache 8 bit Prüfung von Paketen


von xor8 (Gast)


Lesenswert?

hi,

Bei der Datenübertragung von einem µC und FPGA wollte ich gern schnell 
und simple feststellen ob die Daten noch ok sind.

Ich hatte ähnlich wie bei der UART an die Parität mittels einem 
Byteweisen XOR gedacht. Da die Datenmengen recht groß sind habe ich 
angst, dass zwei Bits gekippt sein könnten und damit wird der Fehler 
nicht erkannt.

Habt ihr eine bessere Idee als XOR8? Eine CRC16 scheint mir wieder zu 
aufwändig.

mfg

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

xor8 schrieb:
> Bei der Datenübertragung von einem µC und FPGA
Seriell oder parallel?

> Eine CRC16 scheint mir wieder zu aufwändig.
Wenn die Daten seriell reinkommen, dann ist das nur ein kleines 
Schieberegister mit 16 Flipflops.

> Da die Datenmengen recht groß sind habe ich angst, dass zwei Bits
> gekippt sein könnten
Was hat das mit der Datenmenge zu tun, wenn du die "Checksum" immer auf 
8 Bits anwendest? Dann müssten je gerade mal 2 oder 4 oder 6 oder alle 8 
Bits in diesen 8 Bits gekippt sein. Warum ist deine Übertragungskette so 
schlecht?

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Das kann dir immer passieren, dass du bei (zu) vielen Fehlern (fuer den 
gewaehlten Algorithmus) ploetzlich auch mal keinen Fehler mehr erkennst.
Spontan fallen mir noch ein: Aufsummieren aller Bytes, Fletchers 
Checksum. CRC ist eigentlich nicht soooo aufwendig.

Gruss
WK

von A. S. (Gast)


Lesenswert?

Dergute W. schrieb:
> CRC ist eigentlich nicht soooo aufwendig.

Vermutlich sogar die einfachste Art überhaupt. Beim Senden hinten 1 Byte 
dran, beim empfangen am Ende auf einen festen wert prüfen, ein 
Schieberegister mit 2 oder 3 XORs, ... Einfacher geht's kaum.

von Bernd (Gast)


Lesenswert?

> ... Datenmengen recht groß ...

Wie groß ist ein zu prüfender/zu sichernder Datensatz? Eventuell reicht 
CRC8.

von xor8 (Gast)


Lesenswert?

>> Seriell oder parallel?
Ich übertrage die Daten Parallel.

>> Wie groß ist ein zu prüfender/zu sichernder Datensatz? Eventuell reicht
CRC8.
Ein Frame kann auch mal 256 byte lang sein.

von Irgendwer (Gast)


Lesenswert?

Die frage ist ob du jedes Byte einzeln sichern willst oder einen ganzen 
Block von übertragen Bytes am ende überprüfen willst.

Für einzelne wäre eventuell eine Anleihe bei ECC-RAM möglich wie es dort 
gemacht wird:
https://en.wikipedia.org/wiki/ECC_memory

von xor8 (Gast)


Lesenswert?

>>Die frage ist ob du jedes Byte einzeln sichern willst oder einen ganzen
>>Block von übertragen Bytes am ende überprüfen willst.
Ohh nein, mir genügt nur die Aussage ob alles ok ist. Falls nicht, dann 
wird das gesamte Frame nochmal geschickt.

von xor8 (Gast)


Lesenswert?

Ok vielen Dank, ich schau mir den fetcher und crc8 an :)

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Lothar M. schrieb:
> Wenn die Daten seriell reinkommen, dann ist das nur ein kleines
> Schieberegister mit 16 Flipflops.

Selbst wenn die Daten parallel reinkommen ist das kein Aufwand. 
Generatoren die die XOR Verknuepfungen aufbauen gibt es genuegend im 
Netz, z.B.:

https://www.easics.com/webtools/crctool

oder

http://outputlogic.com/?page_id=321

von PittyJ (Gast)


Lesenswert?

Für CRC gibt es auch fertige VHDL Beschreibungen.
Oder Generatoren wie hier:
http://outputlogic.com/?page_id=321

von U.G. L. (dlchnr)


Lesenswert?

xor8 schrieb:
> Ok vielen Dank, ich schau mir den fetcher und crc8 an :)

Da Du ja offenbar auch eine Hardwarelösung brauchst, ist ein CRC16 bei 
256Byte das einfachste - ein CRC8 würde mir bei 256Byte nicht genügen.

: Bearbeitet durch User
von Rolf S. (audiorolf)


Lesenswert?

Stimme ich zu. Wir verwenden in einer Anwendung für 512 Bytes brutto 
sogar einen CRC32, alelrdings als FEC mit erweiterter Hamming-Distanz.

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.