Saltar al contenido
Herramienta

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.

Calculadora

Tu bus, tu cable y tu velocidad

Los cuatro datos que importan
V

El del riel al que van los pull up, no el de la placa.

chips

Cuenta también el microcontrolador.

cm

El tramo más largo entre dos puntas del bus.

Velocidad del bus
Ajustes finos: capacitancias y módulos con pull up
De dónde sale la capacitancia
pF

10 pF es el máximo por pin que fija la norma.

pF/m

60 pF/m es lo típico de un dupont o de cinta plana.

pF

Un protoboard suma entre 10 y 30 pF.

Se suman en paralelo con la tuya. Casi todo módulo trae los suyos.

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.

hunde de mássube muy lento966,7 Ω3,541 kΩ1,5 kΩrecomendada4,7 kΩ100 Ω300 Ω1 kΩ3 kΩ10 kΩ30 kΩ100 kΩhunde de mássube muy lento966,7 Ω3,541 kΩ1,5 kΩrecomendada4,7 kΩ100 Ω1 kΩ10 kΩ100 kΩ
30%70%VDDtr = 127,1 nslímite 300 nsmodo rápido30%70%VDDtr = 127,1 nslímite 300 nsmodo rápido
Esquema del bus I2C con sus dos resistencias de pull upBus I2C de 4 dispositivos a 3,3 volt, con 100 centímetros de cable y una capacitancia estimada de 100 pF. Del riel cuelgan dos resistencias de pull up de 1,5 kΩ, una en SDA y otra en SCL. Con la línea en bajo, el chip que la baja hunde 1,933 mA de los 3 mA que la norma le exige en modo rápido.+3,3 V2 × 1,5 kΩSKU GK5-17 · una por líneaSDASCLmaestroMCU1,933 mAhundida, de los 3 mA del chipCb ≈ 100 pF4 dispositivos · 100 cm de cable · Cb estimadaCon la línea en bajo, la corriente sólo va del riel al chip que la baja.Esquema del bus I2C con sus dos resistencias de pull upBus I2C de 4 dispositivos a 3,3 volt, con 100 centímetros de cable y una capacitancia estimada de 100 pF. Del riel cuelgan dos resistencias de pull up de 1,5 kΩ, una en SDA y otra en SCL. Con la línea en bajo, el chip que la baja hunde 1,933 mA de los 3 mA que la norma le exige en modo rápido.+3,3 V2 × 1,5 kΩSKU GK5-17SDASCLmaestroMCU1,933 mAhundida de 3 mACb ≈ 100 pF4 chips · 100 cmen bajo conduce sólo al chip

Las dos resistencias que van en este bus

Van dos: una para SDA y otra para SCL

La tenemos$100

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) / IOL

Con 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 + extra

Los 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.

Qué pasa con 4,7 kΩ en cinco buses típicos de 3,3 V.
BusVelocidadCbtr con 4,7 kΩLímite¿Sirve?
Un OLED en protoboard100 kHz26 pF103,5 ns1 µs. El bus de todos los tutoriales. Acá el 4,7k anda de sobra.
Tres sensores, cables cortos400 kHz52 pF207,1 ns300 ns. Todavía cabe, pero el margen ya se está gastando.
Un sensor a un metro400 kHz100 pF398,2 ns300 nsNo. Acá se rompe. Es el caso que trae a la gente a buscar esto.
Seis módulos en una caja400 kHz96 pF382,3 ns300 nsNo. La capacitancia la ponen los chips, no el cable.
Rápido plus, todo corto1 MHz36 pF143,4 ns120 nsNo. 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.

Bus de 3,3 V con cuatro dispositivos. El valor recomendado deja el flanco bajo la mitad del presupuesto de tiempo.
CableCb100 kHz400 kHz1 MHz
10 cm46 pF10 kΩ · GK2-153,3 kΩ · GK3-161,5 kΩ · GK5-17
20 cm52 pF10 kΩ · GK2-153,3 kΩ · GK3-161 kΩ · GK3-17
50 cm70 pF6,8 kΩ · GK1-152,2 kΩ · GK2-161 kΩ · GK3-17
100 cm100 pF5,6 kΩ · GK4-111,5 kΩ · GK5-171 kΩ · GK3-17 (justo)
200 cm160 pF3,3 kΩ · GK3-161 kΩ · GK3-17no cierra
300 cm220 pF2,2 kΩ · GK2-161 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

Mismo bus (cuatro dispositivos, 20 cm, 400 kHz) cambiando solo el riel al que van los pull up.
VoltajePisoTechoRecomendadaConsumo con la recomendada
1,8 V466,7 Ω6,809 kΩ3,3 kΩ0,4242 mA
3,3 V966,7 Ω6,809 kΩ3,3 kΩ0,8788 mA
5 V1,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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.