www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I²C/TWI Speicherzugriff prüfen?


Autor: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe heute mal versucht einen seriellen EEPROM über I²C/TWI 
anzusteuern. Das ist ein 16kbit Typ und sollte somit 2048 Bytes 
speichern können.

Jetzt würde ich gerne mal durch einen kleinen Test überprüfen ob auch 
alle Speicherstellen richtig angesprochen werden. Dazu habe ich 
folgenden Code verwendet, doch der hat Lücken. :-(

(Prinzipiell sollte es funktionieren, das was ich reinschreibe kann ich 
auch wieder auslesen.)

Spätestens nach 256 Bytes sind die Werte im Speicherplatz x+256, x+512, 
x+768, x+1024... usw. immer gleich.

Wenn ich nun schon an der falschen Adresse schreibe und dann auch an der 
falschen wieder Lese ist meine Routine murx...

SET_LED_X und CLR_LED_X = Signalisierung über eine LED

SET_LED_INF;
CLR_LED_STA;
for (intTMP1=0; intTMP1<2048;intTMP1++) {
   write_twi_eep(TWI_ADR_EEP, intTMP1, intTMP1 & 0xFF);
   if (read_twi_eep(TWI_ADR_EEP, intTMP1) != (intTMP1& 0xFF)) SET_LED_STA;
}
CLR_LED_INF;

Wie kann man sicher gehen das wirklich immer ein anderer Wert in der 
Zelle landet?

Danke AVRli...

Autor: hp-freund (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schreib doch einen Block Daten, lies und prüfe den gesamten Speicher, 
lösche den Block, schreibe den nächsten Block und lies und prüfe wieder 
den gesamten Speicher usw.

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

Bewertung
0 lesenswert
nicht lesenswert
hp-freund schrieb:
> Dann kannst Du immer noch 2Bytes der Zählvariable hintereinander
> speichern. ... Wenn Du das einmal
> mit nicht invertierten und einmal mit invertierten Werten machst, prüfst
> Du dabei sogar die Funktion jedes einzelnen bits im Speicher...

Das würde ich sehr gene verstehen, ich muss gestehen das habe ich aber 
nicht... :-(

Ich habe nun nochmal einen 2. Test gemacht und über 256 Byte immer den 
gleichen Wert eingeschrieben und ausgelesen.

Wenn was falsch angesprocehn wird, sollte es doch mit den beiden Test's 
zu sehen sein oder?

Gruß AVRli...

Autor: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achja, ist ja Zeitumstellung!!! Also der vorherige Beitrag muss nach 
unten "Gedacht" werden... :-D

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

Bewertung
0 lesenswert
nicht lesenswert
hp-freund schrieb:
> Schreib doch einen Block Daten, lies und prüfe den gesamten Speicher,
> lösche den Block, schreibe den nächsten Block und lies und prüfe wieder
> den gesamten Speicher usw.

Aber dann weiß ich ja wieder nicht ob der Block im richtigen Bereich 
gespeichert wurde... :(

Ich habe nun den Quelltext etwas erweitert um über den UART eine Art 
HEXDUMP vom EEPROM zu bekommen. Wenn ich aber ganz ehrlich bin sieht es 
zwar toll aus, dennoch ist völlig unklar ob der Bereich vielfaches von 
256 wirklich auf 512, 1024 und so weiter liegt.

grübel

AVRli...

Autor: hp-freund (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann kannst Du immer noch 2Bytes der Zählvariable hintereinander 
speichern. Das ergibt dann ein eindeutiges Muster. Wenn Du das einmal 
mit nicht invertierten und einmal mit invertierten Werten machst, prüfst 
Du dabei sogar die Funktion jedes einzelnen bits im Speicher...

Autor: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte nicht steinigen, ich habe schon geantwortet aber das könnte man 
übersehen da durch die Zeitumstellung mein Beitrag VOR hp-freund seinen 
Beitrag gelandet ist.

hp-freund schrieb:
> Dann kannst Du immer noch 2Bytes der Zählvariable hintereinander
> speichern.

0x0000: 00 01 FF FE 00 02 FF ED 00 03 FF FC 00 04 FF FD

So?

Schönes WE AVRli...

Autor: hp-freund (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder so:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main()
{
  short int b;
  short int c;
  int fd1,fd2;
  fd1=open("d1.txt",O_RDWR | O_CREAT | O_TRUNC, S_IRWXU);
  for(b=0;b<1024;b++)
  {
    write(fd1, &b,2);
  }
  close(fd1);

  fd2=open("d2.txt",O_RDWR | O_CREAT | O_TRUNC, S_IRWXU);
  for(b=0;b<1024;b++)
  {
    c=~b;
    write(fd2, &c, 2);
  }
  close(fd2);
}

d1.txt enthält den ersten Durchlauf, d2.txt den zweiten invertierten.

Wie Du das machst ist eigentlich egal, hauptsache es ergeben sich 
verschiedene auswertbare Ergebnisse.

Autor: hp-freund (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ups
Nach dem Umbau des Progs, hätte ich die Dateien lieber d1.bin und d2.bin 
nennen sollen. Aber Du weißt schon was gemeint ist ;)

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

Bewertung
0 lesenswert
nicht lesenswert
Hi,

und danke für Deine Hilfe.
Ich habe nun folgenden DUMP im EEPROM schreiben sowie lesen können. 
Würde sagen, "das passt"! :-D

Bei 0x0400 sieht man den Umsprung im Zähler von 00 auf 01...

Das sollte für den Test der Schreib/Lese Zugriffe ausreichen oder hat es 
noch Lücken?

Gruß AVRli...

Autor: hp-freund (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt käme der zweite Durchlauf mit den gleichen nur invertierten 
Werten.
Dann kannst Du jedes einzelne bit testen. Bis jetzt testet Du jedes 
Byte.

Autor: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja danke Dir!
Nun hab auch ich es verstanden... ;-)

Gruß AVRli...

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.