Este artigo apresenta uma visão geral da interface de câmera MIPI CSI-2, abordando a arquitetura do sistema, a transmissão D-PHY, os mecanismos de pacotes, os formatos de imagem e a estimativa de largura de banda, além da integração e solução de problemas no framework Linux media-controller. O conteúdo é voltado à integração de hardware e software envolvendo SoCs baseados em ARM, sensores de imagem, ISPs e pipelines de vídeo V4L2.

Arquitetura do sistema MIPI CSI
MIPI CSI-2 (Camera Serial Interface 2) é um protocolo serial de alta velocidade utilizado para transferir dados de imagem de um sensor para um SoC, ISP ou FPGA. O CSI-2 define formatos de pacotes, Data Types, Virtual Channels e mecanismos de proteção contra erros, enquanto D-PHY ou C-PHY realizam a transmissão física dos sinais.

| Camada |
Responsabilidade principal |
Implementação típica em Linux / SoC |
| Plano de controle |
Controle de modo, exposição, ganho e streaming |
Driver do sensor e I²C/I³C |
| Camada de protocolo CSI-2 |
Empacotamento, VC, DT, ECC e CRC |
Controlador CSI-2 TX/RX |
| Camada PHY |
Estados LP/HS, clock e sinalização diferencial |
D-PHY/C-PHY e driver PHY |
| Pipeline de imagem |
Decodificação, processamento, DMA e captura |
ISP, DMA e nó V4L2 |
Transmissão e timing D-PHY
Quando está inativa, uma Data Lane D-PHY permanece no LP Stop State e passa pela sequência de estados LP até entrar no modo HS antes da transmissão dos pacotes CSI-2. O acesso aos registradores do sensor e o controle de streaming são normalmente realizados por um barramento I²C/I³C separado, distinto dos estados LP da Data Lane D-PHY.

| Estado / Fase |
Função |
Considerações de integração |
| LP-11 Stop State |
Estado inativo e base para a operação LP |
Verificar o estado da lane e o suporte do PHY TX/RX |
| LP-01, LP-00 |
Parte da sequência de entrada/saída do modo HS |
Não interpretar esses estados como dados de controle I²C |
| HS-Prepare, HS-Zero |
Preparação e estabilização antes da transmissão em alta velocidade |
Afeta a detecção RX e o ajuste de HS-Settle |
| SoT |
Indica o início da transmissão de pacotes em alta velocidade |
Erros de SoT podem indicar problemas de timing, lane ou configuração |
| HS data transmission |
Transfere o fluxo de bytes dos pacotes CSI-2 |
Verificar a link frequency, o número de lanes e a integridade do sinal |
- No clocked mode, a Clock Lane permite a amostragem no receptor durante a transmissão HS. A operação com continuous ou non-continuous clock deve ser verificada de acordo com o sensor de imagem, o PHY do SoC e a configuração do driver.
- HS-Settle deve ser ajustado com base na link frequency real, na documentação do receptor do SoC e nos contadores de erros; um valor mais alto não é necessariamente melhor.
Pacotes CSI-2 e sincronização
O CSI-2 utiliza Short Packets para transportar eventos do protocolo ou informações de sincronização, enquanto os Long Packets transportam dados RAW, YUV, RGB ou dados embedded. Um Long Packet é composto por um header de 4 bytes, um payload e um CRC footer de 2 bytes.

