mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Eeprom so langsam?


Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab jetzt nach 2 Tagen endlich mal hinbekommen mein Eeprom (24LC64) 
zu beschreiben. Mein Fehler war dass ich nicht lange genug gewartet 
habe. Laut Datenblatt braucht er zum schreiben 5ms. Das ist ja eine 
halbe Ewigkeit. Was macht der so lange?
Da kann ich ja in einer Sekunde nur 200Bytes schreiben. Bei einem 
64kByte Eeprom dauert das dann ja 6Minuten?
Wie lange dauert es eine Page (128Byte) zu schreiben? 5ms oder 128*5ms?
Wie kann ich herausfinden ob er noch beschäftigt ist? In dieser Zeit 
generiert er kein Acknowledge. Wie kann ich abfragen ob er das bit 
sendet oder nicht?

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wie lange dauert es eine Page (128Byte) zu schreiben? 5ms oder 128*5ms?
> Wie kann ich herausfinden ob er noch beschäftigt ist? In dieser Zeit
> generiert er kein Acknowledge. Wie kann ich abfragen ob er das bit
> sendet oder nicht?

Die Antworten stehen alle im Datenblatt !
Da das Schreiben einer 'page' genauso lange dauert, wie das Schreiben 
eines Byte, ist es immer ratsam, seine Daten 'page'-orientiert zu 
speichern.

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Such mal beim I2C Protokoll nach dem Ack Bit...

Eine Page braucht auch nur 5ms.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, aber wie kann ich das acknowledge-bit abfragen? Ich hab dazu leider 
keine Möglichkeit gefunden. Im Datenblatt steht ja nur was vom Erzeugen 
des Bits z.B. im Slavemode oder beim empfangen.

Autor: Jens B. (sio2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
KA, welchen Controller du nutzt, aber im allgemeinen sollte es im DB vom 
Controller stehen, wie man welches Bit erkennen kann. Beim AVR gibts 
auhc nen Interrupt dazu (dummerweise ein Int. für alle Anwendungen :( )

Autor: Mike R. (thesealion)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du das ACK-bit nicht abfragen könntest, würde dein schreiben gar 
nicht funktionieren.
Normalerweise geht es so, daß man den schreiben befehl sendet, dann 
einen repeated start und die Adresse des EEPROM. So lange dieser die 
Adresse nicht mit einem Ack bestätigt, ist er noch mit schreiben 
beschäftigt.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK ich hab es jetzt hinbekommen. (Mega16)
Falls es jemand interessiert:
do
{
  i2c_start();
  i2c_write_byte(DEV_ADR);  //Sendet Geräteadresse RW=0, schreiben
} while (TWSR==0x20);   //Falls kein Ack: noch mal (siehe Datenblatt 
S.189)

Autor: Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab zwar lange nix mit I2C gemacht, aber der Code schaut strange aus,
x-Mal die Geräteadresse senden, wozu, ein Mal muss reichen.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Walter

ne, das ist schon richtig so.

Um ein ACK zu kriegen, muß man den Chip natürlich adressieren.

Alternativ kann man auch 10ms warten.


Ein anderer gern gemachter Fehler ist, kein Stop zu senden.
Das Schreiben wird nämlich erst mit dem Stop gestartet.
Mit einem Repeat-Start werden dagegen alle gesendeten Daten verworfen.


Peter

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.