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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von xor8 (Gast)


Bewertung
-1 lesenswert
nicht 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. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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. (achs)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
> ... Datenmengen recht groß ...

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

von xor8 (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Ok vielen Dank, ich schau mir den fetcher und crc8 an :)

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


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.