Timing I2C : temps de montée, pull-ups et pièges de sondage

I2C Timing: Rise Time, Pull-Ups, and Probe Traps

Timing I2C au banc d'essai : temps de montée, résistances de tirage et pièges des sondes

La plupart des défaillances I2C ne sont pas des bugs de protocole. Elles sont dues à un temps de montée qui ne respecte pas la spécification, à une résistance de tirage choisie par habitude, ou à une sonde qui ajoute suffisamment de capacité pour modifier la mesure qu'elle effectue.

Réponse rapide

  • Temps de montée: tr ≈ 0.8473 × Rp × Cbus. 4.7 kΩ avec 200 pF donne 796 ns — acceptable à 100 kHz, hors spécification à 400 kHz.
  • Fenêtre de pull-up: Rp max d’après le temps de montée, Rp min d’après le courant absorbé. À 3.3 V, 3 mA, le plancher est d’environ 0.97 kΩ.
  • 400 kHz: 300 ns de montée max, 400 pF de bus max. Les deux limites sont contraignantes en même temps sur un câble long.
  • Mesurer à 30–70 %, au niveau du composant le plus défavorable, avec une masse courte — et n’oubliez pas que la sonde ajoute 10–15 pF.

1. Les limites selon le mode

Mode Horloge tr max Cbus max tSU;DAT min
Standard 100 kHz 1000 ns 400 pF 250 ns
Fast 400 kHz 300 ns 400 pF 100 ns
Fast Plus 1 MHz 120 ns 550 pF 50 ns
High Speed 3.4 MHz 40 ns 100 pF 10 ns

Ces informations proviennent de la spécification I2C de NXP (UM10204) et de ses tableaux de temporisation. Les deux valeurs qui importent pour une carte sont tr et Cbus, et elles sont liées par la résistance de rappel.

Pourquoi le bus se comporte comme il le fait

I2C est à drain ouvert : chaque dispositif peut tirer une ligne à l'état bas, et rien ne peut la porter à l'état haut hormis la résistance de pull-up. C'est ce qui rend possibles l'arbitrage multi-maître et le clock stretching, et c'est aussi pourquoi le front montant est une courbe RC plutôt qu'un front piloté.

La conséquence est un timing asymétrique : les fronts descendants sont rapides (un transistor tire vers le bas), les fronts montants sont lents (une résistance charge le bus). Tout problème de timing sur un bus I2C est donc un problème lié au front montant ou à la résistance qui le crée.

Le bit d'acquittement est l'autre partie sensible au timing : le récepteur doit tirer SDA à l'état bas dans la fenêtre ACK après le huitième coup d'horloge, et le maître doit relâcher SDA à temps. Sur un bus lent avec un pull-up faible, l'ACK peut arriver suffisamment tard pour être lu comme un NACK.

2. Temps de montée et résistance de pull-up

tr ≈ 0.8473 x Rp x Cbus

4.7 kOhm, 100 pF: 0.8473 x 4700 x 100e-12 = 398 ns
4.7 kOhm, 200 pF: 796 ns
2.2 kOhm, 200 pF: 373 ns
1.8 kOhm, 200 pF: 305 ns

À 100 kHz, 4.7 kΩ convient jusqu’à environ 250 pF. À 400 kHz, cela échoue au-delà d’environ 75 pF — seuil atteint par trois appareils plus un câble court, avant même toute marge.

Deux détails modifient la valeur réelle. Tolérance de la résistance : un composant à 1 % convient, un composant à 5 % fait varier tr de 5 % et reste généralement acceptable. Température : la résistance de tirage dérive légèrement, mais la capacité d’entrée des appareils et la capacité du câble dérivent davantage, ce qui explique pourquoi la vérification doit être répétée aux températures extrêmes plutôt qu’uniquement à 25 °C.

I2C rise time versus pull-up resistance for 50, 100, 200 and 400 pF
Figure 1 — La même résistance de 4.7 kΩ est conforme à 100 kHz et non conforme à 400 kHz, selon la capacité.

3. La fenêtre de résistance de tirage

