¿Cuál es la velocidad de I2C para la comunicación AVR?

Estoy haciendo un proyecto en el que tendré muchos ATtiny esclavos y un controlador maestro (ya sea un Arduino/ATMega o un mbed). Supongo que el ATtiny con su baja velocidad de reloj de 10 MHz será mi cuello de botella (usando el oscilador incorporado). Necesito establecer qué tan factible es un diseño por qué tan rápido puede ir I2C en un ATtiny. Entonces, suponiendo que todo sea perfecto, ¿qué tan rápido puede un ATtiny transferir datos por I2C en kilobytes por segundo? Además, ¿de qué tipo de velocidades de reloj estaríamos hablando en Hz?

Respuestas (2)

La mayoría de los dispositivos con capacidad I2C hoy en día pueden manejar las dos velocidades de datos nominales más bajas, que son 100 kbps y 400 kbps.

El ATTiny parece ser capaz de ambos según esta nota de la aplicación .

Entonces, suponiendo que todo sea perfecto, podrá transferir 400,000 / 8 = 50 kilobytes por segundo. Teniendo en cuenta los gastos generales como el direccionamiento/negociación, probablemente será un poco por debajo de esto. Si desea una cifra exacta (para su aplicación en particular), no sería difícil configurar una pequeña prueba usando un temporizador para enviar x bytes.

Como dijo Oli, 100 kbits/sy 400 kbits/s son velocidades de bus IIC "estándar". Sin embargo, en la práctica, en la mayoría de los casos, la velocidad del bus IIC está limitada por los tiempos de subida de la señal. Ambas líneas se elevan pasivamente y estas elevaciones están limitadas a 3 mA, por lo que los flancos ascendentes llevarán algún tiempo.

Los chips IIC reales solo están obligados a superar 3 mA de corriente pullup para obtener una línea por debajo del umbral bajo lógico máximo. Sin embargo, si sabe exactamente qué está conectado al autobús y qué capacidad de pulldown tiene realmente, puede usar pullups más rígidos y, por lo tanto, correr más rápido. Verifique las capacidades de sumidero actuales de los pines de salida utilizados para controlar el bus IIC en los micros que está utilizando. Lo más probable es que puedan hundirse significativamente más de 3 mA. Con pullups rígidos y un bus IIC corto, todo en la misma placa, debería poder obtener hasta 1 Mbit/s o más, ya que IIC es, en última instancia, síncrono.

Experimente con las piezas que tiene y observe las formas de onda en un osciloscopio para ver de lo que son capaces. Recuerde, esto solo es válido si todos los dispositivos en el bus pueden hacer esto. Si conecta un chip IIC dedicado, como una EEPROM, por ejemplo, debe ceñirse al estándar.