simple und sichere Datenübertragung?

Gast #2700475
Lesenswert?

Für ein Master-Slave System (1 zu n) soll eine simple Methode der 
Datenübertragung angewandt werden. Die Übertragung erfolgt seriell und 
byteweise:

- erstes Byte: Salve-Adresse
- zweites Byte: Kommando an Slave
- drittes Byte: XOR aus 1. u. 2. Byte

Alle Slaves lesen alle Bytes mit und schieben sie durch einen 
3-Byte-Puffer. Nur wenn die Bedingungen erfüllt sind (Adresse stimmt, 3. 
Byte ergibt XOR aus Adresse und Kommando) reagiert der Slave.

Kann man annehmen, dass so ein System sicher ist? Also schlimmstefalls 
reagiert ein Slave wegen Übertragungsstörungen nicht, aber es kommt 
niemals vor, dass ein falscher Slave anspricht ... ?
#2700477
Lesenswert?

Frank schrieb:
> erstes Byte: Salve-Adresse

Gaius Julius Casar hat Adresse 0x00. Der Master also ;)

Frank schrieb:
> (1 zu n)

Die Slaves haben also die Adressen von 0x01 bis 0xFF.

Frank schrieb:
> Alle Slaves lesen alle Bytes mit und schieben sie durch einen
> 3-Byte-Puffer. Nur wenn die Bedingungen erfüllt sind (Adresse stimmt, 3.
> Byte ergibt XOR aus Adresse und Kommando) reagiert der Slave.

Als Byteweiser Puffer mit Byteweisem Schieben. Das heißt aber auch, dass 
die SPI des steuernden Prozessors immer Synchron bleiben muss.

Der Master kann erst bei einer Rückantwort des Slave überhaupt ven 
dessen Busteilnahme ausgehen. Wenn unerwünschte Glitches auf dem Takt 
kommen, naja.

Der Schutzmechanismus mit XOR ist im Prinzip ein Parity auf Bits 
gleicher Bitnummer der Adresse und des Kommandos. Das System ist über 
diese zwei Bits nach Hamming 1-erkennend. Reicht dir das aus? Mit 
UART-Funktionen am SPI-Modul des Prozessors könnte man sogar einen 
zweidimensionalen Parity schaffen...

mfg mf
Gast #2700516
Lesenswert?

Als "sicher" ist das wohl nicht zu bezeichnen, wenn nicht mal klar ist, 
ob der Slave das für ihn bestimmte Kommando überhaupt mitbekommen hat.
Den Hammingabstand sollte man auf 3 erhöhen, so dass zumindest 
Einzelfehler bei der Übertragung ausgebügelt werden können und man über 
deren Häufigkeit ein Maß für die Streckenqualität hat, ohne dass die 
Übertragung gleich zusammenbricht.
#2700543
Lesenswert?

Ich würde Prüfsummen empfehlen, die simple Defekte wie eine permanent 0 
liefernde Leitung nicht als gültigen Frame erkennen.

Gibt es eine eindeutige Methode, den Anfang eines Frames zu erkennen? 
Oder kann es sein, dass ein Slave aus irgendeinem Grund anfängt, immer 
das zweite Byte als Adresse, das dritte als Kommando und das 
nachfolgende erste als Checksum zu interpretieren? Oder ist sogar eine 
bitweise verschobene Interpretation nicht auszuschliessen?
Gast #2700977
Lesenswert?

_Gast schrieb:
> Wieviele Leitungen?
- insgesamt 4: Plus, Masse, Daten RX, Daten TX
> Welches System (syncron/asyncorn)?
- UART, 8N1, 1200 Bit/s, TTL-Pegel
> Länge der strecke?
- 20 Meter 6pol. Flachbandkabel mit aufgepressten Steckerwannen, bis zu 
40 Slaves, am Ende 10k Pulldown (positive TTL-Logik).

Die Slaves senden nur, wenn sie "Gefragt" werden, TX-Leitungen per 
Dioden ver-"odert".

@Werner: Durch die vorgegebene Bedingung kann deine Befürchtung 
eigentlich nicht eintreten. Jedes Byte wird von allen Slaves empfangen 
und in eine 3-Byte-Queue geschoben, das älteste fällt dabei jeweils 
heraus bzw. weg.

Nach jedem Empfang eines Bytes wird die Prüfung gemacht und nur wenn die 
genannten Bedingungen zutreffen ((a ist eine gültige und die eigene 
Adresse) UND (b ist ein gültiges Kommando) UND (c ist der XOR-Wert aus a 
mit b)), reagiert der Save ...

Wenn ich da keinen Denkfehler drin habe (deshalb die Frage hier im 
Forum), sollten diese Zustände quasi ein-eindeutig sein, oder?
(Firma: Schweigstill IT) Persönliche Seite #2701001
Lesenswert?

Das, was Du bislang beschrieben hast, ist Deine Wunschvorstellung, wie 
sich das Protokoll bzw. die Busteilnehmer verhalten sollen.

Es fehlt jedoch jegliche Untersuchung der möglichen Fehler und eine 
darauf basierende statistische Betrachtung. Es ist nicht möglich, ein 
"perfektes" Protokoll zu entwickeln, sondern nur die 
Eintrittwahrscheinlichkeit a) korrigierbarer, b) nicht korrigierbarer, 
aber feststellbarer, c) nicht feststellbarer Fehler auf ein 
spezifiziertes Niveau zu senken.

Auf jeden Fall genügt es nicht, bei einem UART-basierten Protokoll auf 
Bitfehler in den (acht) Nutzdatenbits zu schauen, sondern es müssen 
dabei auch die Start- und Stopp-Bits mit herangezogen werden.
Gast #2701008
Lesenswert?

Hi

>- UART, 8N1, 1200 Bit/s, TTL-Pegel
>> Länge der strecke?
>- 20 Meter 6pol. Flachbandkabel mit aufgepressten Steckerwannen, bis zu
>40 Slaves, am Ende 10k Pulldown (positive TTL-Logik).

Nimm RS485.

MfG Spess

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren