Wie wird die elektrische Buskapazität für den I2C-Trace berechnet?

Ich versuche zu lernen, wie man die Buskapazität eines I2C-Baums mit einem Master und mehreren Slaves berechnet.

In diesem Dokument von TI wird beispielsweise gezeigt, wie der Wert der Pull-up-Widerstände berechnet wird, und es wird lediglich angenommen, dass die Eigenlast jeder Busleitung 400 pF beträgt.

Woher bekomme ich diese pF-Zahl in meinem i2c-Design?

Was mir einfällt, sind zwei Quellen (was fehlt mir?):

  1. Ich muss die Spezifikationen aller Slave-Geräte nachschlagen und ihre Kapazitäten addieren, um parallel zu sein, oder?
  2. Die zweite Quelle wäre der I2C-Trace selbst, richtig? Wenn meine Spur beispielsweise 6 Zoll lang ist, wie berechne ich die Kapazität dieser Spur?

Geben Sie hier die Bildbeschreibung ein

1. Ja, Daten von Slave-Geräten abrufen fügt all diese Kapazitäten hinzu. Dies sollte eine genaue Messung sein. 2. Die Spurkapazität sollte keine große Rolle spielen. Aber es gibt kostenlose Tools in Google, die die Kapazität von Leiterbahnen oder Durchkontaktierungen berechnen können. Dann können Sie beide hinzufügen.
PCB-Spurkapazitätsrechner, zumindest der erste Treffer bei Google, ist ziemlich grob und spuckt nicht einfach aus, auf einer 1-Unzen-Kupfer-Doppelschichtplatine mit einer Spurbreite von X ist die Kapazität Y, es wird auch davon ausgegangen, dass eine Masseebene ist wird direkt unter deinen Spuren sein, also ist es nicht nur eine Funktion von "woher wusstest du das nicht?"

Antworten (2)

Wie wird die elektrische Buskapazität für den I2C-Trace berechnet?

Es ist nicht. Entweder raten und prüfen Sie, oder Sie entwerfen, so viel wie möglich zu tolerieren.

Woher kommen 400 pF? Wer auch immer diese App-Notiz geschrieben hat, hat sie aus dem Nichts gezogen, weil er dachte, dass das eine „große“ Zahl ist, aber trotzdem alles richtig macht mit den Teilen, die er versucht, Ihnen zu zeigen, wie wunderbar sie sind.

400 pF klingen selbst für eine lange Spur auf einer großen Platine ziemlich hoch, also ist es ungefähr eine so gute Zahl wie jede andere. Natürlich ist der einzige Weg, dies sicher zu wissen, das Messen Ihres speziellen Falls.

Die bessere Strategie, wenn Sie befürchten, diese Grenze zu erreichen, besteht jedoch darin, die kleinstmöglichen Pullups zu verwenden, um den maximalen Strom nicht zu überschreiten, den ein Knoten senken können muss, wenn er eine Busleitung niedrig hält. Das ist das Beste, was Sie tun können, also liegt es jetzt an der Busgeschwindigkeit, sich an die Kapazität anzupassen, die Sie tatsächlich haben.

Nehmen wir zum Beispiel an, dies ist ein normaler IIC-Bus, bei dem der maximale Senkenstrom pro Leitung 3 mA beträgt. (3,3 V)/(3 mA) = 1,1 kΩ, was der niedrigste Pullup ist, den Sie mit 3,3 V-Strom verwenden können. Nehmen wir an, eine Leitung hat wirklich eine parasitäre Kapazität von 400 pF gegen Masse. Der Pullup und diese Kapazität bilden ein RC-Tiefpassfilter mit einer Zeitkonstante von (1,1 kΩ)(400 pF) = 440 ns. Ich erinnere mich nicht auf Anhieb, was der garantierte logische High-Pegel für IIC ist (Ihre Aufgabe, nachzuschlagen), also nehmen wir 2,0 V als Beispiel. Es dauert 0,93 Zeitkonstanten, bis das RC-Filter von 0 auf 2,0 V ansteigt, was 410 ns entspricht. So lange dauert es, nachdem eine 1 in den Bus "geschrieben" wurde, bevor alle Geräte sie garantiert als 1 sehen. Offensichtlich muss die halbe Bitzeit etwas länger sein. Bei 410 ns Halbbitzeit haben Sie 820 ns Bitzeit, oder 1,2 MHz maximale Taktrate. Auch hier möchten Sie eine gewisse Marge. Ein Faktor von 2 wäre schön, also könnte man 600 kHz als obere Taktratengrenze in Betracht ziehen. Einfache IIC-Slaves können 400 kHz als Obergrenze haben, womit dieser Bus gut funktionieren sollte.

Denken Sie auch hier daran, dass einige Zahlen in diesem Beispiel erfunden wurden. Es ist Ihre Aufgabe, alle relevanten Spezifikationen zu überprüfen und die richtigen Werte zu ersetzen. Ich versuche nur zu zeigen, wie man über die Berechnungen geht.

Der I2C ist ein Bus zum Verbinden mit mehreren Slaves. Diese Slaves können andere MCUs oder Sensoren sein (Kreisel, Beschleunigung usw.). Jetzt hat jeder Pin des Slaves (der mit dem Bus verbunden ist) eine eigene Kapazität und lädt die Leitung mit diesem Wert. Bei Mikrocontrollern sind es normalerweise einige PicoFarad. Sehen Sie sich das Datenblatt an. Jetzt können diese als kleine Kondensatoren parallel modelliert werden (für jeden Slave/Master im Bus).

Jetzt haben wir Spuren, die diese Busse verbinden, und diese haben ihre eigene Impedanz (kapazitiv und induktiv). Sie können induktive vergessen, da sie nur bei hohen Frequenzen und nicht bei I2C-Frequenzen zum Einsatz kommen. Die Kapazität dieser Spuren kann mit Tools wie Saturn PCB oder Agilent berechnet werden, um eine grobe Schätzung der kapazitiven Belastung Ihres Busses zu erhalten.

Geben Sie hier die Bildbeschreibung ein