Zitat Zitat von Che Guevara Beitrag anzeigen

Aber bei einer normalen Kommunikation wird doch die "Verbindung" auch durch ein I2CSTOP beendet. Dem Slave sollte es doch egal sein, ob ich ihn nur addressiere oder auch einen Befehl schicke... Oder irre ich mich da?
Dieses I2CStop sorgt dafür das ein NACK gesendet wird. Die Verbindung wird dadurch nur beendet, weil der Slave dann ein NACK erwartet.
Wenn er ein NACK bekommt obwohl er Daten erwartet, kann das zum Fehlverhalten des Slaves führen bzw. den Bus stören.
Ob du ihm nun eine Adresse schickst oder Daten ist dem Slave egal. Er wertet einfach nur das erste Datenpaket als Adresse und dann das zweite als Daten. Mehr macht er nicht (wie soll er auch sonst erkennen ob das erste Datenpaket eine Adresse oder Daten sind wenn man ihm das vom Werk aus nicht vorgibt).
Es ist beim I²C Bustechnisch festgelegt, dass die ersten Daten eine Adresse sind und von daher weiß der Slave das es sich um eine Adresse handelt und es ist auch festgelegt, dass eine Kommunikation mit einem NACK endet und deswegen weiß der Slave, dass bei einem NACK die Kommunikation zu ende ist.
Wenn du nun einfach mittendrin ein NACK sendest verwirrst du den Chip.
Das ist im Grunde dasselbe als wenn du jemanden nach der Uhrzeit fragst und er dir sagt das die Sonne scheint
Der I²C Bus ist nun mal nicht dafür gedacht das mitten in einer Kommunikation die Kommunikation abgebrochen wird. Sowas gilt es softwareseitig zu umgehen.