¿Se necesita un cristal externo para ATmega328P para la comunicación I2C multimaestro?

Quiero conectar varios chips ATmega328P a un bus I2C. Cada unidad está configurada como esclava pero también puede enviar/transmitir mensajes como maestra.

Tengo esto trabajando actualmente con unidades Arduino Nano y funciona bien.

Para reducir el costo y, lo que es más importante, el espacio, quiero reemplazar los chips Arduino Nano con chips ATmega328P.

Ahora, mi pregunta es, ¿necesito cristales externos para estos chips ATmega328P para esta configuración multimaestro?

Sé que I2C no es crítico en el tiempo como RS232 porque el esclavo sigue la línea de reloj del maestro (¿verdad?).

La única preocupación que tengo es: ¿funcionará correctamente la detección de colisiones si dos unidades ATmega sin cristal comienzan a transmitir datos al mismo tiempo?

Incluso si cada chip tuviera un cristal, aún tendría que asumir que son asíncronos entre sí. La única forma de lograr una operación síncrona sería alimentarlos todos al mismo reloj desde un cristal u oscilador compartido.
@DaveTweed tienes razón :-)

Respuestas (1)

Múltiples dispositivos IIC no necesitan relojes sincronizados. IIC es en sí mismo un protocolo síncrono. Durante cualquier mensaje, el maestro controla la línea SCL (reloj). Siempre que el maestro deje que el reloj se detenga lo suficiente en cada nivel para que los esclavos tengan tiempo de interpretar SDA correctamente, no habrá problema.

Entonces no, no necesita relojes de precisión cristalina para la comunicación IIC.

Si el maestro está funcionando a velocidad xtal y los esclavos están funcionando con el oscilador interno, ¿podrán mantenerse al día con la velocidad de transferencia de paquetes de datos? Presumiblemente, también ralentizará todo el asunto.
Tenga en cuenta que la pregunta específica es sobre la detección de colisiones en la operación multimaestro, que es asíncrona y requiere un esfuerzo adicional para implementarla correctamente.
@DaveTweed (basado en su comentario sobre mi pregunta original) dado que nunca hay una garantía de que dos maestros estén sincronizados con el reloj, ¿no debería manejarse/integrarse esto en el protocolo I2C? Quiero decir, I2C debería poder detectar esto incluso cuando los relojes de dos maestros no están sincronizados.
@mvermand, realmente necesita leer la hoja de especificaciones del dispositivo para ver cómo maneja realmente I2C. Su implementación particular del estándar puede o no coincidir con sus requisitos cuando se ejecuta fuera del oscilador interno.
No conozco los detalles para el ATmega328 específicamente, pero muchas implementaciones de microcontroladores I2C (hardware O software (bit-banging)) no incluyen soporte completo para la operación multimaestro con detección de colisión. De ahí el comentario sobre el "esfuerzo extra".