Gast
#5986111
Hallo, ich habe einen uC und ein Stück Software dazu und spreche mit dem verschiedene I2C Slaves an. Im GUI gebe ich eine Slaveadresse, Regsiteradresse und einen Wert an - ganz klassisch. Zuerst bin ich darüber gestolpert, dass die I2C Slave Adresse ja immer noch mit 2 multipliziert werden muss, weil das R/W Bit ja noch dazu kommt. Wenn ich also einen Temperatursensor habe und der die Addresse 0x48 hat, kann ich auf 0x90 schreiben und auf 0x91 lesen. Nun habe ich mal mit einem Oszi den I2C Verkehr aufgezeichnet und decodiert und habe das Bild im Anhang erhalten. Ich hätte ja erwartet, dass er zwei direkte Zugriffe auf 0x90 bzw 0x91 macht. Beim Schreiben passt das auch alles: Start - 0x90 slave Adresse -ACK- Register Adresse 0x00 -ACK- Regsiter Daten 0x0C -ACK- STOP Beim Lesen allerdings scheint er einen Umweg zugehen. Start - 0x90 slave Adresse -ACK- Register Adresse 0x00 -ACK- START (?) - 0x91 slave Adresse -ACK- Regsiter Daten 0x0C - NACK (weil das Regsiter Read only ist!) - STOP Der Lesevorgang sieht irgendwie komisch aus. Müsste es nicht auch wie beim Schreiben aussehen? Oder schreibt der Master erst die Leseadresse zum Slave, wartet dann darauf, dass die Daten bereitgestellt werden, der Slave sendet dann das START und dann wird von der 0x91 gelesen? Ist das Verhalten normal und kann ich auf diese Art und Weise sämtliche 7bit Addressen Devices ansprechen, oder hatte ich einfach bei dem Temperatursensor Glück? Ich hätte ja im GUI erwartet, dass ich die 0x48 eingebe und er dann je nach Lesen oder Schreiben eine 0 oder eine 1 anhängt. Da hat der Programmierer wohl anders gedacht und man muss die im Datenblatt angegebene I2C slave Adresse noch "umrechnen". Vielen Dank!
