www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit I2C Ansteuerung eines EEPROM


Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo an alle...

hab mir vor kurzem nen eeprom zugelegt (m24c01) und hab mich auch gleich 
mal an die programmierung rangemacht.
mein problem:

ich wollte wissen wie das mit dem acknowledge des ic´s ist, meine 
routine zur programmierung is ok das hab ich schon beim saa1064 
gesehen...

meine abfrage ob der ic alles mitbekommen hat (acknowledge)

         setb i2c_clk
  nop
  jnb i2c_data,ack
  setb no_ack
  mov p1,#0
ack:     clr i2c_clk

laut dem datenblatt des eeprom´s kann ich nix reinschreiben wenn der pin 
WC auf High gelegt ist. also hab ich den pin auf high gelegt und 
versucht zu schreiben eigentlich müsste das nich gehen und ein no ack 
vom ic kommen.
Es sind jedoch noch alle leds am port 1 an...

hat jemand ne ahnung woran das liegt?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>laut dem datenblatt des eeprom´s kann ich nix reinschreiben wenn der pin
>WC auf High gelegt ist. also hab ich den pin auf high gelegt und
>versucht zu schreiben eigentlich müsste das nich gehen und ein no ack
>vom ic kommen.

Auf seine Slave Adresse antwortet er auf jeden Fall mit ACK.
Wie es mit den gesendeten Datenbytes aussieht weiss ich nicht genau.
Ich habe aber auch noch kein Timingdiagramm gesehen wo der Slave
auf gesendete Bytes mit no ack antwortet wenn WP high ist.

Im Zweifel hilft ein Verify nach Write um das zu prüfen ;)

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ein no ack ist doch dann vorhanden wenn während clock high ist auch sda 
auf high geht?

wollte diese verständnisfrage nur mit meinem beschriebenen versuch 
klären

Autor: Ulrich P. (uprinz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ACK heißt, dass der Chip im 9. Bit SDA auf LOW zieht. Der Chip gibt bei 
seiner Adresse zuerst einmal immer ein ACK, wenn er empfangsbereit ist. 
Ein EEPROM kann z.B. nicht empfangsbereit sein, wenn es intern noch mit 
dem Programmieren beschäftigt ist.
Danach schreibt man in das EEPROM die Adresse, die man lesen oder 
schreiben möchte. Hier sollte ein auch ein ACK zurück kommen, wenn man 
nicht den Adressbereich verletzt.
Nun kommt die Stelle, an der das EEPROM mit NACK (SDA bleibt high) 
antworten sollte, wenn man bei gesetztem WP nach Angabe der Adresse 
versucht dorthin Daten zu schreiben.

Gruß, Ulrich

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Ulrich

>Danach schreibt man in das EEPROM die Adresse, die man lesen oder
>schreiben möchte. Hier sollte ein auch ein ACK zurück kommen, wenn man
>nicht den Adressbereich verletzt.

Hab ich mal versucht für ne Autodetektion von EEPROMS.
Die Mistdinger senden auch ACK wenn die Adresse zu groß ist :(

Autor: Ulrich P. (uprinz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, bekanntermassen sind die I2C Funktionen bei Chips in denen diese in 
Hardware gegossen sind, sehr rudimentär. Möchte mann eine Autodetektion 
haben, so hat man kaum eine Chance.
Bei einigen Chips reicht es nicht einmal Testmuster zur Erkennung der 
Größe zu schreiben, da sie einfach einen Wraparound machen. Also wenn 
man bei einem 2kB Chip ein Byte an Adresse 7FF schreibt kann man sie 
auch bei FFF und 17FF wieder lesen. Überzählige Bits bei der Adresse 
werden einfach ignoriert.

Diese Einfachheit setzt sich übrigens auch bei der Programmierung fort. 
Viele EEPROMs mache Page-Write, d.h. sie schreiben 32 Bytes ihres 
Speichers auf einmal. Das kann das Schreiben beschleunigen, da man 32 
Bytes einer Page auf einmal übertragen kann ohne STOP/START. Da sie 
dieses Page-Programming immer machen, kann man das ausnutzen um 
Programmier-Zeit zu sparen. 32 Bytes oder 1 Byte dauern immer gleich 
lang. Allerdings muss man die Adressen der Pages beachten. Programmiert 
man 32 Bytes ab Adreesse 0x002, dann überschreiben die letzten Bytes 
wieder den Anfang der Page, also wieder ein Wraparound...

Gruß, Ulrich

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.