Titelbild Mikrocontroller

15.5.1 Adresse empfangen

Wenn der Slave richtig konfiguriert ist, wartet er permanent darauf, dass er eine Start Bedingung auf dem Bus auftritt. Anschließend empfängt der Slave das Adress Byte und vergleicht die empfangene Adresse mit seiner eigenen. Wenn die Adressen übereinstimmen bestätigt der Slave (ACK) und speichert das Byte im DATA Register. Wenn die Adresse nicht übereinstimmt wird weder bestätigt noch gespeichert. Der Slave wartet dann bis wieder eine Start Bedingung auftritt.

Das Slave address/stop interrupt Flag wird gesetzt, wenn eine Start Bedingung gefolgt von einer gültigen Adresse (auch general call) erkannt wurde.

Wird unmittelbar nach der Start Bedingung eine Stop Bedingung erkannt, ist dies ein Busfehler und das bus error flag wird gesetzt.

Das R/W direction Flag gibt an wie dieses Bit im Adress Byte gesetzt war. Es kann durch die Software gelesen werden um die die richtige Arbeitsweise für die laufende Übertragung anzustoßen.

Abhängig von der Übertragungsrichtung (R/W) und den Bedingungen auf dem Bus muss die Software nach dem Empfang des Adresspaketes vier Fälle unterscheiden.

S1: Adresspaket bestätigen, R/W ist gesetzt (Master read) Ein gesetztes R/W Direction Flag zeigt eine Master read Operation an. Die SCL Leitung wird durch den Slave auf Low gehalten (Taktverlängerung). Wenn der Slave ein ACK (SDA auf Low) gesendet hat, setzt die Hardware des Slave das data interrupt flag, was anzeigt, dass Daten zum übertragen benötigt werden. Danach können weitere Daten gesendet oder eine wiederholte Start oder eine Stop Bedingung empfangen werden. Wenn der Slave die Adresse nicht bestätigt (NACK = SDA bleibt High), wartet er danach auf die nächste Startbedingung.

S2: Adresspaket bestätigen, R/W ist gelöscht (Master write) Ein gelöschtes R/W Direction Flag zeigt eine Master write Operation an. Die SCL Leitung wird auf Low gehalten (Taktverlängerung). Wenn der Slave ein ACK (zieht SDA auf Low) gesendet hat, wartet der Slave anschließend auf die zu empfangenen Daten. Es können dann weitere Daten, eine wiederholte Start oder eine Stop Bedingung empfangen werden. Wenn der Slave die Adresse nicht bestätigt (NACK = SDA bleibt High), wartet er danach auf die nächste Startbedingung.

S3: Kollision Wenn der Slave kein High Level (also ein NACK) ausgeben kann, wird das collision Flag gesetzt und die Ausgangslogik des Slave wird abgeschaltet. Auch die Taktverzögerung wird freigegeben. Als nächstes wird nur eine Start oder eine wiederholte Startbedingung akzeptiert.

S4: STOP Bedingung empfangen Wenn eine Stop Bedingung empfangen wird, wird das slave address/stop Flag gesetzt. Es zeigt in diesem Fall nicht die Adressübereinstimmung sondern die Stop Bedingung an.
Impressum