Home/Blog/Niveaux logiques et signaux électriques - Comment les bits deviennent des tensions
March 31, 2026
9 min read
2 views
🇫🇷 French

Niveaux logiques et signaux électriques - Comment les bits deviennent des tensions

Avant tout protocole, les bits doivent devenir des tensions. Comprendre le 3,3V vs 5V, l'intégrité du signal, les résistances de tirage et la conversion de niveaux.

EmbarquéÉlectroniqueSPII2CCANUARTRS-485Protocoles
Published in Technology
Niveaux logiques et signaux électriques - Comment les bits deviennent des tensions

Niveaux logiques et signaux électriques. Comment les bits deviennent des tensions

Avant que UART, SPI, I2C ou tout autre protocole ne soit pertinent, il y a quelque chose de plus fondamental : un fil est soit à une tension haute, soit à une tension basse. C'est tout. Tout le reste est construit par-dessus cette réalité physique.

Ça paraît évident. jusqu'au moment où vous connectez un Arduino 5V à un ESP32 3,3V pour la première fois. Si vous avez de la chance, rien ne se passe. Si vous en avez moins, vous venez de tuer une pin d'entrée. Parfois la puce entière. Donc autant comprendre cette couche correctement avant de monter.


Ce qu'est vraiment un niveau logique

Un niveau logique n'est pas une tension unique. c'est une plage. Un système lit tout ce qui est dans la plage HAUTE comme un 1, tout ce qui est dans la plage BASSE comme un 0, et tout ce qui est entre les deux comme... indéfini. Cette zone grise existe intentionnellement ; c'est la marge de bruit.

SystèmeLogic LOWLogic HIGHAlimentation
5V TTL0. 0,8 V2,0. 5,0 V5 V
3,3V CMOS0. 0,8 V2,0. 3,3 V3,3 V
1,8V CMOS0. 0,35 V1,17. 1,8 V1,8 V
code
5,0 V  ┤ ─────────────── Zone valide HIGH
2,0 V  ┤ - - - - - - - - Seuil HIGH
       ░  ← zone interdite
0,8 V  ┤ - - - - - - - - Seuil LOW
0,0 V  ┤ ─────────────── Zone valide LOW

À noter : une sortie CMOS 3,3V peut piloter une entrée TTL 5V sans problème. 3,3V se situe bien dans la plage valide HIGH du TTL 5V (qui n'exige que 2,0V minimum). L'inverse ne fonctionne pas : une sortie 5V sur une entrée 3,3V envoie celle-ci bien au-delà de sa tension maximale admissible.


Résistances de tirage. et pourquoi la valeur compte davantage qu'on ne le croit

Certaines lignes de bus sont open-drain : la puce peut seulement tirer la ligne vers le bas (LOW), jamais la piloter activement vers le haut. I2C en est l'exemple classique. Une résistance de tirage (pull-up) est placée entre l'alimentation et la ligne, fournissant l'état HIGH par défaut de manière passive.

mermaid
Rendering diagram...

La valeur de la résistance n'est pas arbitraire. Trop petite. 100Ω. et vous consommez 33mA chaque fois que la ligne est tirée vers le bas. Trop grande. 100kΩ. et le temps de montée devient si lent que les fronts se mélangent à n'importe quelle vitesse réelle. Pour I2C à 100kHz, 4,7kΩ est la valeur standard. À 400kHz, descendez à 2,2kΩ. À 1MHz, 1kΩ ou moins.

J'ai vu des bus I2C qui "fonctionnaient presque" à 100kHz avec un pull-up de 10kΩ. ça semblait bon sur l'analyseur logique, jusqu'à ce que le PCB chauffe légèrement et que la capacité parasite augmente un peu. Puis ça s'arrêtait. Le bon pull-up a réglé le problème définitivement.


Intégrité du signal. ce qui se passe à grande vitesse

Même une piste PCB de 5cm a une résistance, une capacité et une inductance. À faible vitesse (UART à 9600 bauds), rien de tout cela n'a d'importance. Sur SPI à 40MHz, cela peut faire la différence entre une carte qui fonctionne et une qui tombe en panne de manière intermittente.

code
Front idéal          Front réel sur une longue trace

1 ─┐              1 ─┐~~_
   │                  └~~~
0 ─┘              0 ──────
                       ↑ oscillations. cette chute peut ressembler à un LOW parasite

Pistes courtes, impédance adaptée (50Ω est typique pour les pistes PCB) et une petite résistance série (33–100Ω) près de la sortie du pilote aident tous. La résistance série amortit les oscillations sans affecter la tension en régime permanent.


Mélanger des appareils 3,3V et 5V

La solution la plus sûre est de ne jamais le faire. En pratique, vous n'avez souvent pas le choix. Il existe trois vraies options :

  • Diviseur résistif: fonctionne pour un signal unidirectionnel où vous abaissez 5V à 3,3V. Rapide, pas cher, zéro composant actif. Mais pas utilisable sur les lignes bidirectionnelles.
  • Commutateur MOSFET (circuit BSS138). gère les lignes bidirectionnelles comme I2C. Fonctionne bien jusqu'à quelques centaines de kHz.
  • CI de conversion dédié (TXS0102, TXB0108). plus rapide et plus fiable pour SPI et tout ce qui dépasse 1MHz.
mermaid
Rendering diagram...

Ne sautez pas cette étape. La phase "ça marche sur mon bureau" d'une connexion directe 5V→3,3V dure parfois des mois avant de commencer à générer des erreurs de bit ou d'endommager silencieusement la structure ESD de l'entrée. À ce stade, vous avez oublié que vous l'aviez fait.

Bien configurer la couche physique n'est pas glamour, mais chaque session de débogage qui commence par "SPI perd des octets aléatoirement" ou "I2C se bloque après quelques minutes" est en réalité le symptôme de quelque chose de cassé à ce niveau.

Last updated: May 7, 2026

Get notified of new posts

No spam, unsubscribe anytime.