www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I2C Read Fehler dedektieren


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Gemeinde,

Ist es möglich beim Lesen eines exteren EEPROMs über den I2C Bus Fehler
festzustellen?
Ich denke nein, weil mein uC als Master das CLK rausschiebt und
verantwortlich für das Acknowledge Bit ist. Also wie soll ich in meinem
Code feststellen, ob das was schief gegangen ist.

Bitte belehrt mich eines besseren....

Michael

Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Indem du den geschriebenen Wert mit deinem gelesenen Wert vergleichst.
Wie den sonst auch.

Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist mir noch eingefallen. Du kannst auch um sicherzugehen eine Prüfsumme
zusätzlich mit abspeichern. Dann kannst du auch nach Jahren noch
feststellen, ob da was schiefgelaufen ist.

Autor: Marcus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
passt grad deshalb hänge ich das noch hier ran:

ich muss nicht nur erkennen, dass ein fehler passiert ist beim
lesen/schreiben, sondern diesen auch korrigieren können.
ich wollte mich nun noch einmal allgemein schlau machen, welche
verfahren es da gibt und wie man diese in ANSI C am besten in die I2C
kommunikation einbinden kann?

habe folgendes im anhang schon gefunden. es ist ein in c realisierter
reed-solomon code. da ich aber im programmieren nicht allzu fit bin,
sieht mir das ganze doch recht kompliziert aus.
kann mir da evtl jemand sagen, wieviel overhead ich durch solch eine
implementierung zu erwarten hätte?

desweiteren gibt es ja noch die möglichkeiten durch eine 3fache
abspeicherung der daten und dem 2of3 modus beim lesen (daten müssten
dann und verknüpft werden, oder?) und die mehrfache wiederholung beim
speichern (1010 => 1111000011110000), was eigentlich einer
verlangsamung der busgeschwindigkeit gleichkommt.

wäre dankbar, wenn mir einige ihre erfahrungen auf diesem gebiet
mitteilen könnten.

danke im voraus!

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist denn eine solche Sicherheit erforderlich? Ich kann mich nicht
erinnern, daß ich jemals Ausfälle bei I²C-EEproms gehabt hätte.
Die Frage ist auch: Soll nur die Übertragung gesichert werden (in
diesem Fall kann man einfach nochmal wiederholen) oder der Inhalt?

Eine relativ einfache Methode:
Man fasst immer 8 Byte zu einer Gruppe zusammen. Wenn man diese insges.
64 Bit wie ein Schachbrett anordnet, kann man sowohl waagerecht als auch
senkrecht ein Parity-Bit bilden. Das ergibt dann 2 zusätzliche Bytes pro
8-Byte-Block. Der Fehler kann zurückgerechnet werden, da bei einem
defektem Bit die Parity-Bits in waagerecht und senkrecht falsch sind.
Ist der Fehler nur einmal vorhanden (also nicht in beiden
Parity-Bytes), dann ist eine der Prüfsummen falsch. Ich hoffe, das war
jetzt nicht zu verworren...

Andere Möglichkeit: Einfach die Daten inkl. Prüfsumme 2x abspeichern.
Ist die Prüfsumme in Ordnung, sind auch die Daten O.K., falls nicht,
wird auf den zweiten Datensatz zurückgegriffen. Prüfsummenbildung per
CRC-32 sollte ausreichend sein.

Wenns um die Übertragung geht: Ein Bit zu zwei Bit konvertieren. Eine
"0" wird dann zu "01" und eine "1" wird zu "10". Wenn beim
Lesen eine "11" oder "00" gelesen wird, ist etwas faul. Diese
Kodierung nutze ich erfolgreich für Funkübertragungen.

Autor: Marcus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi thkais,

vielen dank!
die fehler werden, wie du richtig vermutest, nicht durch ausfälleim
eeprom hervorgerufen, sondern evtl. bei der übertragung. die daten- und
taktleitung meiner I2C kommunikation läuft neben steuerleitungen, über
die ein sehr hoher motorstrom laufen kann, durch den ich eine hohe
störfestigkeit (I2C mit bus buffer, gute kabel, etc.) und
datensicherheit benötige.

deine letzte möglichkeit (0 => 01, etc) hört sich interessant an. diese
in verbindung mit einem evtl ECC wäre was.
jedoch sehe ich mit dem 00, bzw. 11 zwar fehler, aber das tue ich im
moment durch das reine vergleichen meiner geschriebenen daten mit
sofortigem rücklesen dieser, ja auch.

durch die kreuzparität könnte ich maximal einfache bitfehler
korrigieren, sehe ich das richtig?
über diese, in verbindung mit 2fachen abspeichern, und die 2of3 methode
(3 faches abspeicher, beim lesen und-verknüpfen) hab ich auch schon
nachgedacht.
hast du/ihr da noch eine erfahrung?

und kennt sich vllt jemand mit dem oben angehängten Reed-Solomon
verfahren aus?

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.