Ansteuerung EEPROM über I2C von M16C62P

Gast #878410
Lesenswert?

Hallo Leute,

Ich versuche die I2C-Schnittstelle meinem M16C62P-uController zu 
verwenden,
um mit einem ATMEL EEPROM zu kommunizieren. Mit dem Oszilloskop sehe 
ich, dass ich die Start Kondition+ Device Adresse setze, aber ich kriege 
keine ACK vom EEPROM!!!
ich vermute, dass es mit dem 7 Adressing Mode bzw. 8 Adressing Mode was 
zu tun hat oder dass ich die I2C Schnittstelle falsch bediene
kennt sich jemanden damit aus?
ps. die von mir verwendete Adresse für die EEPROM ist 0xA6

mfg

H.
Gast #878977
Lesenswert?

Ich habe for ca. 3 Jahren ein 24C32 erfolgreich mit dem M16C62 
angesteuert. Leider ist die Initialisierung des I2C recht knifflig und 
von Renesas auch nur unzureichend dokumentiert. Anbei einige Code 
Fragmente, die aus einem grösseren Projekt stammen. Kompilieren dürfte 
sie nicht für sich allein, da fehlen einige Hilfsroutinen, aber mal 
reinschauen dürfte nicht schaden. Bitte nicht an der Formatierung 
stören, die kommt von unserem CASE-Tool.

Gruss
Mike
Angehängte Dateien:
Gast #879444
Lesenswert?

@Henry

Einige kleine Erlüterungen noch zum Code:

Mit i2c_init wird der Bus nach dem Reset des Controllers initialisiert.
i2c_reset erzeugt ein Bus-reset; nützlich bei Busfehlern

i2c_send und i2c_receive senden und empfangen Daten (jeweils vom Master 
zum Slave gesehen). i2c_receive erlaubt das Senden einiger Bytes, z.B 
Adressinformation, anschliessend weren die Daten vom addressierten 
baustein gelesen. Beide Funktionen stossen lediglich die Kommunikation 
an und kehren schnellstmöglich wieder zurück; der Rest der Busaktivit¨t 
wird in Interrupts erledigt. So kann sich der Prozessor während einer 
Busübertragung noch um andere Dinge kümmern.

Mit i2c_wait kann mann warten bis der Bus wieder frei ist (dann geht die 
globale Variable i2c_status auf I2C_IDLE).

Die Schreibfunktionen existieren in einer blockierenden und einer 
nicht-blockierenden Form. Erstere wrtet, bis das EEPROM beschrieben ist 
und kehrt dann erst zurück, die zweite sendet nur den Schreibbefehl, der 
Anwender muss dann selbst prüfen, wann das EEPROM wieder ansprechbar 
ist. Die Bezeichnung ...Async ist etwas verwirrend, war aber in der 
Projektplanung so vorgegeben :-;

Einige globle Variablen und Routinen, wie die Timerroutinen sind in 
einem anderen Softwaremodul definiert, es sollte aber klar sein, wozu 
sie dienen.

Ich erinnere mich noch dunkel, dass die Application Notes für den M16C 
für eine veraltete Architektur geschrieben waren, schau mal bei den 
Notes für den M32C nach, der hat das gleiche I2C-Interface wie der 
M16C62P. Die Dokumentation ist meiner Meinung nach die grösste Schwäche 
der Renesas-Teile, auch wenn Glyn versucht hat, daran zu arbeiten.

Ich hoffe, Dir ein wenig geholfen zu haben.


Mike

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