Calculadora de pull up para I2C
El rango válido de resistencia según tu voltaje, tu cable y tu velocidad. Con el valor E24 recomendado, el aviso de cuándo el bus va a fallar por tiempo de subida y la respuesta a por qué el 4,7k de siempre a veces no sirve.
En un bus de 3,3 V con 4 dispositivos y 1 metro de cable a 400 kHz, la capacitancia estimada es 100 pF y el pull up tiene que quedar entre 966,7 Ω y 3,541 kΩ. El valor recomendado es 1,5 kΩ, que deja el flanco de subida en 127,1 ns de los 300 ns permitidos y hunde 1,933 mA.
Tu bus, tu cable y tu velocidad
Ajustes finos: capacitancias y módulos con pull up
El 4,7 kΩ de siempre
Acá NO sirve: con 4,7 kΩ el flanco tarda 398,2 ns y el límite en modo rápido son 300 ns.
Rango válido en modo rápido
Piso
966,7 Ω
bajo esto el chip no baja la línea
Recomendada
1,5 kΩ
serie E24 · SKU GK5-17
Techo
3,541 kΩ
sobre esto el flanco no alcanza
Capacitancia
100 pF
4 chips y 100 cm
Tiempo de subida
127,1 ns
42,36% del límite
Corriente hundida
1,933 mA
64,44% de los 3 mA
Este es justo el caso donde el 4,7 kΩ de costumbre falla y la 1,5 kΩ funciona: el bus no es más lento por poner menos resistencia, sube más rápido.
Las dos resistencias que van en este bus
Van dos: una para SDA y otra para SCL
Y acá el 4,7 kΩ de siempre no sirve: con ese valor el flanco tarda 398,2 ns y el modo rápido solo permite 300 ns. El bus falla, y falla de a ratos. La solución es bajar la resistencia, no subirla.
Esa resistencia la tenemos: 1,5 kΩ en 1/4W, SKU GK5-17, $100, con 268 en bodega. Van dos, una para SDA y otra para SCL. Cambia el voltaje, la cantidad de dispositivos, el largo del cable o la velocidad y el rango se recalcula al instante.
Por qué el I2C necesita pull up
Por qué el 4,7k de siempre a veces no sirve
Esta es la pregunta con la que llega casi todo el mundo, así que va primero. El 4,7 kΩ no es un valor universal: es el valor que funciona en el bus corto y lento en el que todos empezamos. Un OLED pegado al microcontrolador, dos cables de diez centímetros, 100 kHz. Ahí el 4,7 kΩ anda perfecto, y como anduvo una vez queda grabado como si fuera la respuesta.
El problema aparece cuando el bus crece. La resistencia de pull up y la capacitancia del bus forman una RC, y esa RC decide cuánto demora la línea en volver a nivel alto cuando nadie la está tirando abajo. Más capacitancia es más lento; más resistencia también.
El caso exacto en que se rompe. Cuatro dispositivos y un metro de cable dan 100 pF de capacitancia. Con 4,7 kΩ el flanco de subida tarda 398,2 ns y el modo rápido de 400 kHz solo permite 300 ns. Se pasa en un 32,74% y el bus empieza a fallar.
El valor que sí funciona en ese bus es 1,5 kΩ, que deja el flanco en 127,1 ns. O sea: la solución es bajar la resistencia, no subirla. Es contra intuitivo y por eso mucha gente prueba con 10 kΩ y empeora las cosas.
Y lo peor de este modo de fallar es que no falla del todo. Falla a veces. El escáner de direcciones encuentra el sensor una de cada tres veces, la lectura se congela cada tanto, mueves el cable y anda de nuevo. Como el síntoma es intermitente, casi nadie sospecha de la resistencia: se sospecha del sensor, del cable, de la librería, de la fuente. La resistencia es la última en la lista y suele ser la culpable.
El pull up no tiene un valor: tiene una ventana
Esa es la idea que cambia todo. Hay un piso y un techo, y vienen de dos cosas que no tienen nada que ver entre ellas. Cualquier valor entre los dos funciona; los dos límites se calculan y ninguno se adivina.
El piso lo pone la corriente que el chip puede hundir
En I2C nadie pone un uno en la línea. Los dispositivos solo saben tirar la línea a cero, y el uno lo pone la resistencia de pull up: por eso se llama bus de colector abierto. Para marcar un cero, el chip tiene que tragarse toda la corriente que baja por el pull up, y la norma solo le exige llegar hasta 0,4 V mientras no le pidan más de 3 mA (20 mA en el modo rápido plus).
Rp mínima = (Vbus menos 0,4 V) / IOLCon 3,3 V eso da 966,7 Ω, y con 5 V sube a 1,533 kΩ. Bajo ese piso el chip ya no consigue bajar la línea lo suficiente y el bus deja de leerse, aunque el flanco de subida sea perfecto. Además, menos resistencia es más consumo permanente, cosa que importa en cualquier cosa a pila.
El techo lo pone el tiempo
Cuando el chip suelta la línea, esta sube sola a través del pull up cargando la capacitancia del bus. Es una exponencial, y la norma le pone un plazo: 1000 ns a 100 kHz, 300 ns a 400 kHz, 120 ns a 1 MHz.
Rp máxima = tr / (0,847 · Cb)De dónde sale el 0,847. La norma no mide el flanco entero, mide el tramo entre el 30% y el 70% de VDD. Una exponencial RC demora exactamente ln(0,7 / 0,3) = 0,8473 constantes RC en cruzar esa franja, y de ahí sale el número. El segundo dibujo de la calculadora de arriba es justo eso: la curva con las dos líneas punteadas y el tramo marcado.
Si en alguna parte ves la misma fórmula con un factor 2,2, ese es el criterio del 10% al 90%, que se usa en otros contextos pero no es el que fija la especificación I2C. Con 2,2 el techo te sale casi tres veces más bajo de lo que corresponde.
Y de dónde sale la capacitancia
Cb = dispositivos × 10 pF + metros × 60 pF + extraLos 10 pF por dispositivo son el máximo por pin que la norma le permite a un chip. Los 60 pF por metro son lo típico de un cable dupont o de cinta plana; un par trenzado con la señal apareada a tierra puede ser bastante peor, y una pista corta en placa impresa bastante mejor. Un protoboard suma entre 10 y 30 pF por su cuenta. Es una estimación y la herramienta lo dice: la capacitancia real se mide, no se deduce.
El 4,7k en cinco buses reales
Los números salen de la misma calculadora de arriba, con 3,3 V de bus. Fíjate en que el 4,7 kΩ no cambia: lo que cambia es el bus.
| Bus | Velocidad | Cb | tr con 4,7 kΩ | Límite | ¿Sirve? |
|---|---|---|---|---|---|
| Un OLED en protoboard | 100 kHz | 26 pF | 103,5 ns | 1 µs | Sí. El bus de todos los tutoriales. Acá el 4,7k anda de sobra. |
| Tres sensores, cables cortos | 400 kHz | 52 pF | 207,1 ns | 300 ns | Sí. Todavía cabe, pero el margen ya se está gastando. |
| Un sensor a un metro | 400 kHz | 100 pF | 398,2 ns | 300 ns | No. Acá se rompe. Es el caso que trae a la gente a buscar esto. |
| Seis módulos en una caja | 400 kHz | 96 pF | 382,3 ns | 300 ns | No. La capacitancia la ponen los chips, no el cable. |
| Rápido plus, todo corto | 1 MHz | 36 pF | 143,4 ns | 120 ns | No. A 1 MHz el presupuesto son 120 ns y el 4,7k no entra ni así. |
Qué resistencia va según el largo del cable
Cuatro dispositivos, 3,3 V, y lo único que cambia es cuánto cable hay. Cada celda trae el valor recomendado y su SKU, y donde el bus no cierra, lo dice.
| Cable | Cb | 100 kHz | 400 kHz | 1 MHz |
|---|---|---|---|---|
| 10 cm | 46 pF | 10 kΩ · GK2-15 | 3,3 kΩ · GK3-16 | 1,5 kΩ · GK5-17 |
| 20 cm | 52 pF | 10 kΩ · GK2-15 | 3,3 kΩ · GK3-16 | 1 kΩ · GK3-17 |
| 50 cm | 70 pF | 6,8 kΩ · GK1-15 | 2,2 kΩ · GK2-16 | 1 kΩ · GK3-17 |
| 100 cm | 100 pF | 5,6 kΩ · GK4-11 | 1,5 kΩ · GK5-17 | 1 kΩ · GK3-17 (justo) |
| 200 cm | 160 pF | 3,3 kΩ · GK3-16 | 1 kΩ · GK3-17 | no cierra |
| 300 cm | 220 pF | 2,2 kΩ · GK2-16 | 1 kΩ · GK3-17 (justo) | no cierra |
Lo que se ve en esa tabla es la regla completa en una imagen: más cable o más velocidad piden menos resistencia, hasta que la ventana se cierra y ninguna resistencia sirve. En la última fila del modo rápido plus el bus derechamente no cierra, y ahí la salida no es comprar otra resistencia: es acortar el cable, bajar la velocidad o separar el bus con un buffer.
El voltaje mueve el piso, no el techo
| Voltaje | Piso | Techo | Recomendada | Consumo con la recomendada |
|---|---|---|---|---|
| 1,8 V | 466,7 Ω | 6,809 kΩ | 3,3 kΩ | 0,4242 mA |
| 3,3 V | 966,7 Ω | 6,809 kΩ | 3,3 kΩ | 0,8788 mA |
| 5 V | 1,533 kΩ | 6,809 kΩ | 3,3 kΩ | 1,394 mA |
El techo es idéntico en las tres filas porque solo depende del tiempo y de la capacitancia, y ninguno de los dos cambia con el voltaje. El piso sí sube, porque a más voltaje baja más corriente por la misma resistencia. Por eso un bus de 5 V necesita resistencias algo más grandes que uno de 3,3 V para hundir la misma corriente.
Los pull up que ya traen los módulos
Casi todo módulo I2C de aficionado trae sus dos resistencias a bordo, de 4,7 kΩ o de 10 kΩ. Nadie las cuenta, y todas se suman en paralelo.
Un ejemplo concreto: tres dispositivos, 30 cm de cable, 400 kHz, dos módulos con 10 kΩ a bordo. El cálculo pide 3,3 kΩ, pero con los dos módulos en paralelo el bus termina viendo 1,988 kΩ. El flanco queda en 80,85 ns y la corriente hundida sube a 1,459 mA.
Con dos módulos casi nunca es fatal. Con cuatro o cinco ya te empuja bajo el piso de corriente, y ahí el bus falla por el otro lado. La práctica normal es dejar un solo par de pull up en todo el bus: se desueldan o se cortan los puentes de los módulos y se monta un par de resistencias al principio de la línea. Los campos de ajuste fino de la calculadora tienen esa cuenta.
Cinco síntomas de un pull up mal elegido
- El escáner de direcciones encuentra el chip a veces. Corres el escáner tres veces y aparece dos. Eso es un flanco al filo del límite, no un sensor malo.
- Funciona con cable corto y falla al alargarlo. Es el caso de manual: cada metro suma unos 60 pF y el flanco se alarga en proporción.
- Funciona a 100 kHz y falla a 400 kHz. Bajar la velocidad triplica el presupuesto de tiempo. Si baja la velocidad y anda, el problema es el flanco, o sea el pull up o la capacitancia.
- Anduvo hasta que agregaste otro módulo. Cada dispositivo suma capacitancia y, si trae pull up a bordo, además baja la resistencia efectiva. Las dos cosas a la vez.
- El bus se cuelga con la línea trabada en cero. Eso ya no es tiempo de subida: es que el pull up quedó tan chico que el chip no alcanza a soltar la línea, o que un esclavo quedó a medio ciclo. Con la resistencia bajo el piso de la tabla, sospecha de lo primero.
Lo que esta calculadora no hace
Una calculadora honesta declara sus límites. Esta trabaja con una estimación de la capacitancia y con el modelo RC de primer orden que usa la propia norma. De ahí salen tres advertencias:
- La capacitancia real puede ser bastante distinta. Depende del ruteo, del tipo de cable, de si la señal va apareada a tierra y de los conectores. Si el bus falla con la resistencia bien elegida, el paso siguiente es mirar el flanco de SCL con un osciloscopio o un analizador lógico.
- No modela pull up activos ni buffers. Los chips con pull up conmutado (los que dan un empujón de corriente al principio del flanco) y los repetidores de bus cambian las reglas: con ellos el techo deja de venir de esta fórmula.
- No sabe qué soporta tu chip en particular. Los 3 mA y los 20 mA son lo que la norma garantiza; tu microcontrolador puede soportar más, y su hoja de datos manda por sobre esta página. El modo rápido plus, en especial, exige componentes que lo declaren.
El único error que quema algo
Si en el bus hay cualquier dispositivo de 3,3 V, los pull up van al riel de 3,3 V. Nunca al de 5 V. Con los pull up a 5 V, SDA y SCL quedan en 5 V cada vez que el bus está en reposo, o sea la mayor parte del tiempo, y esos son pines de entrada. En un ESP32 el máximo absoluto es 3,6 V y en un Raspberry Pi Pico son 3,8 V: no se supera en los flancos, se supera las 24 horas del día.
Si de verdad necesitas juntar 3,3 V y 5 V en el mismo bus, la única solución correcta es un conversor de nivel bidireccional, del tipo con un transistor por línea, con sus propios pull up a cada lado. Un divisor de tensión no sirve acá: el bus es bidireccional y el divisor solo funciona en un sentido.
Los valores que recomienda esta calculadora
Los 14 valores del listado son de la serie E24, la de tolerancia 5% que hay en cualquier caja de repuestos, y son los que tenemos sueltos en el rango en que vive un pull up de I2C: de 1 kΩ a 22 kΩ. Si el cálculo pide algo fuera de ese rango, la calculadora te dice cuál es el valor E24 que corresponde y que no lo tenemos, en vez de mandarte el más parecido.
Y siempre van dos: una para SDA y otra para SCL. Es el error de montaje más común después del voltaje, y deja el bus con una línea que nunca vuelve a nivel alto.
Preguntas frecuentes
¿Qué resistencia de pull up va en un bus I2C?
No hay un valor único: hay un rango, y depende del voltaje del bus, de cuánta capacitancia tenga y de a qué velocidad lo hagas correr. El piso sale de Rp = (Vbus menos 0,4 V) dividido por la corriente que el chip puede hundir, que la norma fija en 3 mA hasta 400 kHz y en 20 mA en el modo rápido plus. El techo sale del tiempo de subida: Rp = tr dividido por 0,847 por Cb, con tr de 1000 ns a 100 kHz, 300 ns a 400 kHz y 120 ns a 1 MHz. Para un bus típico de 3,3 V con tres chips y 20 cm de cable a 100 kHz, la ventana va de 967 ohm a 28,1 kilo ohm y el valor recomendado es 10 kilo ohm.
¿Por qué el 4,7k de siempre a veces no sirve?
Porque el 4,7k no es un valor universal: es el valor que funciona en el bus corto y lento en que casi todos empiezan. El pull up y la capacitancia del bus forman una RC, y esa RC es la que decide cuánto demora la línea en volver a nivel alto. Con 4 dispositivos y un metro de cable el bus tiene unos 100 pF, y ahí 4,7k da un flanco de 398 ns cuando el modo rápido de 400 kHz solo permite 300 ns: el bus falla, y falla de forma intermitente, que es lo peor. El mismo 4,7k a 100 kHz habría andado perfecto, porque a esa velocidad el presupuesto es de 1000 ns. La solución es BAJAR la resistencia, no subirla.
¿Por qué mi I2C deja de funcionar con el cable largo?
Porque el cable agrega capacitancia y la capacitancia alarga el flanco de subida. Un cable dupont o de cinta plana suma del orden de 60 pF por metro, así que pasar de 20 cm a 2 m le agrega unos 108 pF al bus, y con eso el tiempo de subida se multiplica por más de tres con la misma resistencia. Los síntomas son los clásicos: lecturas que se congelan, el escáner que encuentra el dispositivo a veces sí y a veces no, y errores que aparecen recién cuando muevas el cable. Se arregla bajando el pull up, bajando la velocidad, acortando el cable o pasando a par trenzado con la señal apareada a tierra.
¿Puedo poner un pull up más chico y listo?
Hasta un límite, sí, y ese límite es lo que el chip puede hundir. Para dejar la línea en nivel bajo, el dispositivo tiene que tragarse toda la corriente que baja por el pull up, y la norma solo le garantiza 3 mA (20 mA en modo rápido plus) para llegar a 0,4 V. Con 3,3 V eso pone el piso en 967 ohm: bajo eso el chip ya no consigue bajar la línea lo suficiente y el bus deja de leerse aunque el flanco de subida sea perfecto. Además, menos resistencia es más consumo permanente, que en algo a pila importa.
¿Cuántos dispositivos I2C puedo poner en el mismo bus?
El límite práctico no son las direcciones sino la capacitancia: la norma tope el bus en 400 pF para 100 y 400 kHz, y en 550 pF para el modo rápido plus. Cada dispositivo aporta hasta 10 pF por pin y cada metro de cable unos 60 pF, así que ocho chips con 3 m de cable ya son 260 pF y el bus queda al filo. Pasado ese tope ninguna resistencia lo arregla: hay que acortar el cableado, separar el bus en tramos con un buffer o repetidor, o bajar la velocidad.
¿Los pull up van al riel de 3,3 V o al de 5 V?
Al riel más bajo de los que haya en el bus. Si tienes cualquier dispositivo de 3,3 V, los pull up van a 3,3 V. Poniéndolos a 5 V, las líneas SDA y SCL quedan en 5 V todo el tiempo que el bus está en reposo, no solo en los flancos, y eso supera el máximo absoluto de un ESP32 (3,6 V) o de un Raspberry Pi Pico (3,8 V) las 24 horas del día. Si de verdad necesitas juntar 3,3 V y 5 V en el mismo bus, la única solución correcta es un conversor de nivel bidireccional, con sus propios pull up a cada lado.
¿Qué pasa si varios módulos ya traen su propio pull up?
Que se suman en paralelo y el bus ve bastante menos de lo que dice cada placa. Dos módulos con 10k a bordo dan 5k entre los dos, y si además le montas una de 3,3k el bus termina viendo 1988 ohm. Casi nunca es fatal, pero puede empujarte bajo el piso de corriente si son muchos, y sobre todo desordena el cálculo: si tienes tres o más módulos con pull up a bordo, lo normal es desoldar o cortar el puente de los pull up de todos menos uno, y dejar un solo par de resistencias para el bus completo.
¿De dónde sale el 0,847 de la fórmula del tiempo de subida?
De ln(0,7 dividido por 0,3), que da 0,8473. La norma no mide el flanco completo sino el tramo entre el 30% y el 70% de VDD, y una exponencial RC demora exactamente 0,847 constantes RC en cruzar esa franja. Por eso tr = 0,847 por Rp por Cb, y despejando Rp queda el techo. Si vieras la fórmula con un factor 2,2 en vez de 0,847, ese es el criterio del 10% al 90%, que se usa en otros contextos pero no es el que fija la especificación I2C.
¿Esta calculadora reemplaza medir con osciloscopio?
No. La capacitancia del bus acá es una ESTIMACIÓN a partir de la cantidad de dispositivos y del largo del cable; la real depende del ruteo de la placa, del tipo de cable, de si va apareado a tierra y de los conectores. El cálculo te deja en el orden de magnitud correcto, que es más que suficiente para elegir la resistencia. Si el bus sigue fallando después de elegir bien, ahí el paso siguiente es mirar el flanco de SCL con un osciloscopio o un analizador lógico: eso te dice la capacitancia real en vez de la estimada.
Dónde la usamos
Tutoriales del blog donde esta cuenta aparece en un proyecto de verdad.
- Luz nocturna automática con sensor de luz ambiental y ArduinoMide la luz de la pieza en lux por I2C y regula el brillo de un LED con PWM, con histéresis para que no parpadee en el umbral.
- Escáner I2C para ESP32 con ESP IDF: encuentra la dirección de cualquier dispositivoSube este escáner I2C en ESP IDF y descubre en segundos la dirección de sensores, pantallas y módulos conectados a tu ESP32.
- INA219: mide corriente y voltaje real con Arduino y ESP32Aprende a medir corriente, voltaje y potencia por I2C con el sensor INA219 y a registrar la curva de descarga de una batería.
- ADS7128: el chip híbrido ADC + expansor GPIO por I2C que combina 8 canales configurables en unoEl breakout Adafruit que resuelve la falta de pines analógicos y digitales en un solo bus I2C, con CircuitPython y Arduino.
- Sensor de distancia para estacionar el auto con Arduino, HC SR04 y encoder KY-040Arma una guía de estacionamiento de garage con LED verde indicador y rango ajustable desde un encoder. Componentes Arduino baratos en stock chileno.
- Controla un LCD 16x2 con solo 2 cables usando el módulo I2CTe quedaste sin pines en el Arduino para tu pantalla LCD. El módulo serial I2C resuelve el problema usando solo SDA y SCL.