ElectroDesignForgeElectroDesignForge
Señales e interfacesComponentesDiseño de PCB

de 3,3 V: cableado, direccionamiento y resistencias pull-up

Conecte un bus I²C confiable: funciones SDA y SCL, direcciones de 7 bits, velocidades, capacitancia del bus, tiempo de subida y tamaño de pull-up.

Escrito y revisado técnicamente porEquipo de ingeniería de ElectroDesignForge

Ver el proceso editorial

Punto clave: I²C conecta múltiples IC a través de dos líneas compartidas: SDA para datos y SCL para sincronización. Las salidas normalmente son de drenaje abierto: un dispositivo baja una línea, mientras que las resistencias pull-up la devuelven ALTA. El dimensionamiento debe satisfacer tanto el límite de corriente de sumidero de nivel BAJO como el límite de tiempo de subida establecidos por la velocidad y la capacitancia total del bus.


Referencia rápida

ModoFrecuencia SCL máximaTiempo máximo de subida de t_r (30–70%)Capacitancia de referencia por línea
Modo estándar (Sm)100 kilociclos1000 ns400 pF
Modo rápido (Fm)400 kilociclos300 ns400 pF
Modo rápido Plus (Fm+)1MHz120 ns550 pF

Estos límites provienen de la especificación I²C. La parte más lenta puede requerir una velocidad menor. No seleccione Fm+ simplemente porque un controlador lo admite: cada objetivo, cambiador de nivel y aislador también debe admitirlo.

SDA y SCL: líneas compartidas

SDA transporta la dirección, el bit de lectura/escritura, los bytes de datos y los acuses de recibo. SCL multiplica la transferencia. En reposo, ambas líneas están ALTAS. Un INICIO es una caída del SDA mientras que el SCL es ALTO; a STOP significa que el SDA aumenta mientras que el SCL es ALTO.

Durante la transferencia de datos, SDA permanece estable mientras SCL está ALTO. El controlador envía ocho bits y luego libera SDA en el noveno reloj; el receptor tira de SDA BAJO para un ACK o lo deja ALTO para un NACK.

                 +3.3 V                         +3.3 V
                   |                              |
                  [Rp]                           [Rp]
                   |                              |
SDA  ──────────────+──── controller ── target A ── target B
SCL  ──────────────+──── controller ── target A ── target B
GND  ───────────────────── common to every device

Utilice un pull-up eficaz en SDA y otro en SCL. Es posible que varios módulos ya los incluyan, haciéndolos paralelos. Dos resistencias 4.7 kΩ hacen 2.35 kΩ; cuatro hacen 1.18 kΩ. Verifique los esquemas del módulo antes de agregar otro par.

¿Por qué drenaje abierto?

Un dispositivo nunca conduce activamente el autobús a ALTO: libera una línea o la baja. Si dos dispositivos actúan juntos, LOW gana sin que se produzca un cortocircuito entre las etapas de salida opuestas. Este comportamiento AND cableado permite el reconocimiento, el arbitraje de múltiples controladores y la ampliación del reloj.

A veces, SCL puede ser push-pull en un sistema de un solo controlador sin objetivos de estiramiento del reloj; documentar esa excepción explícitamente. Para un bus I²C portátil compatible, mantenga SCL de drenaje abierto con su pull-up.

Cableado, tierra y niveles de voltaje

Conecte todos los dispositivos en paralelo: SDA a SDA, SCL a SCL y tierra compartida. Evite una estrella con ramas largas; los trozos añaden capacitancia, reflejos y sensibilidad al ruido. En una PCB, mantenga las señales cortas, sobre un plano de tierra continuo y alejadas de nodos de conmutación rápida.

El riel de dominadas establece el nivel ALTO. Debe ser compatible con todas las E/S, incluido un microcontrolador sin alimentación. No conecte directamente una pieza de 1,8 V a pull-ups de 3,3 V a menos que su hoja de datos lo permita. Utilice una palanca de cambios de nivel adecuada para I²C, con pull-ups en ambos lados cuando su circuito los requiera.

Los pull-ups internos del microcontrolador suelen ser 20 to 100 kΩ: a veces aceptables a velocidades muy bajas en un tramo corto, pero normalmente demasiado débiles para buses cargados de 100/400 kHz. Verifique el valor real.

Direccionamiento: 7 bits, no 8 bits

La mayoría de los circuitos integrados utilizan una dirección de destino de 7 bits. El primer byte del cable es:

[ A6 A5 A4 A3 A2 A1 A0 | R/W ]

El bit R/W se agrega en el bus; no forma parte de la dirección de la biblioteca de 7 bits. Un destino en 0x68 aparece como 0xD0 para escritura y 0xD1 para lectura. Una API que solicite 0xD0 puede seguir una convención de 8 bits; verifíquela antes de cambiar una dirección dos veces.

Los pines ADDR, SA0 o SDO en muchos sensores seleccionan una dirección. Átelos a un nivel definido y registre las direcciones en el esquema. Si los objetivos de dirección fija chocan, utilice un multiplexor I²C, otro controlador o una variante de pieza diferente. El direccionamiento de diez bits existe pero es poco común; un registro de sensor interno no es la dirección I²C.

Velocidad, SCL y estiramiento del reloj

La frecuencia SCL es una tasa de temporización máxima, no una tasa de carga útil garantizada: direcciones, registros, bits ACK/NACK, condiciones de INICIO/PARADA y retrasos internos reducen el rendimiento. Por lo tanto, una transferencia de registros múltiples de 400 kHz tarda más que su recuento de bytes dividido por 400 kbit/s.

Un objetivo puede mantener SCL LOW después de que el controlador lo suelta: esto es extensión del reloj. El controlador debe probar SCL y esperar a ALTO, dentro de la política de tiempo de espera del producto. Verifique la compatibilidad porque algunos controladores lo manejan mal. En el uso de múltiples controladores, el dispositivo que libera SDA pero lee BAJO pierde el arbitraje y se detiene.

Capacitancia del bus y tiempo de subida.

Cada línea es una carga RC: se suman entradas IC, trazas, cables, sondas, conectores y capacitancia parásita. Cuando ningún dispositivo baja una línea, el pull-up carga esa capacitancia gradualmente.

Para una medición de 30 % a 70 % de VDD:

t_r ≈ 0.8473 × R_p × C_bus
R_p,max ≈ t_r,max / (0.8473 × C_bus)

Utilice ohmios, faradios y segundos. Esto proporciona la resistencia máxima de dominadas; por encima de él, el aumento es demasiado lento. A 400 kHz con C_bus = 100 pF:

R_p,max ≈ 300 ns / (0.8473 × 100 pF) ≈ 3.54 kΩ

4.7 kΩ consume poca corriente, pero es demasiado grande para alcanzar 300 ns con 100 pF. 3.3 kΩ es un mejor punto de partida, sujeto a límites y mediciones de BAJA corriente. Prefiere medir la capacitancia en el ensamblaje final; de lo contrario, agregue capacitancia de entrada, datos del cable (pF/m), conectores y margen de PCB. Una sonda también agrega capacitancia.

Tamaño pull-up: una ventana, no un valor mágico

Una resistencia más pequeña acelera el borde pero aumenta la corriente mientras un dispositivo funciona en BAJA. El límite inferior es:

R_p,min ≈ (VDD − V_OL,max) / I_OL,max

Para VDD = 3.3 V, V_OL,max = 0.4 V y I_OL,max = 3 mA:

R_p,min ≈ (3.3 − 0.4) / 3 mA ≈ 967 Ω
R_p,min ≤ R_p ≤ R_p,max

El valor seleccionado es válido sólo en esta ventana. Si no existe una ventana, reduzca la capacitancia, reduzca la velocidad, use un búfer I²C adecuado o use un dispositivo compatible con Fm+ con mayor corriente disipadora. No elija debajo de R_p,min solo porque parece funcionar: V_OL puede volverse ambiguo y la disipación aumenta.

SituaciónPunto de partidaVerificar
PCB corta, 3,3 V, 100 kHz4.7 to 10 kΩcapacitancia y pull-ups existentes
PCB corta, 3,3 V, 400 kHz2.2 to 4.7 kΩt_r y I_OL de cada objetivo
Cable o muchos módulos.calculado, a menudo más bajocorriente disipadora, EMC, forma de onda en el extremo del cable

Estos rangos no reemplazan el cálculo para su ensamblaje.

Medir y solucionar problemas

Observe SDA y SCL en el punto final más alejado del controlador. Mida t_r del 30% al 70% de VDD y verifique V_OL, el timbre y la estabilidad del SDA mientras SCL está en ALTO.

SíntomaCausas probablesComportamiento
No se encontraron objetivosfalta terreno, dirección incorrecta, SDA/SCL intercambiadocomprobar continuidad, alimentación, escaneo de 7 bits
Líneas siempre ALTASfalta pull-up o riel incorrectocomprobar ambas resistencias y su carril
Línea atascada BAJAobjetivo en reinicio, falla de cableado, transacción interrumpidaaislar módulos y restablecer el segmento
NACK aleatoriosaumento lento, ruido, exceso de capacitancia o velocidadmedir t_r, disminuir R_p, bus lento
Falla solo con todos los módulospull-ups paralelos demasiado fuertes o capacitancia acumulativacalcular resistencia y capacitancia equivalentes

Una recuperación típica libera SDA, genera hasta nueve pulsos SCL y luego una DETENCIÓN. Úselo sólo cuando todas las hojas de datos lo permitan; El restablecimiento del segmento puede ser más sólido.

Lista de verificación previa al diseño

  1. ¿Todas las piezas comparten tierra y voltaje de bus compatible?
  2. ¿SDA y SCL tienen cada uno un pull-up efectivo, sin adiciones paralelas accidentales?
  3. ¿Las direcciones son únicas y están enumeradas en formato de 7 bits?
  4. ¿La velocidad es compatible con cada objetivo, palanca de cambios y aislador?
  5. ¿R_p,min y R_p,max vinculan el valor seleccionado?
  6. ¿Se verifica el tiempo de subida en la placa con capacitancia real?

Calculadora asociada

Fuentes

  • NXP Semiconductors, UM10204 — Especificación del bus I²C y manual de usuario: protocolo, niveles eléctricos y temporización Sm/Fm/Fm+.
  • Hojas de datos del controlador, objetivos, desplazadores, buffers y aisladores utilizados: tienen prioridad para I_OL, V_OL, capacitancia de entrada y soporte de estiramiento de reloj.