Sortie open drain vs push-pull : les principales différences

Ce sont deux étages de sortie qui délivrent des signaux numériques, mais ils diffèrent dans la façon de produire le niveau H. Une sortie push-pull combine un pMOS côté alimentation et un nMOS côté masse, et pilote activement H comme L avec des transistors : elle est rapide et ne consomme presque aucun courant au repos. Une sortie open drain ne possède qu’un nMOS côté masse : elle tire la ligne vers L, mais pour H elle se déconnecte et une résistance de pull-up remonte la ligne. Le front montant est plus lent, mais plusieurs sorties peuvent partager une même ligne (ET câblé) et la tension de pull-up peut être choisie librement, d’où son usage pour l’I2C et les lignes d’interruption.

CritèreSortie push-pullSortie open drain
Structure de l’étage de sortieDeux transistors : un pMOS côté alimentation et un nMOS côté masse (même forme qu’un inverseur CMOS)Uniquement un nMOS côté masse. Le drain est relié à la broche ; rien côté alimentation
Production du niveau HLe pMOS conduit et relie la broche à l’alimentationLe nMOS se bloque et déconnecte la broche (haute impédance) ; une résistance de pull-up externe remonte la ligne
Production du niveau LLe nMOS conduit et relie la broche à la masseLe nMOS conduit et relie la broche à la masse (identique)
Vitesse de montéeRapide. Le pMOS charge la ligneLente. Fixée par la constante de temps RC de la résistance de pull-up R et de la capacité de ligne C (par ex. 4,7 kΩ et 100 pF donnent environ 0,47 µs)
Vitesse de descenteRapide. Le nMOS décharge la ligneRapide. Le nMOS décharge la ligne
Plusieurs sorties sur une même ligneImpossible. Si H et L s’opposent, un fort courant circule de l’alimentation vers la massePossible. Il suffit qu’une seule sortie délivre L pour que la ligne passe à L (ET câblé)
Liaison avec des circuits à une autre tensionLa tension H est fixée par la propre tension d’alimentation. Un convertisseur de niveau est nécessaire vers un circuit à une autre tensionLa tension H est fixée par le point où est reliée la résistance de pull-up : elle peut s’adapter à la tension du destinataire, dans la limite de la tension admissible de la broche
ConsommationPresque nulle au repos (uniquement les fuites). Des courants de charge et de décharge circulent lors des commutationsTant que la sortie délivre L, un courant traverse en permanence la résistance de pull-up (environ 0,7 mA avec 3,3 V et 4,7 kΩ)
Ordre de grandeur de la vitessePlusieurs dizaines de MHz ou plus sont possiblesLimitée par la résistance de pull-up et la capacité. En I2C, par exemple 100 kHz, 400 kHz ou 1 MHz
Usages typiquesSignaux rapides : signaux SPI et UART, horloges, GPIO courantes, bus mémoireI2C et SMBus, lignes d’interruption et de reset partagées entre plusieurs composants, liaison avec des circuits à une autre tension, commande de LED

Les valeurs indiquées sont des ordres de grandeur typiques et varient selon la génération de procédé et le produit.

Quand choisir l'un ou l'autre ?

Sortie push-pull
Lorsqu’une sortie unique pilote une entrée et que la vitesse et une faible consommation comptent. C’est le cas des signaux numériques ordinaires comme les GPIO, le SPI et l’UART.
Sortie open drain
Lorsque plusieurs composants pilotent la même ligne (I2C, lignes d’interruption ou de reset partagées), ou lorsqu’on veut transmettre un signal à un circuit à une autre tension en changeant la tension de pull-up.
Configuration
Sur de nombreux microcontrôleurs, les GPIO peuvent être configurées en push-pull ou en open drain. Les broches utilisées pour l’I2C sont configurées en open drain et reçoivent une résistance de pull-up externe.

Questions fréquentes

Comment choisir la valeur de la résistance de pull-up ?

Plus elle est faible, plus le front montant est rapide, mais plus le courant consommé pendant le niveau L augmente et plus la tension basse (VOL) monte. La limite haute découle de la capacité de la ligne et du temps de montée requis, la limite basse du courant que la sortie peut absorber et de la spécification de VOL. En I2C, on utilise couramment quelques kΩ (par exemple environ 2,2 à 10 kΩ).

Que se passe-t-il si l’on relie directement deux sorties push-pull ?

Si l’une délivre H et l’autre L, un fort courant circule de l’alimentation vers la masse à travers le pMOS du côté H et le nMOS du côté L (conflit de bus). La tension de la ligne reste en outre à un niveau intermédiaire, ce qui peut provoquer un échauffement ou détruire les composants. Pour une ligne partagée, on utilise donc une sortie open drain ou une sortie trois états capable de se déconnecter.

Pourquoi l’I2C utilise-t-il des sorties open drain ?

Parce que plusieurs équipements pilotent les mêmes lignes SDA et SCL. Le récepteur qui tire SDA vers L pour renvoyer un ACK, l’esclave qui maintient SCL à L pour faire patienter (clock stretching) et l’arbitrage lorsque plusieurs maîtres commencent à émettre en même temps reposent tous sur la propriété du ET câblé : il suffit qu’un seul équipement délivre L pour que la ligne soit à L.

Quelle différence avec une sortie à collecteur ouvert ?

