Forum: Mikrocontroller und Digitale Elektronik [erledigt] Frage zur TWI libary von Peter Fleury i2c_start_wait()


von Sven R. (sroetters)


Angehängte Dateien:

Lesenswert?

Hallo,

eigentlich hab ich hier im Forum oft meine Antworten gefunden ohne 
selber eine Frage stellen zu müssen. Doch nun muss ich auch mal selber 
was Fragen, weil ich gerade etwas unsicher bin. ;)

Es geht hier um die Implementierung der Atmel Hardware TWI in einem AVR.
In der I2C Libary von Peter Fleury  (Anhang) benutzt er in der 
twimaster.c die Funktion i2c_start_wait() in der folgende Statuscode 
Abfrage im TWSR  nach einer Slave Adressierung (SLA+R/W).

1
if ( (twst == TW_MT_SLA_NACK )||(twst ==TW_MR_DATA_NACK) ) 
2
      {          
3
          /* device busy, send stop condition to terminate write operation */
4
          TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
5
          
6
          // wait until stop condition is executed and bus released
7
          while(TWCR & (1<<TWSTO));
8
          
9
          continue;
10
      }

Trifft er auf ein NACK Statuscode, wird durch "continue" eine nächste 
Runde einer while Schleife durchgeführt in der der Slave über ein repeat 
Start neu angesprochen wird.

Die Abfrage nach  TW_MR_DATA_NACK (Data received, NACK transmitted) 
sollte ja ein Fehler sein. Einen solchen Statuscode kann der TWI im 
Zustand der Adressierung (SLA+R/W) nicht bekommen, oder doch?

Und wichtiger und mein Grund für die Verwirrung, gibt es einen Grund 
beim Polling im Atmel TWI explizit auf NACK anstatt auf ACK zu prüfen? 
Wäre ein ACK Polling nicht günstiger?


Danke für eure Anregungen.

73, Sven, DG1WRE

[update]
Hat sich erledigt ...

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
Noch kein Account? Hier anmelden.