Múltiples maestros para dispositivo i2c

Tengo un chip RTC DS1307 que quiero conectar con varios maestros. Uno, un chip ATMega, solo necesitará extraer datos de tiempo del chip y el otro (probablemente solo un ATTiny) estará allí únicamente con el propósito de recibir actualizaciones de tiempo inalámbricas y actualizar el tiempo en el RTC. Me doy cuenta de que podría incorporar esta funcionalidad de actualización inalámbrica al chip ATMega, pero estoy tratando de trabajar en una placa RTC modular que, en lo que respecta a ATMega, es exactamente igual que cualquier otro RTC similar como el DS1307 o el DS3231 (Chronodot).

La pregunta es, ¿puedo conectarlo todo a las mismas dos líneas de bus i2c y comunicarme con el RTC desde AMBOS chips? Si es así, ¿debo hacer algo para asegurarme de que ambos no lo intenten al mismo tiempo? Supongo que, dado que i2c ya admite múltiples dispositivos esclavos , esto generalmente debería manejarse por mí. Pero, en general, esto debería funcionar. Estoy de acuerdo con que ATMega intente obtener la hora y tenga que esperar si se actualiza el RTC. Lo cual sería raro de todos modos, tal vez cada hora como máximo.

¿Pensamientos?

Respuestas (1)

Estás en lo correcto. Multimaster debe ser manejado por usted. Descripción i2c Multi-Master . Lo principal para un sistema multimaestro adecuado es que comprende la lógica de arbitraje y puede saber cuándo el sistema está ocupado. El primero es más difícil que el segundo. Para saber cuándo el sistema está ocupado, cada maestro múltiple debe poder verificar una condición de inicio y esperar una condición de parada antes de intentar usar el bus. La lógica de arbitraje es para situaciones en las que ambos maestros pueden intentar hacerse cargo del bus al mismo tiempo.

Pero hay otras formas de hacerlo, fuera del estándar i2c. Puede usar un pin adicional para cada uno de los maestros y hacer un estándar de señal de ocupado simple.

Compruebe si el pin Ocupado está activado.

Si está desactivado, establezca una variable de estado en Activado y el pin Ocupado en Activado, luego hable con el rtc. Cuando haya terminado, configure la variable y el pin en Apagado.

Si está Activado, verifique si la variable de estado está Activada (¿"Yo" configuré la variable de estado en Activado?). Si no, repita hasta que el pin ocupado esté desactivado.

Si bien muchos aspectos de I2C son bastante inteligentes, el multimaestro tiene algunas limitaciones. Entre otras cosas, si dos maestros comienzan a hablar a la vez, no se detectará la falla del arbitraje a menos que intenten decir cosas diferentes. Se pueden intercambiar muchos bytes antes de que eso suceda y, en algunos casos, es posible que no suceda en absoluto. Si dos maestros intentan enviar un "contador de incremento" a un dispositivo, cada maestro puede percibir (correctamente) que el dispositivo recibió un comando de "contador de incremento", pero concluir (no necesariamente correctamente) que el contador se incrementará en su nombre .