Le principe est le même : on parle de collecteur ouvert lorsque le transistor de sortie est un transistor bipolaire, et d’open drain lorsque c’est un MOSFET. Dans les deux cas, la sortie ne fait que tirer vers L, et le niveau H est produit par une résistance de pull-up.

Vérifier vos connaissances

Lorsque plusieurs circuits à sortie à drain ouvert sont reliés à une même ligne de signal munie d'une résistance de pull-up, quel est le fonctionnement correct ?

  1. ALes sorties entrent en conflit et sont toujours détruites
  2. BIl suffit qu'une seule produise 0 pour que la ligne vaille 0 ; elle fonctionne comme un AND câblé
  3. CIl suffit qu'une seule produise 1 pour que la ligne vaille 1
Afficher la réponse et l'explication

Réponse : B. Il suffit qu'une seule produise 0 pour que la ligne vaille 0 ; elle fonctionne comme un AND câblé

Une sortie à drain ouvert a deux états : tirer la ligne vers la masse par un transistor, ou la déconnecter ; le 1 est produit par la résistance de pull-up. Il suffit qu'une seule sortie produise 0 pour que la ligne vaille 0, et elle ne vaut 1 que si toutes sont déconnectées : elle fonctionne comme un AND câblé, et les sorties ne sont pas détruites en cas de conflit. On l'utilise pour le bus I²C, les lignes d'interruption et la conversion de niveaux entre circuits de tensions d'alimentation différentes. Le front montant, déterminé par la résistance de pull-up et la capacité de la ligne, est lent.

Quel changement est correct lorsque l'on réduit la valeur de la résistance de rappel (pull-up) d'une sortie à drain ouvert ?

  1. ALe front montant devient plus lent, mais le courant qui circule lorsque la sortie est à L diminue, ce qui réduit la consommation
  2. BLe front montant devient plus rapide, mais le courant qui circule lorsque la sortie est à L augmente, et VOL a tendance à monter
  3. CLa tension du niveau H devient supérieure à la tension d'alimentation à laquelle est reliée la résistance de rappel et risque de dépasser les valeurs nominales de l'entrée du récepteur
Afficher la réponse et l'explication

Réponse : B. Le front montant devient plus rapide, mais le courant qui circule lorsque la sortie est à L augmente, et VOL a tendance à monter

Le niveau H d'une sortie à drain ouvert est obtenu par la résistance de rappel, qui tire la ligne vers le haut lorsque le transistor de sortie est bloqué. La vitesse du front montant est fixée par la constante de temps formée par la résistance et la capacité de la ligne : par exemple 1 µs pour 10 kΩ et 100 pF. Réduire la résistance accélère le front, mais lorsque la sortie est à L, un courant circule depuis l'alimentation à travers la résistance : 3,3 mA pour 3,3 V et 1 kΩ. Si ce courant dépasse la condition IOL de la fiche technique, VOL ne reste plus dans la valeur spécifiée ; on choisit donc une valeur qui satisfait les deux exigences.

Quelle caractéristique de la communication I2C est correcte ?

  1. AChaque équipement nécessite une ligne de sélection de puce dédiée
  2. BLes lignes d'émission et de réception sont séparées et permettent la transmission simultanée dans les deux sens
  3. CPlusieurs équipements partagent deux lignes, horloge (SCL) et données (SDA), et l'interlocuteur est sélectionné par une adresse
Afficher la réponse et l'explication

Réponse : C. Plusieurs équipements partagent deux lignes, horloge (SCL) et données (SDA), et l'interlocuteur est sélectionné par une adresse

L'I2C est une communication série synchrone reliant plusieurs équipements par deux lignes seulement, SCL et SDA. Le maître envoie d'abord l'adresse 7 bits de l'interlocuteur, et seul l'équipement à cette adresse répond. Les lignes sont à drain ouvert, tirées à 1 par des résistances de tirage, et tout équipement peut les forcer à 0. Elle convient aux composants pour lesquels la réduction du câblage importe plus que la vitesse, comme les capteurs de température, les accéléromètres ou les EEPROM.

  1. En I2C, comment le récepteur d'un octet signale-t-il qu'il l'a reçu ?
  2. Quel est le rôle correct d'un translateur de niveau inséré pour transmettre un signal entre deux blocs fonctionnant à des tensions d'alimentation différentes ?

Questions d'entraînement sur Circuits logiques

Termes clés expliqués

Sortie à drain ouvert (open drain)
Sortie qui n'expose que le drain du transistor de sortie et ne pilote activement que le niveau bas. Le niveau haut est fourni par une résistance de tirage externe, si bien que plusieurs sorties peuvent partager une même ligne ou être reliées à des circuits alimentés sous une autre tension. Utilisée par exemple sur les bus I2C.
Résistance de tirage (pull-up)
Résistance reliant une ligne de signal à l'alimentation pour la maintenir au niveau 1 lorsque rien ne la pilote. Elle évite les entrées flottantes et s'utilise aussi sur les lignes I2C.
I2C
Communication série synchrone qui connecte plusieurs équipements sur deux lignes, horloge (SCL) et données (SDA), et sélectionne le correspondant par une adresse. Les lignes sont à drain ouvert avec résistances de rappel (pull-up).

Comparatifs associés