4.9. Barramentos do sensor

Um sensor de câmara e o MCU com que comunica trocam dois tipos distintos de dados em dois barramentos diferentes.

4.9.1. Barramento de controlo

Cada configuração do sensor reside num registo do chip – formato de pixel, tamanho do fotograma, tempo de exposição, ganho, ganhos de balanço de brancos, alvos de controlo automático, entre outros. O MCU lê e escreve esses registos através de um barramento I2C (alguns sensores utilizam SPI em alternativa). Dois fios (SCL e SDA) ligam o periférico I2C do MCU à interface I2C do sensor, e cada configuração escolhida pelo utilizador é traduzida pelo driver em uma ou mais escritas de registo neste barramento.

O barramento de controlo funciona a uma velocidade moderada – tipicamente 100 kHz ou 400 kHz. Configurar um registo demora dezenas de microssegundos; reconfigurar o sensor inteiro (um reset, um novo tamanho de fotograma, um novo formato de pixel) demora dezenas a centenas de milissegundos, sobretudo porque o chip precisa de um momento para estabilizar o novo modo após cada escrita de registo. Nada disso precisa de acompanhar o fluxo de pixels.

4.9.2. Barramento de dados de pixel

Os dados de pixel saem do sensor num barramento separado, mais largo e muito mais rápido. Duas famílias dominam o mercado.

Paralelo é o mais antigo dos dois. Transporta oito ou dez linhas de dados para os bits de pixel, mais um relógio de pixel (PCLK), um sinal de linha válida (HSYNC) e um sinal de fotograma válido (VSYNC). Em cada flanco do relógio surge um byte de pixel nas linhas de dados; HSYNC e VSYNC indicam ao receptor onde começa e termina cada linha e cada fotograma. Os barramentos paralelos são simples, mas o débito é limitado pela velocidade a que a matriz de pinos do MCU consegue receber dados – tipicamente um relógio de pixel de 50 a 100 MHz no limite superior.

MIPI CSI-2 – a Interface Serial de Câmara da Mobile Industry Processor Interface, versão 2 – substituiu em grande medida o paralelo nos novos sensores de imagem. Transporta os pixels em um ou mais pares de linhas diferenciais a centenas de megabits por segundo por par, com um número de pinos menor, largura de banda muito superior e menor EMI. O paralelo persiste sobretudo em designs legados e em componentes menores e de taxa mais baixa onde a sua simplicidade ainda compensa.

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".

O sensor e o MCU trocam controlo num barramento I2C bidirecional lento e dados de pixel num barramento paralelo ou MIPI mais largo, mais rápido e unidirecional.

Independentemente da família utilizada pelo sensor, o lado do MCU possui um periférico de função fixa que captura os pixels recebidos e os escreve num framebuffer em memória. O código Python nunca conduz este barramento diretamente; apenas lê o framebuffer depois de o hardware ter terminado de o preencher.