Hallo an alle,
Ich arbeite an einem I2C-basierten Kommunikationsgerät bq27742-g1 (Texas Instrument). Die Batteriestandsanzeige ist die Slave-Geräteadresse 0xAA. Ich habe den 10K-Pullup-Widerstand eingebaut.
Dabei verwende ich den Cortex M4-Mikrocontroller der Kinetis-Serie als Master-Gerät. Der Mikrocontroller arbeitet mit einem anderen I2C-Gerät zusammen.
Ich habe die Batteriestandsanzeige bq27741-g1 mit einem MSP430 Launchpad-Board mit I2C-Scanner getestet und sie funktioniert einwandfrei.
Ich habe einen Screenshot von CRO-Signalen (SDA (PINK) SCL (Gelb)) des I2C-Geräts im 9. Taktimpuls von SCL angehängt, wenn SDA einen unbestimmten Zustand hat. Warum passiert das auf dieser Ebene? Liegt das Problem am Pullup-Widerstand?
Ich bin mit der Kinetic MCU nicht vertraut, aber auf einer anderen MCU hatte ich die gleiche Wellenform, als ich die SDA-Leitung als regulären Ausgang falsch konfigurierte, anstatt sie als Open-Drain-Ausgang zu konfigurieren.
Sie können sehen, dass der Slave mit einem ACK antwortet und versucht, SDA niedrig zu fahren, aber etwas (wahrscheinlich der Kinetic als I2C-Master) treibt SDA hoch, sodass Sie die Spannung bei 1/2 der Schiene während Bit 9 sehen.
Stellen Sie SDA als Open Drain ein.
Dieses Problem tritt auf, wenn I2C-Slave und -Master beide versuchen, die Leitung gleichzeitig in entgegengesetzte Richtungen zu treiben.
Ihre Batteriestandsanzeige ist I2C-Slave und MSP ist I2C-Master. Verwenden Sie einige Bibliotheken für die I2C-Kommunikation oder haben Sie das I2C-Protokoll selbst implementiert?
Im 9. Taktzyklus sollte MSP die SDA-Leitung freigeben (in den Tristate-Eingang umwandeln ), damit die Kraftstoffanzeige sie niedrig treiben kann. Dieses Tief sollte als Bestätigung interpretiert werden. Bitte überprüfen Sie Ihren I2C-Code.
Benutzer19579
st2000
CL.
Kalarav Parmar
Kalarav Parmar
Kalarav Parmar
st2000
CHendrix
SamGibson
Kalarav Parmar
Kalarav Parmar
Kalarav Parmar
st2000
SamGibson
Kalarav Parmar
Kalarav Parmar