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
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?
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
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.
> ... Datenmengen recht groß ...
Wie groß ist ein zu prüfender/zu sichernder Datensatz? Eventuell reicht
CRC8.
>> 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.
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
>>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.
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
Für CRC gibt es auch fertige VHDL Beschreibungen. Oder Generatoren wie hier: http://outputlogic.com/?page_id=321
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.