Quiero estimar el rendimiento de las líneas i2c y este es el cálculo que he hecho:
Arquitectura de hardware:
MCU < --- > i2c mux TCA9548A < --- > 8 sensores IMU basados en i2c MPU6050
¿Qué estoy tratando de hacer?
Los sensores se conectarán a MCU a través de multiplexor. Habrá una longitud máxima de cable de 1 metro entre MCU y cualquier sensor. MCU leerá cíclicamente todos los sensores y transmitirá los datos a una PC o un teléfono móvil a través de Bluetooth / wifi para su posterior procesamiento.
Datos totales de un sensor:
Acelerómetro: 3 ejes X 16 bits = 48 bits
Giroscopio: 3 ejes X 16 bits = 48 bits
Cada lectura tendrá una sobrecarga de dirección del dispositivo = 31 bits (Editado según el comentario de JimmyB)
La lectura única requerirá 48 + 48 + 31 = 127 bits
Suponiendo que mi reloj i2c funciona a 400 kHz, podré transferir 1 bit en cada ciclo de reloj y, por lo tanto, 400,000 bits en un segundo.
Una lectura completa = leer todos los sensores una vez, es decir, 127x8 = 1016 bits
Por lo tanto, no. muchas veces puedo leer todos los valores de los sensores cada segundo (RPS):
RPS = 400,000 / 1016 = 393.7 asumiendo que mis sensores están listos para suministrar datos a esa tasa.
Notas de la hoja de datos:
Velocidad de datos de salida para Gyro = 4 Hz a 8000 Hz
Velocidad de datos de salida para Accelero = 4Hz a 1000 Hz
El peor escenario posible: mis sensores estarán a una distancia de 1 metro (máx.) de la MCU. Teniendo en cuenta el aumento de la capacitancia del bus y otras cosas que podrían ralentizar la transferencia de datos, creo que 100 kHz todavía serán alcanzables (¿tengo razón al pensar que sí?).
Por lo tanto, se reduce el RPS = 98.4
¿Son correctos mis cálculos?
¿Qué precauciones debo tomar para mejorar el rendimiento de mis datos? (¿cable trenzado ?, ¿algo de búfer i2c?)
ACTUALIZACIONES:
Hice una investigación después de publicar esta pregunta. Encontré un búfer de bus i2c P82B96 que me permite tener una frecuencia de reloj de 400 kHz para longitudes de cable que excedan 20 metros.
Lo único que limita es el programa, supongo, siempre que mis cálculos sean precisos.