En el bus multi master i2c, ¿cómo determinar qué dispositivo es el maestro del bus?

2

En un bus i2c de varios maestros, ¿cómo determinar qué dispositivo inició la transferencia?

actualización (a partir de los comentarios realizados a continuación por la O.P.):

Estoy tratando de darle sentido a enlace donde dice:

  

es posible reconocer qué dispositivo I2C está activo actualmente analizando el nivel bajo en las líneas I2C

¿Qué significa eso?

    
pregunta sram

4 respuestas

2

I 2 La especificación de C en sí no tiene disposiciones para la dirección "de", AFAIK.

Debería programar los masters para transmitir sus ID en la parte de carga útil del paquete I 2 C

    
respondido por el Nick Alexeev
0

En algunos casos, uno puede inferir qué dispositivo inició una transferencia basándose en los voltajes relativos en los extremos de la conexión, o si diferentes dispositivos enviarán diferentes tipos de datos. De lo contrario, lo único que cualquier dispositivo sabe quién es el maestro del autobús en un momento dado es "quizás yo" o "no yo". Tenga en cuenta que si dos dispositivos intentan realizar la misma transacción de manera simultánea, es posible que ambos dispositivos se consideren maestros del bus. Esto podría en algunos casos causar problemas. Por ejemplo, si un dispositivo esclavo I2C tiene un contador que aumenta cada vez que se lee, y si los maestros intentan asignarse direcciones mediante la lectura de ese contador, es posible que dos maestros emitan solicitudes simultáneas para leer el contador, y para cada para leer la respuesta y pensar que es lo único en el universo que lee ese valor.

Si nada en el bus sabe quién es el maestro del bus en un momento dado, no es probable que un observador externo tenga una forma 100% confiable de averiguarlo.

    
respondido por el supercat
0

Los diferentes dispositivos tendrán diferentes etapas de salida y, por lo tanto, impulsarán el bus de manera ligeramente diferente. Dado que I2C es un bus de drenaje abierto, lo único que puede observar es el nivel bajo, ya que el nivel alto está determinado por las resistencias de pull-up. Si puede identificar qué voltaje específico tiene cada maestro como un nivel bajo en el bus, entonces puede averiguar qué maestro está controlando el bus. Necesitará un osciloscopio para medir esto y observar el tráfico del autobús; un analizador lógico o analizador de protocolo que solo registra el nivel como alto o bajo no es suficiente. Es posible que pueda poner algunos resistores de bajo valor en serie con los pines I2C en uno o más de los maestros. Estas resistencias formarán un divisor de tensión con las resistencias de extracción de bus y cambiarán la baja tensión según lo afirmen los dispositivos. Poner diferentes valores de resistencia en diferentes dispositivos hará que sean más fáciles de identificar. Tenga en cuenta que las resistencias deben ser lo más pequeñas posible para no ralentizar demasiado el bus o cambiar demasiado el nivel bajo.

Otra cosa a tener en cuenta es el período preciso del reloj. Diferentes maestros tendrán diferentes fuentes de reloj y generadores de velocidad en baudios y pueden producir velocidades en baudios ligeramente diferentes (o significativamente). Es posible rastrear qué maestro está controlando el bus que mira el período del reloj con un osciloscopio rápido o un analizador lógico.

    
respondido por el alex.forencich
0

Lo que el artículo vinculado está tratando de decir es que no todos los dispositivos I2C "tirarán" del bus hacia abajo de la misma manera que otros, y exageran esto al debilitar intencionalmente uno de los dispositivos con una resistencia en serie. La resistencia de rastreo y la fuerza de la unidad determinarán qué tan baja es realmente la lógica baja, como se puede ver en la imagen de esa página:

El autor de la página ha colocado una resistencia de 200 ohmios en serie con la línea SDA y está midiendo el voltaje en el esclavo. Dado que el maestro se ha debilitado, no se tirará a tierra sino a un pequeño voltaje positivo (que todavía es lo suficientemente bajo como para que el esclavo lo vea como una lógica 0). Así, con un alcance, puede ver que el dispositivo que está conduciendo hasta cero es el esclavo (ya que no tiene una resistencia adicional de 200 ohmios entre su conductor y tierra), y el dispositivo que está tirando casi a tierra es el maestro.

Utilicé una técnica similar cuando estaba depurando el protocolo del controlador Nintendo 64. Es un protocolo bidireccional de un cable y quería saber qué transmitía cada lado. Coloqué una resistencia de 330 ohmios en la línea de datos y medí a través de la resistencia. Los pulsos positivos eran el maestro que hablaba con el esclavo, y los impulsos negativos eran el esclavo que hablaba con el maestro. Puede hacer lo mismo aquí, siempre y cuando el cable de tierra de su osciloscopio no esté conectado a tierra (o si usó una sonda diferencial).

    
respondido por el akohlsmith

Lea otras preguntas en las etiquetas