¿Latencia en la lectura de una gran variedad de esclavos i2c?

3

¿Qué tipo de latencia interviene en el sondeo de un gran número de esclavos i2c? Tengo una serie de 64 esclavos i2c que necesitan enviar 2 bytes cada uno al maestro lo más rápido posible.

Según entiendo i2c, hay un bit para la condición de inicio, 8 bits para la dirección y el modo, luego otro bit para reconocimiento, luego los 16 bits de datos, otro reconocimiento y la condición de parada. Total de 28 bits por esclavo para los datos y la sobrecarga del protocolo.

Entonces, a 400 kbit, debería poder alcanzar aproximadamente 223 lecturas de toda la serie de esclavos por segundo, o aproximadamente 4,48 ms por cada barrido. ¿Es correcto o me estoy perdiendo algo?

    
pregunta dtech

2 respuestas

2

Te estás perdiendo la parte donde los esclavos pueden hacer lo que se denomina reloj estirando la línea del reloj todo el tiempo que necesiten para prepararse.

Entonces, sin mirar la hoja de datos de cada uno de sus sensores, esto será imposible de responder.

Sin embargo, muchos dispositivos I²C simplemente no hacen alargamiento de reloj, por lo que su cálculo podría funcionar, si agrega un poco de pausa solo para asegurarse de que todos en el bus notaron la condición de parada.

Los 64 esclavos I²C huelen mucho a una colisión de direcciones (muchos tipos de dispositivos I²C vienen con una dirección fija, o tal vez un conjunto de 8 direcciones seleccionables). los microcontroladores que encuestan "sus" sensores y luego comunican los datos "agregados" a la MCU principal son mucho más fáciles de manejar. Especialmente teniendo en cuenta que I²C es un bus externo, y que esto funcione bien con un bus de 64 dispositivos no es intrínsecamente trivial.

Editar : de todos modos, resulta que cada uno de tus sensores es un microcontrolador.

Entonces, ¿por qué no simplemente hacer una gran variedad de registros de desplazamiento? Las unidades SPI se diseñan típicamente para ese propósito exacto, y tienen registros de cambio internamente. De esa manera, puede hacer una cadena de dispositivos SPI y ahorrarse la sobrecarga de direccionamiento.

    
respondido por el Marcus Müller
-1
  

Por lo que yo entiendo i2c

depende de cómo está estructurado el esclavo. un proceso típico implica enviar el ID del dispositivo + escritura, y luego la dirección; reinicie, y luego la identificación del dispositivo, lea dos bytes. Así que para un total de 5 bytes. 9 bits por byte, aproximadamente 50 bits por dispositivo.

el resto de las matemáticas es fácil.

  

lo más rápido posible.

entonces escogiste el protocolo equivocado. i2c es lo contrario de "rápido".

    
respondido por el dannyf

Lea otras preguntas en las etiquetas