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