Estoy tratando de producir un circuito pequeño y estoy buscando reducir el número de partes. Recientemente agregué una EEPROM I²C que se usa una vez cuando el sistema arranca, junto con esta EEPROM agregué dos resistencias para pullups.
Me gustaría prescindir de estos si es posible y solo confiar en las resistencias pull-up internas.
Esta pregunta parece sugerir que es posible, pero simplemente no se recomienda: ¿ Qué sucede si omito las resistencias pullup en las líneas I2C?
Estoy usando un ATmega328 y la EEPROM se encuentra al lado del dispositivo con trances de unos 10 mm.
¿Alguien ha trabajado en un proyecto omitiendo intencionalmente las resistencias pull-up externas o es una muy mala idea?
I²C requiere pullups en las líneas de datos y reloj. La forma en que proporcione esos pullups depende de usted.
Los pullups deben estar en la región de 3.3KΩ, pero el valor exacto no es tan importante siempre que esté en algún lugar por ahí.
Puede usar los pull-ups internos de la MCU si, y solo si, tiene muy pocos elementos (uno o dos) en el bus I²C y la longitud del bus es muy corta (cuestión de unas pocas pulgadas).
También debe asegurarse, en esa situación, de que el autobús no captará demasiadas interferencias, ya que el rechazo del ruido de los pullups más débiles será peor. Asegúrese de que cualquier vía que cruce su autobús lo haga a 90° para reducir la inducción de ruido. Proporcione un rastro de tierra o vierta entre el reloj y las líneas de datos para ayudar a reducir la diafonía entre el reloj y las líneas de datos.
Dicho esto, ¡dos resistencias no son realmente un gran gasto...! Las resistencias 0402 o 0603 casi no ocupan espacio. Me limitaría a usar dominadas adecuadas.
Primero tienes que entender por qué los necesitas. Entonces podrás valorar más claramente si los necesitas o no o si puedes utilizar los internos.
La especificación del bus I2C dice que las cosas conectadas a ese bus deben poder bajar las líneas. Pero no deberían poder tirar de ellos alto. Este es el papel de la resistencia pull-up en esas líneas.
De esa manera, si dos o más cosas quieren usar el autobús exactamente al mismo tiempo, no hay riesgo de que una intente tirar de la línea hacia abajo cuando otra intente empujarla hacia arriba. Lo que crearía una contención de bus, corrientes muy altas en el IO de las cosas y la posible destrucción de las mismas.
Usando pull up, si uno intenta tirar bajo cuando otro intenta "liberar" la línea. La línea bajaría y no sucedería nada grave.
El mismo principio se aplica con el ACK enviado por un esclavo al maestro. El maestro tiene que "liberar" la línea SDA cuando se debe recibir un ACK. En ese momento, el esclavo baja la línea SDA para señalar el ACK.
Imagina un sistema sin pull-ups. Debe haber una manera de tener las líneas en el nivel alto. (una línea de bajo nivel constante no tiene un rendimiento muy alto.... ;-) ) Y ya hemos visto que el uso de salidas push-pull no funciona aquí sin arruinar el protocolo.
¿Sobre los pull-ups internos? Sí, podría funcionar. Pero suponiendo:
Utiliza un autobús de muy baja velocidad. El RC formado por la capacitancia de la línea y el pull-up definen cuánto tarda la línea en transitar de bajo a alto. Si las resistencias son grandes. Como suele ser el caso en los pull-ups incrustados, entonces el tiempo puede ser muy grande. O, como explica @Majenko, se asegura de que la capacitancia de su bus permanezca muy baja. (líneas muy cortas, no use más de 10 esclavos, etc.)
Verifica que los esclavos y el maestro estén bien para trabajar con un bus muy lento. Algunos aceptan una velocidad de autobús arbitraria tan pronto como esté por debajo del máximo permitido. (lo mismo para el tiempo de subida de la línea)
No está utilizando un autobús muy largo en un entorno ruidoso.
Acepta estar fuera de las especificaciones del autobús que está utilizando. Quiero decir que no será una condición contra la que se probaron las cosas I2C que usa. No podrá garantizar con certeza que funcionará sin probarlo usted mismo en un prototipo en todas las condiciones de funcionamiento.
De la hoja de datos ATmega328:
El único hardware externo que se necesita para implementar el bus es una sola resistencia pull-up para cada una de las líneas de bus TWI.
Como se indica más adelante en la misma sección sobre TWI con el 328:
ambas líneas de bus están conectadas al voltaje de suministro positivo a través de resistencias pull-up. Los controladores de bus de todos los dispositivos compatibles con TWI son de drenaje abierto o de colector abierto. Esto implementa una función AND cableada que es esencial para el funcionamiento de la interfaz. Se genera un nivel bajo en una línea de bus TWI cuando uno o más dispositivos TWI emiten un cero. Se emite un nivel alto cuando todos los dispositivos TWI establecen tres estados en sus salidas, lo que permite que las resistencias pull-up eleven la línea.
Las resistencias pullup son necesarias para generar los valores lógicos necesarios para hablar con el dispositivo EEPROM.
mercado
Wouter van Ooijen
usuario20088
usuario20088
arturoguy
arturoguy