Este artículo ofrece una visión general de la interfaz de cámara MIPI CSI-2 y aborda la arquitectura del sistema, la transmisión D-PHY, los mecanismos de paquetes, los formatos de imagen y la estimación del ancho de banda, así como la integración y resolución de problemas dentro del framework Linux media-controller. El contenido está dirigido a la integración de hardware y software con SoC basados en ARM, sensores de imagen, ISP y pipelines de vídeo V4L2.

Arquitectura del sistema MIPI CSI
MIPI CSI-2 (Camera Serial Interface 2) es un protocolo serie de alta velocidad utilizado para transferir datos de imagen desde un sensor a un SoC, ISP o FPGA. CSI-2 define los formatos de paquetes, los Data Types, los Virtual Channels y los mecanismos de protección contra errores, mientras que D-PHY o C-PHY proporcionan la transmisión física de las señales.

| Capa |
Responsabilidad principal |
Implementación típica en Linux / SoC |
| Plano de control |
Control de modo, exposición, ganancia y streaming |
Driver del sensor e I²C/I³C |
| Capa de protocolo CSI-2 |
Empaquetado, VC, DT, ECC y CRC |
Controlador CSI-2 TX/RX |
| Capa PHY |
Estados LP/HS, reloj y señalización diferencial |
D-PHY/C-PHY y driver PHY |
| Pipeline de imagen |
Decodificación, procesamiento, DMA y captura |
ISP, DMA y nodo V4L2 |
Transmisión y timing D-PHY
Cuando está inactiva, una Data Lane D-PHY permanece en el LP Stop State y pasa por la secuencia de estados LP hasta entrar en modo HS antes de transmitir los paquetes CSI-2. El acceso a los registros del sensor y el control del streaming se realizan normalmente a través de un bus I²C/I³C independiente, distinto de los estados LP de la Data Lane D-PHY.

| Estado / Fase |
Función |
Consideraciones de integración |
| LP-11 Stop State |
Estado inactivo y base para el funcionamiento LP |
Verificar el estado de la lane y la compatibilidad con el PHY TX/RX |
| LP-01, LP-00 |
Parte de la secuencia de entrada/salida del modo HS |
No interpretar estos estados como datos de control I²C |
| HS-Prepare, HS-Zero |
Preparación y estabilización antes de la transmisión a alta velocidad |
Afecta a la detección RX y al ajuste de HS-Settle |
| SoT |
Indica el inicio de la transmisión de paquetes a alta velocidad |
Los errores SoT pueden indicar problemas de timing, lane o configuración |
| HS data transmission |
Transfiere el flujo de bytes de los paquetes CSI-2 |
Verificar la link frequency, el número de lanes y la integridad de la señal |
- En clocked mode, la Clock Lane permite el muestreo en el receptor durante la transmisión HS. El funcionamiento con continuous o non-continuous clock debe verificarse de acuerdo con el sensor de imagen, el PHY del SoC y la configuración del driver.
- HS-Settle debe ajustarse en función de la link frequency real, la documentación del receptor del SoC y los contadores de errores; un valor más alto no es necesariamente mejor.
Paquetes CSI-2 y sincronización
CSI-2 utiliza Short Packets para transportar eventos del protocolo o información de sincronización, mientras que los Long Packets transportan datos RAW, YUV, RGB o datos embedded. Un Long Packet consta de un header de 4 bytes, un payload y un CRC footer de 2 bytes.

