Hi Experten,
das Hardware TWI ist ja gut und schön, aber die Beispiele in den
Datenblättern sind wohl falsch.
Die meisten TWI Routinen die im Netz rumschwirren funktionien nur dann
richtig wenn man auch tatsächlich am I2C Bus ein I2C Gerät
angeschlossen hat.
Vielleicht mal von Anfang an:
Ich teste das TWI im Polling Modus. Das erste Kommando das man sendet
ist die Start Kondition.
In C sähe das so aus:
1 | void i2cStart(void) {
|
2 |
|
3 | TWCR = (1 << TWEN) | (1 << TWINT) | (1 << TWSTA);
|
4 | while (!(TWCR & (1 << TWINT)));
|
5 | }
|
So sollte es laut Datenblätter sein, und die meisten TWI Sourcen gehen
auch so oder ähnlich vor.
Nur !! im Falle das der I2C Bus überhaupt nicht reagiert, also zB.
keine Pullups oder keine I2C Geräte angeschlossen sind, kehrt obige
while Schleife NIEMALS zurück. Was natürlich die MCU virtuell in einer
Endlosschleife zum Stoppen bringt.
D.h. das Hardware TWI hat keinen Timeout und keine explizite Erkennung
ob der I2C Bus überhaupt ansprechbar ist.
Sehe ich das richtig so ??
Leider konnte ich in den Datenblättern über diesen speziellen Fall
nichts finden.
Gruß Hagen