los pull-ups internos son débiles (alrededor de 100k). Puede usarlos pero la velocidad garantizada será muy lenta (alrededor de 25 bit / s o menos). con pull-ups externos de 2k..4k la velocidad está limitada a 400 kbit / s.
también, recuerde que necesita un pull-up externo solo en la línea de datos en la topología de un solo maestro que mantiene la línea del reloj como push-pull en el maestro.
EDIT
quizás Matt y Nick tienen razón sobre la función de estiramiento del reloj, pero es útil solo en teoría. i2c fue diseñado de manera universal (de nuevo en teoría) pero en la práctica su comportamiento por diseño (sin restricciones adicionales) conduce a los siguientes fallos:
punto muerto en el nivel del controlador: como resultado de una falla en el host, la máquina de estado del dispositivo podría "congelarse" para siempre, y si no puede "volver a sincronizar" el dispositivo, el sistema falla en este servicio . este interbloqueo es manejable en cualquier caso, si usa un reloj de drenaje abierto o push-pull. Los controladores de Linux i2c generalmente administran esos escenarios.
punto muerto en el nivel del dispositivo: como resultado de una falla en el dispositivo, su máquina de estado podría "congelarse" en la fase de contracción del reloj, y si no puede "volver a conducir", el sistema en general falla. este interbloqueo es manejable solo si usa un reloj push-pull (fuerte) o si su unidad i2c soporta un mecanismo de tiempo de espera con detección del reloj. el soporte de hardware siempre es necesario para administrar esos escenarios.
también, el iniciador del tema mencionó el chip de hormigón --- at32uc3b, cuya unidad TWI no admite un tiempo de espera en la contracción del reloj.
puede parecer que es un hack, pero es útil (¿el único?) hack si diseñas un sistema real que debe ser confiable y confiable en lugar de una clase de juguetes / trabajo en el hogar que no está diseñado para funcionar durante mucho tiempo. bien.
Por lo tanto, mi consejo para Jeremías es:
1) use un pull-up en la línea de datos, tan fuerte como su maestro / esclavos pueda manejar;
2) use un push-pull en la línea del reloj si sus esclavos pueden trabajar en la frecuencia de bus de destino;
3) use una frecuencia de reloj del bus como el soporte de esclavo más lento sin la contracción;
y también como se recomienda:
4) utiliza i2c solo si no existen dispositivos con interfaz de otro tipo, por ejemplo use spi en lugar de i2c;
5) siempre piense en términos de confiabilidad y confiabilidad mientras diseña electrónica, especialmente, electrónica basada en software.
buena suerte.