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.

A diagram showing a sensor block on the left and an MCU block on the right. A bidirectional arrow between them is labelled "I2C (SCL, SDA)". A thicker arrow pointing from the sensor to the MCU is labelled "parallel or 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.