| Campo |
Función |
Elementos que deben verificarse |
| Virtual Channel (VC) |
Distingue los flujos de datos lógicos |
El Virtual Channel del sensor y el del RX deben ser compatibles |
| Data Type (DT) |
Identifica el formato de píxel o el tipo de paquete |
Debe coincidir con el modo de salida del sensor y las capacidades del RX |
| Word Count (WC) |
Especifica en bytes la longitud del payload del Long Packet |
Debería corresponder al ancho de línea y al pixel packing |
| ECC |
Protege el header del paquete |
Verificar la sincronización, la lane, la configuración y la decodificación RX |
| CRC |
Protege el payload del Long Packet |
Verificar el PHY, el data rate, el lane mapping y la implementación TX/RX |
Frame Start (FS) y Frame End (FE) proporcionan sincronización a nivel de frame. Line Start (LS) y Line End (LE) proporcionan sincronización opcional a nivel de línea. La transmisión efectiva de LS y LE debe verificarse en la documentación del sensor de imagen, en los traces del receptor CSI o mediante los contadores del driver.
Formatos de imagen y ancho de banda
Los Data Types de CSI-2, los media-bus codes de V4L2, los formatos de memoria de captura de V4L2 y la negociación de formatos del ISP deben representar datos de imagen compatibles, aunque pertenecen a diferentes capas de abstracción y sus nombres y ubicaciones de configuración no tienen que corresponderse de forma individual. Para los datos RAW, deben verificarse tanto la profundidad de bits como el orden Bayer; para los datos YUV, debe verificarse el orden de los bytes.
El payload mínimo correspondiente a los píxeles activos puede estimarse de la siguiente manera:
Active-pixel payload = Width × Height × FPS × Bits per pixel
Este cálculo representa únicamente el payload mínimo necesario para los datos de los píxeles activos. El throughput CSI-2 y el lane rate D-PHY reales también deben tener en cuenta los headers de los paquetes, el CRC, los paquetes de sincronización, la estrategia de transmisión durante el blanking, el número de Data Lanes, el clock mode, los ajustes de link-frequency disponibles en el sensor y las limitaciones del receptor CSI del SoC.
Per-lane rate ≳ Total CSI-2 throughput / Number of Data Lanes
Integración en Linux y Bring-up
El Device Tree normalmente describe los graph endpoints, las data-lanes, las clock-lanes y las conexiones remote-endpoint. En la mayoría de las arquitecturas media-controller, los formatos de imagen se negocian en tiempo de ejecución mediante los formatos de pad de los sub-devices, los media links y la routing negotiation. Los bindings y los formatos realmente compatibles dependen del driver del kernel para el SoC utilizado.
# Comprobar entities, pads y links
media-ctl -p -d /dev/media0
# Ejemplo: configurar el formato del pad del sensor upstream
media-ctl -d /dev/media0 --set-v4l2 '"sensor 1-001a":0 [fmt:SRGGB10_1X10/1920x1080]'
# Ejemplo: habilitar el link
media-ctl -d /dev/media0 --links '"sensor 1-001a":0 -> "csi2rx":0 [1]'
# Configurar el formato de memoria del capture node e iniciar el streaming
v4l2-ctl -d /dev/videoX \
--set-fmt-video=width=1920,height=1080,pixelformat=RG10 \
--stream-mmap=4 --stream-count=100
dmesg -w
Los nombres de las entities, los índices de pad, los media-bus codes, los valores FourCC y los video nodes mostrados en este ejemplo deben ajustarse al media graph real y no son fijos entre plataformas.

Compatibilidad y análisis de errores
| Área |
Elementos que deben verificarse |
Síntomas típicos |
| PHY |
Número de lanes, mapping, link frequency, clock mode y HS-Settle |
Errores SoT, ausencia de datos o pérdida intermitente de frames |
| Protocolo |
VC, DT, comportamiento de los paquetes y ECC/CRC |
Errores de header, errores CRC o problemas de sincronización de frames |
| Formato |
Profundidad de bits, orden Bayer, orden YUV y packing |
Colores incorrectos, frames verdes o imágenes corruptas |
| Pipeline |
DT graph, media links, formatos de pad, ISP y DMA |
Fallo de STREAMON o timeout del buffer |
- Si la comunicación I²C funciona pero no se recibe ninguna imagen, verificar power/reset/MCLK, el estado stream-on del sensor, las data-lanes, el lane mapping, la link frequency, el media graph y el estado del CSI RX.
- Si se detecta actividad de frames pero se producen errores ECC/CRC, verificar los contadores de errores del RX, el lane mapping, el link rate, HS-Settle, la integridad de la señal a nivel de placa y la configuración TX/RX.
- Si se pueden capturar frames pero los colores son incorrectos, verificar la profundidad de bits RAW, el orden Bayer, el media-bus code, el memory FourCC y el pipeline del ISP.
Preguntas frecuentes
1. ¿CSI-2 y D-PHY son lo mismo?
No. CSI-2 es un protocolo de paquetes para datos de imagen, mientras que D-PHY es una interfaz de transmisión de capa física de uso habitual.
2. ¿Por qué no se recibe ninguna imagen aunque la comunicación I²C funcione correctamente?
Una comunicación I²C correcta únicamente confirma el canal de control. La ruta de datos de imagen aún puede verse afectada por problemas relacionados con MCLK, las lanes, el timing PHY, el protocolo, el media graph, el ISP o el DMA.
3. ¿Cuál es la diferencia entre ECC y CRC?
ECC protege principalmente el Packet Header y puede corregir errores de un bit y detectar errores de dos bits. CRC verifica la integridad del payload del Long Packet. Si los errores persisten, normalmente es necesario comprobar tanto la configuración del protocolo como la integridad de la señal en la capa física.
4. ¿Por qué un mismo sensor de imagen puede comportarse de forma diferente en distintas placas?
La impedancia de la PCB, la longitud de las pistas, el FPC, las rutas de retorno a tierra y las condiciones EMI pueden afectar a la integridad de la señal D-PHY y al margen de timing.
Referencias
- MIPI Alliance, "Camera Serial Interface 2 (MIPI CSI-2)", mipi.org/specifications/csi-2
- MIPI Alliance, "MIPI D-PHY", mipi.org/specifications/d-phy