PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I2C Eeprom 24c256 auslesen



verri
02.10.2006, 00:45
Hallo Leute,

nachdem ich hier so ziemlich alle threats durch habe was das Thema Eeprom an I2C betrifft und keine Lösung dabei war, sei eine Frage gestattet.

Ich würde gerne in einen M24256 von ST schreiben und wieder lesen.
Das Programm dazu ist soweit auch OK denk ich. Nachdem aber beim auslesen immer wieder nur 255 als Wert zu lesen war hab ich mal den LogicAnalyser an den Bus geklemmt und folgendes gesehen.
Das beschreiben scheint richtig ab zu laufen.
aber das lesen :
I2C Start ist OK
I2C Adresse write wird gesendet (1010000) mit ACK bestätigt
I2C Eepromadresse High wird gesendet mit ACK bestätigt
I2C Eepromadresse low wird gesendet mit ACK bestätigt
I2C Start (der zweit) ist OK
nun das Fragezeichen:
I2C Adresse read wird um ein Bit verschoben (01010000) gesendet
der Rest Eeprom High/Low auch somit geht der Speicher wieder in Stand-by.

Hat jemand so etwas schon mal gehabt ?

Ich hab schon andere Pins genommen,Speicher getauscht, Pullups überprüft, Bascom Configuration geprüft etc. alle OK.
Der Speicher hat übrigens die feste Adresse 160.

Ich wäre für einen kleinen Wink echt dankbar.

Gruß Verri

Vitis
04.10.2006, 06:53
Das shiften der Adresse ist falsch.
Also schreiben:

I2cstart 'start condition
I2cwbyte Addresswrite 'slave address
I2cwbyte Adresshbyte 'asdress H of EEPROM
I2cwbyte Adresslbyte 'asdress L of EEPROM
I2cwbyte Value 'value to write
I2cstop 'stop condition
Waitms 10 'wait for 10 milliseconds

lesen:
I2cstart 'generate start
I2cwbyte Addressw 'slave adsress
I2cwbyte Adresshbyte 'asdress H of EEPROM
I2cwbyte Adresslbyte 'asdress L of EEPROM
I2cstart 'repeated start
I2cwbyte Addressread 'slave address (read)
I2crbyte Value , Nack 'read byte
I2cstop 'generate stop


Die Adresse für schreiben und lesen unterscheidet sich lediglich im ersten Bit, also Bit 0. Steht aber auch im Datenblatt.
Der I2cstart kann auch als I2crestart ausgeführt werden, also erst Stop, dann startkondition

verri
04.10.2006, 20:43
@Vitis

Danke für die Hilfe, auch wenn Sie ehr indirekter Art war.
Dein Tips hatte ich so in der Form schon durch. Aber Das hat mich darauf gebracht noch einmal genauer hin zu schauen und zwei Fehler zu finden.
Der erste war der stop vor dem repeatet Start. Das mag der Eeprom nicht.
Der zweite ist viel interessanter. Die I2C Auswerung von meinem LogicAnalyser hat'n klatsch. Denn Der Fehler in der Anwendung ist weg aber der Analyser zeigt immer noch eine Falsche Adresse.

Vielen Dank !