Hallo zusammen,
seit gestern versuche ich den 24FC1025 in Gang zu kriegen, jedoch hängt
der Mikrocontroller (ATmega8) in der i2c_write()-Routine der Fleurys
Bibliothek.
Da am Bus weitere Teilnehmer hängen und diese auch funktionieren,
schließe ich den Hardware-Teil weitestgehend aus.
Der Code wurde bereits mehrfach vereinfacht um den Fehler auszuschließen
und jetzt in dem Stadium:
1 | i2c_start_wait(TWI_ADDR_EXT_EEPROM+I2C_WRITE);
|
2 |
|
3 | if(i2c_write(EXT_EEPROM_ADDR_HIGHBYTE))
|
4 | {
|
5 | event_error();
|
6 | i2c_stop();
|
7 | }
|
8 |
|
9 | i2c_write(EXT_EEPROM_ADDR_LOWBYTE);
|
10 | i2c_rep_start(TWI_ADDR_EXT_EEPROM+I2C_READ);
|
11 | uint8_t var = i2c_readNak();
|
12 | i2c_stop();
|
Nach dem start_wait(...) kommt auch ein Acknowledge rein. Somit ist die
Adresse schon mal richtig. Jedoch nichts mehr im i2c_write(...) - wo es
sich in der
1 | // wait until transmission completed
|
2 | while(!(TWCR & (1<<TWINT)));
|
aufhängt. Zusammenfassend ist die Vorgehensweise also die, dass ich im
WRITE-Modus den EEPROM-Adresszeiger angebe (16 Bit), dann über Neustart
im READ-Modus ein Byte anfordere (mit Nak()) und die Verbindung per
i2c_stop() beende.
Wo ist also mein Fehler? Ich sehe wahrscheinlich den Wald vor lauter
Bäumen nicht mehr...
Danke im Voraus.
P.S.: TWI-Frequenz bereits von 100 bis 400 kHz ausprobiert.