Quel est le taux de balayage pour I2C?

10

Je configure I 2 C sur un PIC18 en utilisant les fonctions intégrées du compilateur C18 comme décrit dans la section 2.4 de la documentation :

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

Je ne sais pas trop quoi faire slew. Je peux choisir entre deux options, définies dans i2c.h:

  • SLEW_OFF: Vitesse de balayage désactivée pour le mode 100 kHz
  • SLEW_ON: Taux de balayage activé pour le mode 400 kHz

Dans la fiche technique du registre 15-1, page 257, les deux options sont expliquées un peu plus en détail:

  • 1 = Contrôle de la vitesse de balayage désactivé pour le mode de vitesse standard (100 kHz et 1 MHz)
  • 0 = Contrôle de la vitesse de balayage activé pour le mode haute vitesse (400 kHz)

Je ne le comprends pas cependant - j'ai quelques questions:

  1. Qu'est - ce que le taux de balayage?

  2. Pour moi, les deux options n'ont pas de sens - que se passe-t-il si je souhaite désactiver le taux de balayage pour 400 kHz et l'activer pour 100 kHz? Pourquoi est-ce?

  3. Quand dois-je choisir SLEW_OFFet quand SLEW_ON?


la source

Réponses:

8

La vitesse de balayage est la vitesse à laquelle le signal passe de faible à élevé, ou vice versa. En limitant cette transition abrupte, vous pouvez réduire la sonnerie des réflexions du signal et limiter la diaphonie entre les lignes de signal.

La façon dont cela fonctionne, cependant, c'est qu'à 100 kHz, les taux de signal sont si lents que le taux de balayage n'a pas vraiment d'importance; à 400 kHz, vous pourrez peut-être corriger un circuit autrement problématique en le limitant; mais lorsque vous atteignez 1 MHz, vous avez vraiment besoin de toute la vitesse de transition que vous pouvez obtenir, il vous suffit donc de faire une bonne correspondance du signal et d'acheminer vos lignes plus soigneusement.

Le bit en question ne fait rien d'autre que d'activer ou de désactiver la fonctionnalité. Le reste est simplement un conseil. Les vitesses sont entre parenthèses, car ce n'est qu'une suggestion.

gbarry
la source
Merci! Cela semble être une bonne option - pourquoi ne pas utiliser le contrôle de la vitesse de balayage?
2
@CamilStaps - Si je comprends bien, il semble que vous ayez mal lu la réponse. Des transitions nettes (SLEW_ON) provoquent un bruit et une sonnerie EMI supplémentaires. Les transitions lentes (SLEW_OFF) réduisent les interférences électromagnétiques mais réduisent la fréquence maximale utilisable de la liaison. C'est un compromis.
Tim
@gbarry: Ah, donc avec le contrôle de la vitesse de balayage désactivé, le signal est aussi proche des ondes carrées que le uC peut le faire. Avec le contrôle de la vitesse de balayage sur l'onde, les transitions hautes / basses sont plus inclinées (= moins verticales) qu'elles ne le seraient autrement?
angelatlarge
1
C'est exact, même si je ne sais pas à quel point c'est dramatique sur le PIC (je devrais le vérifier). Note historique: La spécification RS232 avait une limitation de vitesse de balayage, donc quelqu'un est sorti avec une puce de pilote qui avait de bons signaux de sortie en pente. Et puis nous avons tous commencé à utiliser des taux de bps de plus en plus rapides, donc nous ne pouvions pas utiliser cette puce ...
gbarry
1
Trois ans plus tard, et j'ai eu la même question, mais je l'ai réellement mesurée. Pour référence future, sur un PIC16F1454 avec des tractions de 4,7 k et un seul esclave sur le bus, le temps de chute est de 2,9 ns sans limitation de vitesse de balayage (éventuellement limitée par ma sonde 150 MHz), et de 151 ns avec limitation de vitesse de balayage. Il n'affecte pas le temps de montée.
pipe