Le temps de montée fixe la résistance maximale ; le courant absorbé fixe la valeur minimale :

Rp max = tr / (0.8473 x Cbus)
Rp min = (VDD - VOL) / IOL = (3.3 - 0.4) / 0.003 = 967 Ohm
Pull-up maximum and minimum versus bus capacitance
Figure 2 — À 400 kHz, la fenêtre se referme rapidement : à 400 pF, le maximum est inférieur à 1 kΩ et la limite inférieure s'en approche.

C'est la raison pour laquelle les conceptions à 400 kHz utilisent 1.5–2.2 kΩ, et non 4.7 kΩ. C'est aussi pourquoi « cela fonctionne sur la carte de développement » n'est pas une preuve : la carte de développement comporte trois dispositifs et 8 cm de piste, tandis que le produit comporte six dispositifs, un connecteur et 40 cm de câble.

Choisir la résistance pour un bus réel

Donné : mode 400 kHz, Cbus = 200 pF, VDD = 3.3 V

Rp max = 300 ns / (0.8473 x 200 pF) = 1.77 kOhm
Rp min = (3.3 - 0.4) / 3 mA      = 0.97 kOhm
Choisir 1.5 kOhm : tr = 254 ns, courant absorbé = 1.9 mA

Il s’agit d’une conception valide, et elle n’a rien à voir avec les 4.7 kΩ qui figurent sur la plupart des schémas de référence. Ces schémas supposent 100 kHz et un bus court ; les copier dans un produit à 400 kHz est la façon la plus courante d’hériter d’un problème de timing.

Capacité de bus Rp max, 100 kHz Rp max, 400 kHz Choix pratique
100 pF 11.8 kΩ 3.5 kΩ 4.7 kΩ
200 pF 5.9 kΩ 1.8 kΩ 1.5–2.2 kΩ
300 pF 3.9 kΩ 1.2 kΩ 1.2 kΩ, check IOL
400 pF 2.9 kΩ 0.9 kΩ Below the floor: reduce speed

4. Ce que l'oscilloscope montre réellement

Mesurer 30–70 %, pas 0–100 %

Le temps de montée I2C est spécifié entre 30 % et 70 % de VDD, car le bus est un réseau RC et les queues sont asymptotiques. Mesurer 0–100 % donne un nombre environ 1,5–2× trop grand et fait paraître marginal un bus conforme.

La sonde fait partie du bus

Une sonde standard 10:1 ajoute 10–15 pF. Cela représente 5 % d’un bus de 200 pF et suffit à pousser une conception marginale au-delà de la limite. Pire, le fil de masse ajoute de l’inductance : un fil à pince de 10 cm représente environ 100 nH, ce qui résonne avec la capacité du bus et fait apparaître un dépassement que le bus réel ne présente pas.

Same I2C bus measured with a long ground lead and a short ground spring
Figure 3 — À titre illustratif : c’est le long fil de masse qui crée la résonance, pas le bus. Utilisez une masse à ressort ou une masse courte soudée.

Règles pratiques : utilisez une masse à ressort ou une queue de câble coaxial soudée ; mesurez au niveau du composant le plus éloigné du maître ; sondez SCL et SDA séparément, pas les deux avec deux longs fils ; et indiquez la capacité de la sonde lorsque vous communiquez un temps de montée.

Si vous devez sonder une carte à pas fin, soudez un fil de 0.1 mm à la broche et fixez la sonde dessus avec une pince, plutôt que de poser la pointe sur le plot. Le contact mécanique est plus stable, et la capacité ajoutée est une valeur connue de 12 pF au lieu d’une valeur qui varie avec la pression.

5. Les temps d’établissement et de maintien sont relatifs au front d’horloge

I2C SCL and SDA waveform with setup and hold markers
Figure 4 — Les données changent lorsque SCL est à l'état bas et doivent être stables sur le front montant. Mesurez au niveau du récepteur, pas du pilote.

