Forum: Mikrocontroller und Digitale Elektronik Externes EEPROM über ein PIC Microcontroller über IC2 auslesen


von Mark J. (markjo)



Lesenswert?

Guten Tag,

ich versuche ein externes EEPROM über den IC2 Bus über ein PIC 
Microcontroller(PIC16F1828) von Microchip auszulesen(In C).
Taktfrequenz 4 Mhz
Baudrate des IC2 100 Khz

Die Adresse des Slaves(24C04WP) im Write Modus lautet 0xA0 und im Read 
Modus 0xA1

Im Anhang ist zu sehen, dass der Master (µC) die richtigen Daten zum 
Auslesen für das EEPROM sendet. Erst den Write Befehl für die Adresse 
0002 auf dem EEPROM und dann den Read Befehl -> Daten FF. Jedoch wird 
vermutlich kein Acknowledge gesendet wie aus der Ereignistabelle zu 
entnehmen ist. (fehlende Bestätigung).Ich habe schon vieles versucht der 
Master sendet die richtigen Daten in der richtigen Reihenfolge jedoch 
kriege ich keine Antwort vom Slave.
Weiß eventuell jemand eine Lösung was ich falsch gemacht haben könnte.
Ich wäre für jede Hilfe Dankbar. Danke im Voraus.

Mfg
Mark

von Falk B. (falk)


Lesenswert?

Falsche Slave-Adresse? Versuch erstmal, das ACK beim Lesen zu bekommen. 
Schreiben steht ganz am Schluß.

Ich würde mal die roten Klammern [!] als NACK interpretieren, sprich, 
deinn EEPROM reagiert nicht. Hast du dessen Adresspins ALLE auf LOW 
gelegt? Die dürfen NICHT in der Luft hängen!

: Bearbeitet durch User
von Christian M. (christian_m280)


Lesenswert?

Mark J. schrieb:
> Die Adresse des Slaves(24C04WP) im Write Modus lautet 0xA0 und im Read
> Modus 0xA1

Nein, die Adresse ist die selbe, nur wird wird Bit 0 gesetzt! Aber ja, 
je nach Interpretation, steht das im DB so oder in der Beispielsoftware?

Gruss Chregu

von PittyJ (Gast)


Lesenswert?

Christian M. schrieb:
> Mark J. schrieb:
>> Die Adresse des Slaves(24C04WP) im Write Modus lautet 0xA0 und im Read
>> Modus 0xA1
>
> Nein, die Adresse ist die selbe, nur wird wird Bit 0 gesetzt! Aber ja,
> je nach Interpretation, steht das im DB so oder in der Beispielsoftware?
>
> Gruss Chregu

Das ist mal wieder die 7/8 Bit Darstellung der I2C Adresse.
Eeprom für I2C haben meist die 7 Bit Adresse 0x50. Stellt man das in 8 
Bit mit WR-Flag dar, dann wird (nach oben geschoben) 0xA0/0xa1 draus.

von Stefan F. (Gast)


Lesenswert?

Der Master darf nicht einfach weiter machen, wenn das ACK ausbleibt. Er 
muss die Transaktion abbrechen, ansonsten werden die folgenden Daten von 
diesem oder auch anderen Busteilnehmern möglicherweise als Adresse 
interpretiert und dann können in Folge alle denkbaren und undenkbaren 
Fehlfunktionen auftreten.

von Purzel H. (hacky)


Lesenswert?

Die Loesung ist ganz einfach : Das Datenblatt genaustens(!) lesen. Jedes 
Bit muss stimmen. Das Timing jeden Bittes muss stimmen. Wurden die Setup 
und Hold Zeiten eingehalten ? Sowohl hin und zurueck. Jedes Bit welches 
falsch zurueck kommt hat seine Vorgeschichte.
Variationen : Allenfalls mal langsamer laufen lassen, allenfalls mit der 
analogen Sonde des Oszilloskopes zuschauen.

: Bearbeitet durch User
von Pete K. (pete77)


Lesenswert?

Zeig mal den Schaltplan und das Programm. Abblockkondensatoren dran?
Die Adresse hängt auch von E1 und E2 ab. Sind die auf GND gelegt?

von Stefan F. (Gast)


Lesenswert?

PittyJ schrieb:
> Das ist mal wieder die 7/8 Bit Darstellung der I2C Adresse.

Ich denke nicht. Im ersten Oszilloskop Bild sehe ich in gelb 1010000. 
Das stimmt soweit mit dem Datenblatt überein, falls die Pins E1 und E2 
auf LOW liegen.

von Walter T. (nicolas)


Lesenswert?

Mark J. schrieb:
> Die Adresse des Slaves(24C04WP) im Write Modus lautet 0xA0 und im Read
> Modus 0xA1

Nicht vergessen: Read/Write bezieht sich auf I2C, nicht auf den 
EEPROM-Inhalt.

von Oliver S. (oliverso)


Lesenswert?

Falk B. schrieb:
> Ich würde mal die roten Klammern [!] als NACK interpretieren, sprich,
> deinn EEPROM reagiert nicht.

Das sehe ich auch so. Solange das EEProm auf seine Adresse nicht mit Ack 
antwortet, stimmt was grundsätzliches nicht.

Oliver

von Stefan F. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Im ersten Oszilloskop Bild sehe ich in gelb 1010000.
> Das stimmt soweit mit dem Datenblatt überein, falls die Pins E1 und E2
> auf LOW liegen.

Komisch, jetzt ist die Reihenfolge der Bilder anders, oder bin ich doof?

Ich minte das Bild ..._6_.jpeg

Nachtrag: ja ich bin doof. Gelb ist ja der Takt, die Daten sind blau.

von Frank K. (fchk)


Lesenswert?

Mark J. schrieb:

> Im Anhang ist zu sehen, dass der Master (µC) die richtigen Daten zum
> Auslesen für das EEPROM sendet. Erst den Write Befehl für die Adresse
> 0002 auf dem EEPROM und dann den Read Befehl -> Daten FF.

Der 24C04 hat nur ein Byte für die Adresse, Bit 8 der Adresse ist in Bit 
1 des Adressbytes untergebracht. Die 8-Bit Adresse A0/A1 gilt also nur 
für die ersten 256 Bytes, für die zweiten 256 Bytes ist es A2/A3.

Siehe hier

https://www.st.com/resource/en/datasheet/m24c04-w.pdf

auf Seite 13/40. Auf Seite 18/40 steht, wie ein Lesezyklus auszusehen 
hat.

fchk

von Mark J. (markjo)


Lesenswert?

Ich habe es zum Laufen bekommen. Die Pull up Widerstände waren falsch 
angeschlossen ;( ;(

von Stefan F. (Gast)


Lesenswert?

Mark J. schrieb:
> Die Pull up Widerstände waren falsch angeschlossen

Wie kann das sein? Das Oszillogramm sieht doch tadellos aus.

von Mark J. (markjo)


Lesenswert?

Die Widerstände waren in Reihe geschaltet statt parallel ;(

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.