Forum: Mikrocontroller und Digitale Elektronik Datensicherheit einer Übertragung


von Michael W. (Gast)


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

von Hendi (Gast)


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

von A.K. (Gast)


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.

von Checker (Gast)


Lesenswert?

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

von Christian S. (kriki)


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.

von TravelRec. (Gast)


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?

von Peter D. (peda)


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

von Checker (Gast)


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.

von TravelRec. (Gast)


Lesenswert?

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

von Michael W. (Gast)


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

von TravelRec. (Gast)


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.

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.