Ich habe einige Probleme beim Prüfen eines problematischen I2C-Busses auf dem Oszilloskop.
Wir möchten mehrere TLV493D-A1B6 mit einem STM32L4 verbinden (wir arbeiten auch an STM32F4 und haben die gleichen Probleme).
Der STM32L4 hat 4 I2C FM+ (1Mbit/s) Bus. Wir wollen die 4 verwenden, um mit insgesamt 12-16 Sensoren zu kommunizieren, also 3-4 Sensoren pro Bus.
Wir haben 4 Sensoren auf demselben Bus sowie 1 Sensor auf jedem der 4 Busse erreicht.
Wir sind jedoch nicht in der Lage, mehr Sensoren anzuschließen (dh 4 Sensoren auf 4 Bus oder sogar 1 Sensor auf 3 Bus und 2 Sensoren auf dem 4. Bus). Einige Busse starten und arbeiten weiter, andere starten nicht, einige starten und stoppen nach ein paar Sekunden, wobei diese Verhaltensweisen zufällig sind.
Beim Untersuchen des Busses auf dem Oszilloskop ist mir aufgefallen, dass es wie ein starkes Klingeln aussieht, wenn SCL (oder SDA) von HIGH auf LOW geht, und ich frage mich, ob dies die Ursache des Problems sein kann. Hier sehen Sie dieses Klingeln auf der SCL-Leitung:
Wie Sie sehen können, scheint das Klingeln auf dem zweiten Bild weniger wichtig zu sein. Es wurde am Tag nach dem ersten aufgenommen, in einem separaten Raum (anderer Ausgang für das Oszilloskop) und während das erste Bild das Signal mit einem Sensor am Bus zeigt, zeigt das zweite Bild das Signal mit 3 Sensoren am Bus.
Einige Informationen zum I2C-Bus:
Frequenz: 1 Mbit/s
Kapazität: Die Kapazität des Busses wurde durch Messen der Anstiegszeit der Signale bestimmt. Es wurde festgestellt, dass ein Bus eine Kapazität im Bereich von 50 pF für einen Sensor bis 100 pF für 3 Sensoren hat.
Pull-up-Widerstände: 1,2 kOhm (andere Werte wurden ausprobiert, von 600 Ohm bis 2,2 kOhm. Das Verringern des Werts scheint sich etwas zu verbessern, aber das Timing wurde überprüft und 1,2 kOhm scheint korrekt zu sein).
Abschluss: Auf jeder Leitung wurden 33-Ohm-Reihenwiderstände verwendet.
Stromversorgung: Für die Sensoren wurden mehrere Stromversorgungsschemata ausprobiert, darunter eine isolierte Laborstromversorgung oder die gleiche Stromversorgung wie die MCU.
Die I2C-Leitungen laufen durch relativ kurze Kabel und Steckbrett. Die Kapazität wurde überprüft und ist anscheinend nicht die Ursache unseres Problems.
Ich bin nicht derjenige, der für die Firmware verantwortlich ist, aber ich weiß, dass wir DMA auf der MCU verwenden, um 4 I2C FM+ gleichzeitig laufen zu lassen.
Einige Ideen, die wir hatten, aber wir können sie nicht klären:
Hat jemand bereits ein ähnliches Verhalten mit I2C erlebt und/oder hat jemand eine Idee, unser Setup zu verbessern?
Was für mich wieder seltsam klingt, ist, dass das Setup mit 4 Sensoren an 1 Bus funktioniert, es funktioniert auch mit 4 Sensoren an 4 verschiedenen Bussen, aber wir stecken fest, wenn wir versuchen, weiter zu gehen, das Ziel sind 12-16 Sensoren auf dem 4 Busse.
PS: Ich kann im Moment keinen Schaltplan unseres Aufbaus posten, aber ich werde meinen Beitrag so schnell wie möglich bearbeiten.
Wow, das ist eine hässliche Wellenform. Entfernen Sie die 33-Ohm-Vorwiderstände. Verwenden Sie einen stärkeren Pullup-Widerstand. 1,2k mögen richtig erscheinen, aber die langsame Anstiegszeit deutet darauf hin, dass sie zu hoch ist.
Stellen Sie sicher, dass zwischen der Masse jedes Geräts der geringstmögliche Widerstand besteht.
Nur ich
JK
JK
Eugen K
JK