Externes EEPROM über ein PIC Microcontroller über IC2 auslesen

OP #7032918
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
#7032983
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!
Gast #7032992
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.
Gast #7033010
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.
#7033013
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.
Gast #7033052
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.
#7033078
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren