
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 editorialPunto clave: I²C conecta múltiples IC a través de dos líneas compartidas:
SDApara datos ySCLpara 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
| Modo | Frecuencia SCL máxima | Tiempo máximo de subida de t_r (30–70%) | Capacitancia de referencia por línea |
|---|---|---|---|
| Modo estándar (Sm) | 100 kilociclos | 1000 ns | 400 pF |
| Modo rápido (Fm) | 400 kilociclos | 300 ns | 400 pF |
| Modo rápido Plus (Fm+) | 1MHz | 120 ns | 550 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ón | Punto de partida | Verificar |
|---|---|---|
| PCB corta, 3,3 V, 100 kHz | 4.7 to 10 kΩ | capacitancia y pull-ups existentes |
| PCB corta, 3,3 V, 400 kHz | 2.2 to 4.7 kΩ | t_r y I_OL de cada objetivo |
| Cable o muchos módulos. | calculado, a menudo más bajo | corriente 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íntoma | Causas probables | Comportamiento |
|---|---|---|
| No se encontraron objetivos | falta terreno, dirección incorrecta, SDA/SCL intercambiado | comprobar continuidad, alimentación, escaneo de 7 bits |
| Líneas siempre ALTAS | falta pull-up o riel incorrecto | comprobar ambas resistencias y su carril |
| Línea atascada BAJA | objetivo en reinicio, falla de cableado, transacción interrumpida | aislar módulos y restablecer el segmento |
| NACK aleatorios | aumento lento, ruido, exceso de capacitancia o velocidad | medir t_r, disminuir R_p, bus lento |
| Falla solo con todos los módulos | pull-ups paralelos demasiado fuertes o capacitancia acumulativa | calcular 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
- ¿Todas las piezas comparten tierra y voltaje de bus compatible?
- ¿SDA y SCL tienen cada uno un pull-up efectivo, sin adiciones paralelas accidentales?
- ¿Las direcciones son únicas y están enumeradas en formato de 7 bits?
- ¿La velocidad es compatible con cada objetivo, palanca de cambios y aislador?
- ¿
R_p,minyR_p,maxvinculan el valor seleccionado? - ¿Se verifica el tiempo de subida en la placa con capacitancia real?
Calculadora asociada
- Abra la Calculadora desplegable / desplegable para calcular la ventana de resistencia a partir de
VDD, la corriente GPIO, los umbrales, la capacitancia de línea y el límite de tiempo de subida de I²C.
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.