Prüfsummenverfahren gesucht.

Gast #3234434
Lesenswert?

Eine Datenübertrag (115200 Bit/s) zwischen 2 ATMega88 (Takt 3,6 Mhz) 
soll gesichert werden. Die Datensatzlänge beträgt zwischen 12 und 600 
Bytes.

Welches Prüfsummenfahren ist geeignet?

CCR32/64 ist ziemlich sicher, aber bei Anwendungen mit größeren 
Datensatzlängen wohl nicht üblich. Zudem vermute ich, dass der 
Zeitaufwand zur Berechnung recht hoch ist für einen kleinen 
Mikrocontroller.

Wer hat Erfahrung mit der Prüfsumme größer Datenmenge und kann mir zu 
einem Prüfsummenverfahren raten?
Gast #3234444
Lesenswert?

Die Prüfsumme nach Fletcher 
(https://en.wikipedia.org/wiki/Fletcher_checksum#Fletcher-16) besitzt 
die gleichen Eigenschaften zur Erkennung von Übertragungsfehlern wie die 
zyklische Redundanzprüfung, benötigt aber einen wesentlich geringeren 
Rechenaufwand. Es handelt sich um eine positionsabhängige Prüfsumme, 
d.h. im Gegensatz zu „einfachen Prüfsummenverfahren“, werden Änderungen 
in der Reihenfolge der übermittelten Daten erkannt.
#3234565
Lesenswert?

>  #include <util/crc16.h>

fuer die Anspruchslosen...

Ein Schiebe-XOR Ansatz mit einem CRC-16 benoetigt etwas ueber 80 befehle 
pro byte. Ohne genau zu zaehlen. Bei 3.6MHz und 115kBit haben wir 360 
Befehle pro byte. Der Rest bleibt fuer was Anderes. Nicht grad der 
Hammer.

Der Tabellenbasierte Ansatz ist kuerzer. Dabei gibt es zwei 
Moeglichkeiten. Ich glaub mich zu erinnern. Die lange Tabelle benoetigt 
256 Worte und rechnet mit byte aufs Mal, die kurze Tabelle benoetigt 32 
oder 64 worte und rechnet mit Nibble aufs Mal...
#3234577
Lesenswert?

Marco M. schrieb:
> Es handelt sich um eine positionsabhängige Prüfsumme,
> d.h. im Gegensatz zu „einfachen Prüfsummenverfahren“, werden Änderungen
> in der Reihenfolge der übermittelten Daten erkannt.

Hm also unter deinem Link steht was anderes.
https://en.wikipedia.org/wiki/Fletcher_checksum#Weaknesses_of_simple_checksums
>The first weakness of the simple checksum is that it is insensitive to the
>order of the blocks (bytes) in the data word (message). If the order is
>changed, the checksum value will be the same and the change will not be
>detected.
#3234605
Lesenswert?

Siebzehn oder Fuenfzehn schrieb:
> Ein Schiebe-XOR Ansatz mit einem CRC-16 benoetigt etwas ueber 80 befehle
> pro byte. Ohne genau zu zaehlen. Bei 3.6MHz und 115kBit haben wir 360
> Befehle pro byte. Der Rest bleibt fuer was Anderes. Nicht grad der
> Hammer.

Ein Blick in die <util/crc16.h> verrät, _crc_ccitt_update() braucht 17 
Zyklen.

Allerdings ist der Baudratenfehler bei 3,6MHz schon 2,4%.
Diee AVRs unterhalten sich daher mit 112,5kBaud und nicht mit 
115,2kBaud.
Mitlauschen mit dem PC ist dann unzuverlässig.
Gast #3234684
Lesenswert?

Hallo,

wenn du byteweise Parity verwenden kannst (8bit + P) und dazu eine 16bit 
Prüfsumme, reicht das völlig aus, und die Rechenzeit ist nahezu 
unmessbar.

Das mit der Reihenfolge ist irrelevant, weder bei Speichern wie Floppy 
oder Festplatte noch bei serieller Übertragung gibt es einen plausiblen 
Mechanismus, der die Reihenfolge vertauschen könnte.

Interessanter ist die Frage nach Mehrfachfehlern, aber i.d.R. sind die 
Verbindungen nicht so schlecht dass das eine Rolle spielen würde.

Gruss Reinhard

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