Was ist die Anstiegsrate für I2C?

Ich konfiguriere I 2 C auf einem PIC18 mit den integrierten Funktionen des C18-Compilers, wie in Abschnitt 2.4 der Dokumentation beschrieben :

void OpenI2C2( unsigned char sync_mode,
    unsigned char slew );

Ich bin mir nicht sicher, was ich damit machen soll slew. Ich kann aus zwei Optionen wählen, definiert in i2c.h:

  • SLEW_OFF: Anstiegsgeschwindigkeit für 100-kHz-Modus deaktiviert
  • SLEW_ON: Anstiegsgeschwindigkeit für 400-kHz-Modus aktiviert

Im Datenblatt in Register 15-1, Seite 257, werden die beiden Optionen etwas ausführlicher erklärt:

  • 1 = Slew-Rate-Steuerung deaktiviert für Standardgeschwindigkeitsmodus (100 kHz und 1 MHz)
  • 0 = Slew-Rate-Steuerung aktiviert für Hochgeschwindigkeitsmodus (400 kHz)

Ich verstehe es aber nicht - ich habe ein paar Fragen:

  1. Was ist die Anstiegsrate?

  2. Für mich machen die beiden Optionen keinen Sinn - was ist, wenn ich die Anstiegsgeschwindigkeit für 400 kHz deaktivieren und für 100 kHz aktivieren möchte? Warum ist das?

  3. Wann soll ich wählen SLEW_OFFund wann SLEW_ON?

Antworten (1)

Die Anstiegsgeschwindigkeit gibt an, wie schnell sich das Signal von niedrig nach hoch oder umgekehrt ändert. Indem Sie diesen abrupten Übergang begrenzen, können Sie das Überschwingen von Signalreflexionen reduzieren und das Übersprechen zwischen Signalleitungen begrenzen.

Es funktioniert jedoch so, dass bei 100 kHz die Signalraten so langsam sind, dass die Anstiegsgeschwindigkeit keine Rolle spielt; Bei 400 kHz können Sie möglicherweise eine ansonsten problematische Schaltung beheben, indem Sie sie begrenzen. Aber wenn Sie dann 1 MHz erreichen, brauchen Sie wirklich die gesamte Übergangsgeschwindigkeit, die Sie bekommen können, und deshalb müssen Sie nur eine gute Signalanpassung vornehmen und Ihre Leitungen sorgfältiger verlegen.

Das fragliche Bit macht nichts weiter, als die Funktion zu aktivieren oder zu deaktivieren. Der Rest sind nur Ratschläge. Die Geschwindigkeiten stehen in Klammern, da es sich nur um einen Vorschlag handelt.

Vielen Dank! Es scheint eine gute Option zu sein - warum sollte ich keine Slew-Rate-Steuerung verwenden?
@CamilStaps - Soweit ich weiß, klingt es so, als hätten Sie die Antwort möglicherweise falsch gelesen. Scharfe Übergänge (SLEW_ON) verursachen zusätzliches EMI-Rauschen und Klingeln. Langsame Übergänge (SLEW_OFF) reduzieren EMI, reduzieren aber die maximal nutzbare Frequenz der Verbindung. Es ist ein Kompromiss.
@gbarry: Ah, also ist das Signal bei ausgeschalteter Anstiegsgeschwindigkeitssteuerung so nah an Rechteckwellen, wie es der uC machen kann. Mit Slew Rate Control auf der Welle sind High/Low-Übergänge steiler (= weniger vertikal) als sie es sonst wären?
Das ist richtig, obwohl ich mir nicht sicher bin, wie dramatisch es auf dem PIC ist (ich sollte es überprüfen). Historischer Hinweis: Die RS232-Spezifikation hatte eine Begrenzung der Anstiegsgeschwindigkeit, also kam jemand mit einem Treiberchip heraus, der schöne Slope-Y-Ausgangssignale hatte. Und dann fingen wir alle an, immer schnellere bps-Raten zu verwenden, also konnten wir diesen Chip nicht verwenden ...
Drei Jahre später hatte ich dieselbe Frage, aber ich habe tatsächlich gemessen. Als zukünftige Referenz beträgt die Abfallzeit auf einem PIC16F1454 mit 4,7-k-Pullups und einem einzelnen Slave am Bus 2,9 ns ohne Begrenzung der Anstiegsgeschwindigkeit (möglicherweise begrenzt durch meine 150-MHz-Sonde) und 151 ns mit Begrenzung der Anstiegsgeschwindigkeit. Die Anstiegszeit wird dadurch nicht beeinflusst.
Einige weitere Details zur Anstiegsgeschwindigkeit können in diesem Forumsbeitrag gefunden werden – zB dass die Anstiegsgeschwindigkeit für steigende Flanken durch die Pull-up-Widerstände gesteuert wird, die im Wesentlichen die Gesamtkapazität des Busses (Draht + Anschlüsse + Pins) hochziehen, wie beschrieben in UM10204 Kapitel 7.1.