Masters múltiples para el dispositivo i2c

2

Tengo un chip RTC DS1307 con el que quiero interactuar con varios maestros. Uno, un chip ATMega, solo necesitará realmente extraer datos de tiempo del chip y el otro (probablemente solo un ATTiny) estará allí únicamente con el fin de recibir actualizaciones de tiempo inalámbricas y actualizar el tiempo en el RTC. Me doy cuenta de que simplemente 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 a 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í, ¿tengo que hacer algo para asegurarme de que ambos no lo intenten al mismo tiempo? Supongo que, dado que i2c ya es compatible con varios dispositivos slave , esto generalmente debería manejarse por mí. Pero, en general, debería funcionar esto. Estoy de acuerdo con que ATMega intente obtener el tiempo y tener que esperar si se está actualizando el RTC. Lo que sería raro de todos modos, tal vez cada hora a lo sumo.

¿Pensamientos?

    
pregunta Adam Haile

1 respuesta

3

Estás en lo correcto. Multimaster debe ser manejado por usted. i2c Multi-Master description . Lo principal para un sistema multimaster adecuado es que comprende la lógica de arbitraje y puede saber cuándo el sistema está ocupado. Lo primero es más difícil que lo 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 tomar el control del autobús 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.

  

Comprueba si el pin Ocupado está activado.

     

Si está Desactivado, establezca una variable de estado en Encendido y el pin Ocupado en Encendido, luego hable con el rtc. Cuando haya terminado, establezca la variable y el pin en Off.

     

Si está activado, compruebe si la variable de estado está activada (¿"I" configuró la variable de estado como activada?). Si no, repite hasta que el pin de ocupado esté desactivado.

    
respondido por el Passerby

Lea otras preguntas en las etiquetas