Ich versuche, den Infrarot-Temperatursensor MLX90614 von Melexis über SMBus (I2C- oder TWK-ähnliches Protokoll) zu lesen.
Das Protokoll (SMBus) implementiert eine spezielle Art von Befehl oder Sequenz, die als wiederholter Start bezeichnet wird, das heißt, wir senden eine Startbedingung ohne vorherige Stoppbedingung.
Ich verwende einen XMEGA-Mikrocontroller mit TWI-Bibliotheken, die im Anwendungshinweis AN1308 verwendet werden
Um die Sensordaten zu lesen, muss ich 1 Byte senden, um die zu lesende Adresse zu schreiben, und als nächstes 3 Byte Daten lesen.
Das Problem ist, dass ich ACK von 2 ersten Bytes bekomme (Schreibadresse und Befehl schreiben), aber ich bekomme NACK, wenn ich die Adresse nach wiederholter Startbedingung sende
Ich habe 3 Aufnahmen vom Oszilloskop:
Allgemeiner Ablauf Die wiederholte Startbedingung erscheint OK, wir haben eine Startbedingung in der Mitte ohne vorherige Stoppbedingung. Die Adresse stimmt und der Befehl (Adresse zum Lesen) ist auch ok (0b00000110 - 6)
Die Initialisierung des Moduls ist:
// ************** TWI Master config ****************
TWI_MasterInit(&twiMaster,
&TWIC,
TWI_MASTER_INTLVL_HI_gc,
TWI_BAUDSETTING);
Und die Verwendung ist:
TWI_MasterWriteRead(&twiMaster,
MLX90164_ADDR,
bufferTX,
1,
3);
MLX90614 ist 0x5A und bufferTX ist ein unsigned char Array mit einem 0x06 an der ersten Position. Auch der Baudrate ist auf 100 kHz eingestellt
Ich weiß nicht, warum ich NACK im 2. Adressbyte bekomme, um die Daten vom Sensor zu lesen, die wiederholte Startbedingung sieht richtig aus. Außerdem müssen die Hardwarekonfigurationen in Ordnung sein, da ich ACK vom 1. und 2. Byte bekomme
Vielen Dank im Voraus
Es ist schwer zu sagen, ohne weiter hineinzuzoomen, aber es sieht so aus, als hätten Sie versehentlich unmittelbar nach dem wiederholten Start einen Stopp gesendet. SDA sieht so aus, als wäre es ein wenig hoch gegangen, bevor SCL niedrig wurde. Dies würde sicherlich verhindern, dass der Slave ACKt.
Der erste Start hat das gleiche Verhalten, aber es sieht so aus, als wäre er nicht ganz so schlimm und wurde daher nicht als Stopp wahrgenommen.
Nazar
mapedraza
Nazar