Deux erreurs de mesure ici. Premièrement, mesurer au niveau du maître : les données vues par un esclave à l'extrémité d'un long bus arrivent plus tard, et la marge de setup y est plus faible. Deuxièmement, oublier que SDA est bidirectionnelle : lors d'un acknowledge, l'esclave la pilote, et les formes de front sont différentes.

En mode rapide, tSU;DAT est de 100 ns et tHD;DAT est effectivement de 0 avec un maintien interne de 300 ns. Ces valeurs sont faciles à respecter sur un bus court et faciles à perdre sur un bus long avec un pull-up faible.

Le clock stretching nécessite sa propre mesure

Si un esclave étire l'horloge, SCL reste bas après que le maître l'a libérée. Mesurez cela directement : déclenchez sur le front descendant et confirmez que la ligne ne remonte pas tant que l'esclave ne l'a pas libérée. Un maître qui ne prend pas en charge l'étirement d'horloge va cadencer sans interruption et corrompre la lecture, et le symptôme est un NACK ou un octet à 0xFF — ce qui ressemble à un problème de câblage.

6. Budget de capacité du bus

Example I2C bus capacitance budget
Figure 5 — Les dispositifs, la piste, le connecteur et la sonde comptent tous. La limite de 400 pF est atteinte plus tôt que ne le supposent la plupart des budgets.

Une carte fast-mode typique : six dispositifs à 8–10 pF chacun (50–60 pF), 8 cm de piste à environ 1 pF/cm (8 pF), connecteur et câble (50–150 pF), sonde (12 pF). Le câble est généralement le terme individuel le plus important, ce qui explique pourquoi les longues liaisons I2C nécessitent un buffer de bus ou une vitesse plus faible.

Deux conséquences pratiques. Premièrement, le câble, et non les dispositifs, est la variable que vous pouvez maîtriser — raccourcissez-le, blindez-le, ou acceptez 100 kHz. Deuxièmement, le budget doit être calculé pour la configuration la plus défavorable prise en charge par le produit, et non pour la configuration de banc : une carte avec un connecteur pour un capteur externe doit tolérer le câble de l'utilisateur, pas celui de 10 cm du développeur.

Si les valeurs sont proches, ajoutez de la marge à la résistance plutôt que de la réduire : un front légèrement plus lent est plus sûr qu'une résistance de tirage qui ne peut pas absorber suffisamment de courant à VOL.

7. Modes de défaillance et ce qu'ils signifient

Un cas représentatif

Une carte avec six dispositifs, un câble de 30 cm et des résistances de tirage de 4.7 kΩ fonctionne à 100 kHz et échoue à 400 kHz avec un NACK du dernier dispositif. Le réflexe est de mettre en cause le dispositif ou le firmware. La mesure montre un temps de montée de 1.1 µs à l’extrémité éloignée — près de quatre fois la limite de 300 ns — et la cause est la capacité du câble plus les 4.7 kΩ.

Deux corrections sont possibles : réduire la résistance de tirage à 1.5 kΩ (le temps de montée tombe à environ 350 ns avec 400 pF, encore marginal), ou descendre à 100 kHz où le même bus est conforme. Une troisième option, un tampon de bus, répartit la capacité et permet au mode rapide de fonctionner. La bonne solution dépend de l’importance du temps de transfert.

Symptôme Cause habituelle Mesure qui le confirme
NACK on the last device only Rise time too slow at the far end tr at the furthest device vs mode limit
Works at 100 kHz, fails at 400 Pull-up too large for Cbus tr and Rp; check the window
Random bit errors under load Crosstalk or ground bounce Scope both lines with a short ground
Bus stuck low after a reset Slave holding SDA, or no clock stretching support Count clocks; check the slave state machine
Intermittent after adding a device Capacitance budget exceeded Recompute tr with the new total

