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
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
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
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.
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.
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
Zeig mal den Schaltplan und das Programm. Abblockkondensatoren dran? Die Adresse hängt auch von E1 und E2 ab. Sind die auf GND gelegt?
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.
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.
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
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.
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
Ich habe es zum Laufen bekommen. Die Pull up Widerstände waren falsch angeschlossen ;( ;(
Mark J. schrieb: > Die Pull up Widerstände waren falsch angeschlossen Wie kann das sein? Das Oszillogramm sieht doch tadellos aus.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.