I2C SoC explícitamente no multimaster

0

Mientras leo la guía de un chip que estoy a punto de usar ( Intel Edison ), Noté que el SoC no está específicamente soportando multi-master.

  

El SoC es siempre maestro I2C, no es compatible con el modo de varios maestros.

Sin embargo, que yo sepa, I2C está diseñado como un bus multi-maestro. ¿Este SoC viola la especificación o mi comprensión de I2C es incompleta?

¿Por qué está fuera de la cuestión que este SoC sea multi-maestro de todos modos?

    
pregunta Mast

3 respuestas

3

Si bien el I2C con varios maestros puede parecer un superconjunto del I2C con un solo maestro, tal vez sea más útil pensar en ellos como si estuvieran separados, ya que un solo maestro puede actuar de manera ilegítima para un autobús. - compartir maestro, y tales acciones pueden recuperarse fácilmente de los modos de falla que serían más difíciles de manejar en un sistema de bus compartido. Para que un maestro I2C coexista con otros maestros en el mismo bus, debe incluir soporte en hardware y software para dicha coexistencia; este soporte debe, entre otras cosas, incluir una lógica de tiempo de espera para manejar el escenario de otra comunicación de inicio maestro y luego restablecerse mientras se liberaron SDA y SCK (o restablecerse mientras se liberó SDA y se liberó SCK como consecuencia del restablecimiento ). En ese escenario, a ninguno de los maestros se le permitiría comunicarse hasta que ambos hubieran visto a SDA y SCK lo suficientemente alto como para concluir que cualquier persona que haya tenido el autobús debe haber "muerto". Lone-master I2C no tendría ese problema, ya que nunca habrá ninguna transacción pendiente que no sepa, y el momento en que no quiere que una transacción esté pendiente puede reiniciar el bus liberando SCK y SDA (si ya confirmado), a la espera de que SCK alcance un nivel alto, y si el nivel de SDA es bajo en ese momento, se afirma SCK y se reinicia el procedimiento (que puede ser necesario como máximo nueve veces); una vez que SDA y SCK son altos, puede comenzar la siguiente transacción afirmando SDA.

Debido a las diferencias en el diseño entre el bus compartido y el firmware de maestro único, la mayoría de las aplicaciones de bus único requerirían una revisión sustancial para coexistir con otros maestros de bus. Dado que el hardware de múltiples maestros sería inútil sin el firmware correspondiente, no veo ninguna necesidad de un dispositivo que se utilizará como maestro único para incluir el hardware necesario para el arbitraje de múltiples maestros.

Por cierto, una cosa que no he visto que sea compatible con el hardware, pero que sería IMHO útil, sería un medio para realizar un arbitraje de múltiples esclavos de direcciones compartidas. El protocolo de señalización facilitaría que un dispositivo I2C admita una dirección de escritura de "preparación para leer ID de dispositivo" y una dirección de lectura de "obtener ID de dispositivo siguiente". El comando anterior "activaría" el modo de ID de lectura de todos los dispositivos que lo reciben; esto último causaría que cualquier dispositivo cuyo modo de ID de lectura estuviera activo intentara emitir su ID (se eliminara si se perdía el arbitraje de cualquier otro dispositivo); cualquier dispositivo que produzca con éxito su ID desactivará su modo de ID de lectura. Bajo tal esquema, un maestro que produzca una "preparación para leer ID de dispositivo" y luego emita múltiples solicitudes de "lectura de ID de dispositivo" recibiría nuevamente las ID de todos los dispositivos conectados de una manera mucho más suave y más fácil que la utilizada por un solo cable protocolo.

    
respondido por el supercat
1

Como usted dice, la especificación I2C permite múltiples maestros conectados al mismo bus, así como un montón de otras cosas. Este chip realiza solo un subconjunto de la especificación, es decir, no se puede conectar a un bus junto con otro maestro.

Esto no debería ser una sorpresa: muchos dispositivos que se adhieren a una determinada especificación generalmente solo comprenden el subconjunto necesario de esa especificación. Trabajé en una placa Altera con un FPGA y muchos dispositivos, uno de ellos era un códec de audio que también usaba I2C. El código de Altera que hablaba con el códec probablemente no se acercó a la implementación de la especificación completa I2C, tanto para los múltiples maestros como para la velocidad. He visto algunos chips prototipo con una interfaz SPI que no admite todas las velocidades que SPI especifica. Pero ya sabes ... Funcionó.

Posiblemente fue diseñado para ahorrar dinero, ya sea en forma de tiempo o área de silicona o lo que sea. Hay muchos casos de uso en los que, de todos modos, no se necesita multi master.

Un pequeño apéndice: en mi opinión, puedes conectar ese dispositivo a un bus donde esté presente otro maestro, pero debes probar cuidadosamente todos los casos posibles y modificar el otro comportamiento del maestro para dar cuenta del maestro "malo".

    
respondido por el Vladimir Cravero
1

De acuerdo con I2C Specification Rev 3 , encontrado en la parte inferior de la página 6:

  

El bus I2C es un bus multi-maestro. Esto significa que se puede conectar más de un dispositivo capaz de controlar el bus.

Entonces, sí, viola el espíritu de la especificación I2C. La característica de múltiples maestros probablemente se omitió en el chip para ahorrar en costos de desarrollo y / o espacio de silicio.

    
respondido por el CurtisHx

Lea otras preguntas en las etiquetas