mikrocontroller.net

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.
Autor: xor8 (Gast)
Datum:

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

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

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?

Autor: Dergute W. (derguteweka)
Datum:

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

Autor: A. S. (achs)
Datum:

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.

Autor: Bernd (Gast)
Datum:

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

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

Autor: xor8 (Gast)
Datum:

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.

Autor: Irgendwer (Gast)
Datum:

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

Autor: xor8 (Gast)
Datum:

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.

Autor: xor8 (Gast)
Datum:

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

Autor: Tobias B. (Firma: www.elpra.de) (ttobsen)
Datum:

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

Autor: PittyJ (Gast)
Datum:

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

Autor: U.G. L. (dlchnr)
Datum:

Bewertung
0 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

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.

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