I2C - ¿Puedo controlar la línea SCL con un pin de salida solo si no espero que el reloj se estire?

0

Estoy corto de pines y estoy trabajando con un presupuesto extremadamente bajo y una placa de circuito de tamaño pequeño. Entonces, si el esclavo I2C no se alarga, ¿puedo delegar de forma segura el pin SCL a algún expansor de salida (registro de cambios o decodificador binario)?

El circuito contiene lo siguiente: ATtiny13a DS1307 74hc138 (decodificador binario) o 74hc595 (registro de desplazamiento)

En resumen, ¿es absolutamente necesario que la línea SCL se levante y se mantenga en estado de drenaje abierto? (Tanto en general como en el contexto del chip DS1307)

    
pregunta Kitty Hawk

2 respuestas

3

Sí, para la mayoría de los esclavos simples, el SCL maestro puede ser simplemente una salida push-pull. Si tiene ganas de asegurarse de que un esclavo del reloj no tome mucha corriente, podría tener una resistencia de serie.

PERO, dado que SCL cambia de estado 38 veces para emitir un solo byte a un dispositivo I2C, realmente es la peor señal posible para colocar un expansor de puerto serie.

Puede compartir los pines I2C con otros buses (vea mi página en eso aquí ), por ejemplo, SPI / 74hc595 serial Bus, o usos de baja velocidad como un LED de estado. Por lo tanto, es mejor usar un micro pin directo para el I2C y compartir esos pines con su otra expansión de puerto, o hacer la expansión del puerto por I2C.

Por cierto, si solo está escribiendo en un dispositivo de salida, la mayoría de los esclavos de hardware pueden funcionar con SDA como salida solo (ya que siempre responderán), pero debe tener un drenaje abierto, o una resistencia en serie, como ACK será derribado por el esclavo.

    
respondido por el Henry Crun
0

En general y en el contexto del chip DS1307, puede usar la línea SCL para otros fines siempre que no cambie la línea SDA de alta a baja mientras que la SCL sea alta.

ACTUALIZACIÓN:

Lo anterior fue una respuesta a tu pregunta directa. Y la respuesta es sí, no es necesario que mantenga SCL alto entre transacciones. Eso no significa que debas hacerlo. De hecho, la gran ventaja de I2C es que puede hacer mucho con las mismas dos líneas sin quedarse sin pines.

Por ejemplo, el interruptor PCA9548A controlado por I2C puede reemplazar fácilmente su 74HC138. Selecciona una dirección (o cualquier combinación de ellas) a través del comando I2C, luego baja SCL y usa el pin SDA como entrada / salida general. Solo un chip y ya tienes 8 pines adicionales sin usar nada más que el mismo par I2C.

Hay soluciones similares para el bus SPI. El interruptor ADG731 está controlado por SPI y se puede usar para multiplexar la línea CS hasta otros 32 dispositivos SPI. Por lo tanto, solo necesitas 4 pines para todos ellos. Incluso hay convertidores SPI a I2C que le permiten tener ambas interfaces en los mismos pines SPI sin preocuparse por las colisiones.

No sé qué vas a conectar a tu MCU pero hasta ahora pude encontrar todo lo que necesitaba con una de estas dos interfaces.

    
respondido por el Maple

Lea otras preguntas en las etiquetas