mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Datensicherheit einer Übertragung


Autor: Michael W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich überleg mir gerade eine einfache Möglichkeit, die
Übertragungssicherheit vom PC zu einem Microcontroller zu
gewährleisten.

Reicht es aus, ähnlich wie beim Intel-Hex-Format einfach eine negative
Checksumme ans Ende zu hängen?
Es wäre halt einfach zu implementieren.
Ich könnte mir auch vorstellen, ans Ende der Übertragung das Ergebnis
einer exklusiven Veroderung aller Bytes zu hängen.

Welche von den beiden Methoden wäre sicherer/besser?

MW

Autor: Hendi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kommt auf dein Datenformat (Blöcke, Strom, sonstwas) und andere
Randbedingungen (Prozessorzeit etc.) an, ob du Daten neu anfordern
kannst oder lieber aus defekten Daten Fehler rausrechnest.
XOR/MOD etc. sind auf alle Fälle gute Kandidaten um Fehler einfach zu
finden und zu akzeptieren. Wenns darüber hinausgeht wirds komplexer.

Grüße,

Hendi

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn AVR und C, dann findet sich in der avrlibc eine crc16 Routine, die
sich exzellent zur Datenkontrolle eignet, viel besser als jede
Prüfsumme. Und auch auf den PC übertragbar ist.

Autor: Checker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
'Cyclic redundancy check' (CRC) ist doch eine Prüfsumme, oder? Ist in
der Tat am sichersten!

Autor: Christian Schoch (kriki)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für normale Sicherheit ist CRC (8 oder 16Bit) sicherlich zu bevorzugen.
Und für das ganze ist sicherlich keine Lib erforderlich.

Einfach jeweils ein oder 2 Byte zu der Summe addieren, am Schluss den
Overflow unten wieder dazu, Einerkompliment, Fertig.

Beim Kontrollieren alle Bytes inkl. Summe zusammenzählen, solle Null
ergeben.

Aufwand: 10min und ca. 20 Zeilen in ASM.

Falls es dann doch mit Fehlererkennung sein sollte, gibts Sachen wie
(n,k) Block Codes und Viterbi Decoding.

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Momentan stelle ich mir gerade die Sinnfrage, aber das wird mir Michael
sicher beantworten können... Die Datensicherheit eines vernünftigen
RS232-Kabels bis zu einer Länge von 30m, gepaart mit einem sauber
layouteten MAX232-Areal auf der Controller-Platine, verbunden mit dem
äußerst umgänglichen AVR-USART, da liegt die Fehlerrate (zumindest bei
meinen Schaltungen) bei nahezu 0,00%, ist da CRC nicht ein wenig
oversized?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Summen oder EXORs haben den Nachteil, daß sich viele Fehler kompensieren
können (korrekter Prüfwert trotz 2 Fehler).


Eine CRC (Cyclic Redundancy Check) hat dagegen eine sehr gute
Fehlererkennung und ist auch nicht viel aufwendiger:

http://www.maxim.de/appnotes.cfm/appnote_number/27


Peter

Autor: Checker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
CRC würde ich bei einer kabelgebundenen Übertragung auch nur benutzen
wenn's auf absolute Sicherheit ankommt. Ansonsten sind da echt keine
Fehler zu finden. CRC macht Sinn bei drahtloser Übertragung oder auf
lange Strecken.

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das wollte ich damnit sagen ;-) vielleicht sagt der Michael ja noch mehr
dazu.

Autor: Michael W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ALL: Danke für die Antworten...

Hier mal die Specs:

Kabel:   2m
Baud:    115200
µC:      AT89S53

Layout natürlich mit Masseflächen, jede Menge 100nF Caps an den ICs
usw.

Wenn ich euch richtig verstanden habe, kann ich auf die Prüfung
verzichten.
Dann prüf ich nur, ob richtige (sinnvolle) Daten ankommen, da ich noch
nicht weiss, ob die Kommunikation wie jetzt im Entwicklungsstadium per
Hyperterminal oder vielleicht mal per PC-Software gemacht wird. Bei
Hyperterminal hat man sich ja gern schnell mal vertippt :-)

MW

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenn´ den 89S53 zwar nicht, aber Kontrollflags wird das UART wohl
haben, so von wegen FrameError, DataOverrun und ParityError? Kannst ja
noch ´ne Parität und noch ein StoppBit übertragen, dann wird der Frame
länger und Fehler wirken sich stärker aus, wenn dann noch alles paßt,
sollte die Verbindung gut sein.

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]
  • [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.