8. Une procédure de mesure qui tient la route

  1. Alimentez la carte depuis son alimentation réelle, avec le câble réel et le nombre réel de dispositifs.
  2. Réglez le bus sur le mode le plus rapide que le produit utilisera, puis ajoutez une marge de 20 % dans l'analyse.
  3. Placez la sonde sur le dispositif le plus éloigné du maître, avec une masse courte.
  4. Capturez SCL et SDA ; mesurez tr entre 30 % et 70 %, sur les deux fronts.
  5. Mesurez tSU;DAT au niveau du récepteur, en utilisant le franchissement du seuil SCL comme référence.
  6. Notez la capacité de la sonde à côté de la valeur ; un temps de montée sans elle n'est pas reproductible.
  7. Répétez à la température de fonctionnement la plus basse et la plus élevée, car la résistance de pull-up et la force d'attaque du driver dérivent toutes les deux.
Vérifier Réussi En cas d'échec
Rise time at worst device ≤ 300 ns (400 kHz) Reduce Rp or Cbus
Pull-up current at VOL ≤ 3 mA Raise Rp; check VOL spec
Acknowledge on every device ACK at address + 1 Address conflict or missing pull-up
Clock stretching Master waits while SCL held low Master lacks support; use a different peripheral
Temperature extremes Same margin at −20 and +70 °C Recompute with worst-case Rp tolerance

Pour le dimensionnement du pull-up lui-même, le guide complémentaire surRésistances de pull-up I2Ccouvre la sélection de la résistance plus en détail. NotreExtenseur IO PCA9535est un dispositif typique à 400 kHz à utiliser comme référence de test.

Un format de rapport simple garantit l'honnêteté des chiffres : mode, horloge, estimation de Cbus, Rp, tr mesuré (30–70 %), capacité de la sonde, température et position du dispositif. Sans ces sept valeurs, une affirmation « le bus est bon » ne peut être vérifiée par personne d'autre.

Pour le contrôle à réception des dispositifs I2C — codes de date, marquage et contrôles de lot — voir notreprocessus de traçabilité.

9. FAQ

Pourquoi mon bus fonctionne-t-il au banc mais échoue-t-il sur le terrain ?

Le bus de terrain a plus de capacité : câble plus long, plus d’appareils, un connecteur. Le temps de montée évolue avec la capacité, donc une conception qui était limite à 200 pF échoue à 350 pF.

Puis-je simplement abaisser la fréquence d’horloge à 100 kHz ?

Souvent oui, et c’est une solution légitime lorsque le bus est long. Cela double le temps de transfert, ce qui compte pour les transferts volumineux mais est sans importance pour une interrogation de capteur.

Comment mesurer correctement le temps de montée ?

30 % à 70 % de VDD, à l’extrémité éloignée du bus, avec une masse courte et une capacité de sonde connue. Indiquez la capacité de sonde avec le nombre.

Ai-je besoin d’un buffer de bus ?

Si la capacité dépasse la limite du mode, oui — un buffer divise le bus en segments. Pour 400 kHz sur de longs câbles, un buffer ou une vitesse inférieure est généralement la seule option fiable.

Pourquoi l’ajout d’un dispositif casse-t-il un bus existant ?

Chaque dispositif ajoute une capacité d’entrée et, s’il a un pilotage faible, modifie la forme du front. Recalculez le temps de montée et la fenêtre de pull-up avec le nouveau total.

4.7 kΩ est-il toujours incorrect pour 400 kHz ?

Pas toujours, mais ce n'est conforme qu'à faible capacité — environ 75 pF ou moins. La plupart des cartes avec un connecteur dépassent cette valeur.

Comment connaître la capacité du bus sans la mesurer ?

Additionnez : la capacité d'entrée des composants d'après les fiches techniques, la piste à environ 1 pF/cm, le câble d'après sa spécification, plus 12 pF pour la sonde. Vous serez à 20 % près, ce qui suffit pour choisir une résistance.

10. Sources

Déboguer un bus I2C ?

Envoyez le nombre de périphériques, la longueur du câble et les résistances pull-up actuelles. Nous calculerons le temps de montée et vous indiquerons si le bus respecte les limites du mode.

Guide de dimensionnement des résistances pull-up Envoyer une BOM

Check stock by part number

Turn this insight into a sourcing decision.

Need pricing or a drop-in alternative? Submit a BOM / RFQ or talk to our team.