| Campo |
Função |
Itens a verificar |
| Virtual Channel (VC) |
Distingue fluxos de dados lógicos |
O Virtual Channel do sensor e o do RX devem ser compatíveis |
| Data Type (DT) |
Identifica o formato de pixel ou o tipo de pacote |
Deve corresponder ao modo de saída do sensor e às capacidades do RX |
| Word Count (WC) |
Especifica, em bytes, o comprimento do payload do Long Packet |
Deveria corresponder à largura da linha e ao pixel packing |
| ECC |
Protege o header do pacote |
Verificar a sincronização, a lane, a configuração e a decodificação RX |
| CRC |
Protege o payload do Long Packet |
Verificar o PHY, o data rate, o lane mapping e a implementação TX/RX |
Frame Start (FS) e Frame End (FE) fornecem sincronização no nível de frame. Line Start (LS) e Line End (LE) fornecem sincronização opcional no nível de linha. A transmissão efetiva de LS e LE deve ser verificada na documentação do sensor de imagem, nos traces do receptor CSI ou nos contadores do driver.
Formatos de imagem e largura de banda
Os Data Types do CSI-2, os media-bus codes do V4L2, os formatos de memória de captura do V4L2 e a negociação de formatos do ISP devem representar dados de imagem compatíveis, embora pertençam a diferentes camadas de abstração e seus nomes e locais de configuração não precisem corresponder de forma individual. Para dados RAW, verifique tanto a profundidade de bits quanto a ordem Bayer; para dados YUV, verifique a ordem dos bytes.
O payload mínimo correspondente aos pixels ativos pode ser estimado da seguinte forma:
Active-pixel payload = Width × Height × FPS × Bits per pixel
Esse cálculo representa apenas o payload mínimo necessário para os dados dos pixels ativos. O throughput CSI-2 e o lane rate D-PHY reais também devem considerar os headers dos pacotes, CRC, pacotes de sincronização, a estratégia de transmissão durante o blanking, o número de Data Lanes, o clock mode, as configurações de link-frequency disponíveis no sensor e as limitações do receptor CSI do SoC.
Per-lane rate ≳ Total CSI-2 throughput / Number of Data Lanes
Integração Linux e Bring-up
O Device Tree normalmente descreve graph endpoints, data-lanes, clock-lanes e conexões remote-endpoint. Na maioria das arquiteturas media-controller, os formatos de imagem são negociados em tempo de execução por meio de formatos de pad dos sub-devices, media links e routing negotiation. Os bindings e formatos efetivamente suportados dependem do driver do kernel para o SoC utilizado.
# Verificar entities, pads e links
media-ctl -p -d /dev/media0
# Exemplo: configurar o formato do pad do sensor upstream
media-ctl -d /dev/media0 --set-v4l2 '"sensor 1-001a":0 [fmt:SRGGB10_1X10/1920x1080]'
# Exemplo: habilitar o link
media-ctl -d /dev/media0 --links '"sensor 1-001a":0 -> "csi2rx":0 [1]'
# Configurar o formato de memória do capture node e iniciar o streaming
v4l2-ctl -d /dev/videoX \
--set-fmt-video=width=1920,height=1080,pixelformat=RG10 \
--stream-mmap=4 --stream-count=100
dmesg -w
Os nomes das entities, os índices de pad, os media-bus codes, os valores FourCC e os video nodes mostrados neste exemplo devem ser ajustados de acordo com o media graph real e não são fixos entre diferentes plataformas.

Compatibilidade e análise de erros
| Área |
Itens a verificar |
Sintomas típicos |
| PHY |
Número de lanes, mapping, link frequency, clock mode e HS-Settle |
Erros de SoT, ausência de dados ou perda intermitente de frames |
| Protocolo |
VC, DT, comportamento dos pacotes e ECC/CRC |
Erros de header, erros de CRC ou problemas de sincronização de frames |
| Formato |
Profundidade de bits, ordem Bayer, ordem YUV e packing |
Cores incorretas, frames verdes ou imagens corrompidas |
| Pipeline |
DT graph, media links, formatos de pad, ISP e DMA |
Falha de STREAMON ou timeout de buffer |
- Se a comunicação I²C estiver funcionando, mas nenhuma imagem for recebida, verifique power/reset/MCLK, o estado stream-on do sensor, as data-lanes, o lane mapping, a link frequency, o media graph e o estado do CSI RX.
- Se houver atividade de frames, mas ocorrerem erros de ECC/CRC, verifique os contadores de erros do RX, o lane mapping, o link rate, HS-Settle, a integridade do sinal no nível da placa e a configuração TX/RX.
- Se os frames puderem ser capturados, mas as cores estiverem incorretas, verifique a profundidade de bits RAW, a ordem Bayer, o media-bus code, o memory FourCC e o pipeline do ISP.
Perguntas frequentes
1. CSI-2 e D-PHY são a mesma coisa?
Não. CSI-2 é um protocolo de pacotes para dados de imagem, enquanto D-PHY é uma interface de transmissão de camada física amplamente utilizada.
2. Por que nenhuma imagem é recebida mesmo quando a comunicação I²C está funcionando?
Uma comunicação I²C bem-sucedida confirma apenas o canal de controle. O caminho dos dados de imagem ainda pode ser afetado por problemas relacionados a MCLK, lanes, timing PHY, protocolo, media graph, ISP ou DMA.
3. Qual é a diferença entre ECC e CRC?
O ECC protege principalmente o Packet Header e pode corrigir erros de um bit e detectar erros de dois bits. O CRC verifica a integridade do payload do Long Packet. Se os erros persistirem, normalmente é necessário verificar tanto a configuração do protocolo quanto a integridade do sinal na camada física.
4. Por que o mesmo sensor de imagem pode apresentar comportamentos diferentes em placas diferentes?
A impedância da PCB, o comprimento das trilhas, o FPC, os caminhos de retorno de terra e as condições de EMI podem afetar a integridade do sinal D-PHY e a margem de timing.
Referências
- MIPI Alliance, "Camera Serial Interface 2 (MIPI CSI-2)", mipi.org/specifications/csi-2
- MIPI Alliance, "MIPI D-PHY", mipi.org/specifications/d-phy