Estoy planeando un bus de comunicación entre un ATxmega256A3U y múltiples ATxmega64A3s. El desafío es que necesito usar la menor cantidad de cables posible, por lo que me gustaría dirigirme a los esclavos sin un pin de selección de esclavo separado para cada uno. Necesito estimar la velocidad máxima del bus, porque tengo que adivinar el número máximo de esclavos por maestro.
Afortunadamente, ambos admiten TWI, que es una implementación I2C, si lo comprendo correctamente. I2C define grados de velocidad múltiples:
- modo estándar: 100 kbit / s
- velocidad máxima: 400 kbit / s
- modo rápido: 1 Mbit / s
- alta velocidad: 3,2 Mbit / s
La hoja de datos de XMEGA indica claramente que los modos de velocidad estándar y completa son compatibles.
Según la nota de la aplicación AVR315 :
La unidad del generador de velocidad de mordida controla el período de SCL cuando se opera en un modo maestro. El scl el período se controla mediante la configuración en el Registro de velocidad de bits TWI (TWBR) y los bits de Prescaler en el TWI Registro de estado (TWSR). La operación del esclavo no depende de la configuración de la velocidad de bits o del prescaler, sino de la CPU La frecuencia de reloj en el esclavo debe ser al menos 16 veces más alta que la frecuencia SCL.
Los XMEGA se ejecutarán a 32Mhz, por lo que la velocidad del esclavo se maximiza a 2Mbit / sy podemos usar la siguiente fórmula para calcular la velocidad exacta
I2CSpeed = CPUClock / (16 + 2 * TWBR - 4 ^ TWBR), donde los valores TWBR válidos están entre 1 y 256
Creo que teóricamente sería posible alcanzar el modo rápido, ya que 32 / (16 * 1-4 ^ 1) = 2.66Mbit > 1.0Mbit (velocidad de modo rápido).
(El protocolo del modo rápido es compatible hacia atrás con la velocidad máxima).
¿Alguien ha alcanzado esta velocidad con el TWI de XMEGA en la práctica? ¿Hay alguna otra limitación de la que no me haya dado cuenta?