4.9. Buses del sensor

El sensor de una cámara y el MCU con el que se comunica intercambian dos tipos diferentes de datos en dos buses diferentes.

4.9.1. Bus de control

Cada ajuste del sensor reside en un registro del chip: formato de píxel, tamaño de fotograma, tiempo de exposición, ganancia, ganancias de balance de blancos, objetivos de control automático, etc. El MCU lee y escribe esos registros a través de un bus I2C (algunos sensores usan SPI en su lugar). Dos cables (SCL y SDA) conectan el periférico I2C del MCU con la interfaz I2C del sensor, y cada configuración que elige el usuario es traducida por el controlador en una o más escrituras de registro en este bus.

El bus de control funciona a una velocidad moderada: típicamente 100 kHz o 400 kHz. Ajustar un registro lleva decenas de microsegundos; reconfigurar todo el sensor (un reinicio, un nuevo tamaño de fotograma, un nuevo formato de píxel) lleva de decenas a cientos de milisegundos, principalmente porque el chip necesita un momento para llevar el nuevo modo a un estado estable después de cada escritura de registro. Nada de eso tiene que seguir el ritmo del flujo de píxeles.

4.9.2. Bus de datos de píxeles

Los datos de píxeles salen del sensor por un bus separado, más ancho y mucho más rápido. Dominan dos familias.

Paralelo es el más antiguo de los dos. Lleva ocho o diez líneas de datos para los bits de píxel, además de un reloj de píxel (PCLK), una señal de línea válida (HSYNC) y una señal de fotograma válido (VSYNC). En cada flanco de reloj aparece un byte de píxel en las líneas de datos; HSYNC y VSYNC le indican al receptor dónde empieza y termina cada fila y cada fotograma. Los buses paralelos son sencillos, pero el rendimiento está limitado por la rapidez con que la matriz de pines del MCU puede capturar los datos: típicamente un reloj de píxel de 50 a 100 MHz en el extremo superior.

MIPI CSI-2 (la interfaz serie de cámara de la Mobile Industry Processor Interface, versión 2) ha reemplazado en gran medida al paralelo en los nuevos sensores de imagen. Lleva los píxeles por uno o más pares de carriles diferenciales a cientos de megabits por segundo por par, con un menor número de pines, mucho más ancho de banda y menor EMI. El paralelo persiste sobre todo en diseños heredados y en componentes más pequeños y de menor velocidad donde su simplicidad sigue compensando.

Un diagrama que muestra un bloque de sensor a la izquierda y un bloque de MCU a la derecha. Una flecha bidireccional entre ellos está etiquetada como "I2C (SCL, SDA)". Una flecha más gruesa que apunta del sensor al MCU está etiquetada como "paralelo o MIPI".

El sensor y el MCU intercambian control en un bus I2C bidireccional lento y datos de píxeles en un bus paralelo o MIPI más ancho, más rápido y unidireccional.

Sea cual sea la familia que use el sensor, el lado del MCU tiene un periférico de función fija que captura los píxeles entrantes y los escribe en un framebuffer en memoria. El código Python nunca controla este bus directamente; solo lee el framebuffer una vez que ese hardware ha terminado de llenarlo.