Prüfsummenverfahren gesucht.

Gast #3234434
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
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
>  #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
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.
#3234584
> werden Änderungen in der Reihenfolge der übermittelten Daten erkannt.

Eine Pruefsumme in dieser Anwendung ist gegen Einzelbitfehler 
hervorgerufen durch Spikes auf der Uebertragungsstrecke gedacht, und 
nicht gegen Bytevertauschen. Bytevertauschen kommt auf einer 
Uebertragungsstrecke statistisch gesehen eher selten vor...
#3234605
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
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

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.