Explorando o módulo OV7670-FIFO: Interface SCCB

Este post faz parte da série Explorando o módulo OV7670-FIFO. Leia também os outros posts da série:

Olá, caro leitor. Neste artigo, apresentarei os procedimentos necessários para acessar o módulo de câmera VGA OV7670. O artigo será dividido em duas partes, sendo a segunda referente ao processo para capturar imagens.

 

 

Módulo de câmera VGA

 

O módulo de câmera VGA utiliza o sensor de CMOS OV7670. As principais características desse sensor são indicadas a seguir [1]:

  • Resolução máxima: 640 x 480;
  • Taxa de transferência: Máximo de 30 fps em modo VGA;
  • Tensão de operação: 2.5 V à 3.0 V;
  • Alta sensibilidade em ambientes com pouca luz;
  • Interface SCCB (Serial Camera Control Bus), compatível com interface I2C;
  • Suporta VGA, CIF – Formatos de saída: YUV/YCBCr 4:2:2, RGB 565/555, GRB 4:2:2, RAW RGB Data;
  • Controle automático de funções de imagem;
  • Controle automático de qualidade de imagem, como saturação, matiz, gama, nitidez e anti-blooming;
  • Auto detecção de flicker (50/60 Hz);
  • Tamanho da lente: 1/6 ”;
  • Ângulo de visão: 24 graus.

 

As características descritas são referentes ao sensor de imagem. Outras informações podem ser obtidas tanto no Application Note quanto no Datasheet do OV7670.

 

Em relação ao módulo, duas versões podem ser encontradas. A primeira utiliza somente o sensor OV7670 e apresenta os pinos para conexão entre o sensor e outro dispositivo. Essa versão é mostrada na Figura 1.

 

Câmera VGA - OV7670
Figura 1: Câmera VGA - OV7670 [1].

 

A pinagem do módulo é mostrada na Figura 2.

 

Pinagem do módulo de câmera VGA
Figura 2: Pinagem do módulo de câmera VGA [1].

 

Já na segunda versão, um buffer (FIFO - First In First Out) é utilizado para armazenar os dados do sensor CMOS. O dispositivo utilizado é o CI AL422, próprio para tratar sinais de vídeo. Essa versão é mostrada nas Figura 3 e 4.

 

Módulo de câmera VGA + FIFO - Frente.
Figura 3: Módulo de câmera VGA + FIFO - Frente.
Módulo de câmera VGA + FIFO - Verso.
Figura 4: Módulo de câmera VGA + FIFO - Verso.

 

A pinagem do módulo é mostrada na Figura 5.

 

Pinagem do módulo de câmera VGA + FIFO.
Figura 5: Pinagem do módulo de câmera VGA + FIFO.

 

A diferença da pinagem entre os módulos é que o segundo apresenta sinais de controle do módulo FIFO.

 

 

Interface de Comunicação SCCB

 

Independente do módulo, a interface de comunicação com o sensor é a mesma. Tal interface é chamada de SCCB e é compatível com o protocolo I2C. Assim, dois pinos são utilizados na comunicação, sendo um para a sincronização e outro para transferência de dados. Essa configuração é ilustrada na Figura 6.

 

Sistema SCCB.
Figura 6: Sistema SCCB [2].

 

Para estruturar a interface SCCB foram definidas cinco funções:

  • SCCB_Init: Determina condição inicial dos sinais de controle da interface SCCB;
  • SCCB_Start: Inicia comunicação;
  • SCCB_Stop: Finaliza comunicação;
  • SCCB_ReadByte: Faz a leitura de um byte;
  • SCCB_WriteByte: Escreve um byte.

 

Tais funções foram declaradas no arquivo de cabeçalho SCCB.h. Cabe ressaltar que o projeto pode ser encontrado neste link.

 

 

O sinal SIO_C é controlado pelo dispositivo master, indicando a transferência de 1 bit quando o sinal passa do nível lógico 0 para 1. Quando o barramento está ocioso, o sinal SIO_C deve permanecer em nível lógico 1. Assim, quando uma transferência é iniciada, o sinal SIO_C é colocado em nível lógico 0. Considerando isso, a condição dos sinais é definida na função SCCB_INIT.

 

 

O início da transmissão é dado quando o sinal SIO_D passa do nível lógico 1 para 0, e na sequência o sinal de clock também vai a zero. Já o final da transmissão ocorre quando o sinal SIO_D é posto em nível lógico 1 enquanto o sinal SIO_C está em nível lógico 1. Essas duas situações são ilustradas na Figura 7.

 

Transferência de dados na interface SCCB.
Figura 7: Transferência de dados na interface SCCB [2].

 

 

Essas funções são usadas pelo módulo OV7670 para as operações de escrita e leitura dos registradores de controle. Para tal, foram definidas as funções de transferência de dados entre os dispositivos.

 

 

 

Registradores de Controle

 

Com a interface SCCB implementada é possível configurar os registradores de controle do chip para o modo de operação desejado. Essas configurações são realizadas a partir de uma sequência correta de operações, chamadas ciclos de transmissão, que são classificadas da seguinte maneira:

  • Ciclo de escrita dividido em três fases;
  • Ciclo de escrita dividido em duas fases;
  • Ciclo de leitura dividido em duas fases.

 

De modo geral, cada fase de transmissão envolve a transferência de 8 bits de dados e um nono bit X, com função Don't Care. Além disso, na primeira fase da transmissão ocorre a escrita do endereço do dispositivo no barramento SCCB.

 

Ciclo de escrita dividido em três fases

 

Esse ciclo é utilizado para escrever em um registrador do dispositivo. Assim, a segunda informação transferida corresponde ao endereço do registrador seguido do valor que será armazenado.

 

Figura 8: Ciclo de escrita dividido em três fases.

 

 

Ciclo de escrita e leitura dividido em duas fases

 

Esse procedimento é utilizado para indicar o endereço de um registrador que será acessado para função de leitura. Cabe ressaltar que essa etapa ocorre no ciclo de escrita dividido em três fases. 

 

Figura 9: Ciclo de escrita [2].

 

Para ler o valor do registrador é necessário determinar novamente o ID do dispositivo e, em seguida, capturar o valor.

 

Figura 9: Ciclo de leitura [2].

 

 

 

Próximo artigo

 

No próximo artigo será apresentado o procedimento para capturar um frame do módulo OV7670 utilizando o buffer AL422. Além do controle o buffer, a interface SCCB será utilizada para realizar a configuração dos registradores de controle do módulo OV7670.

 

O projeto pode ser acessado neste link.

 

 

Saiba mais

 

Aplicação com câmera usando Qt5

Calibração de câmeras - Parte 1

Utilizando Câmeras em Sistemas Linux Embarcado

 

 

Referências

 

[1] Módulo câmera VGA OV7670

[2] Serial Camera Control Bus Functional Specification

Imagem destacada: https://en.wikipedia.org/wiki/Mode_13h#/media/File:VGA_palette_with_black_borders.svg

Outros artigos da série

Explorando o módulo OV7670-FIFO: Video Frame Buffer >>
Este post faz da série Explorando o módulo OV7670-FIFO. Leia também os outros posts da série:

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Fernando Deluno Garcia
Fascinado por computação, especialmente na interface entre hardware e software, me engajei na área de sistemas embarcados. Atuo com desenvolvimento de sistemas embarcados e sou docente da Faculdade de Engenharia de Sorocaba.Para mais informações: https://about.me/fdelunogarcia

1
Deixe um comentário

avatar
 
1 Comment threads
0 Thread replies
1 Followers
 
Most reacted comment
Hottest comment thread
1 Comment authors
Thiago Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Thiago
Visitante
Thiago

Estou tentando ha um tempão botar pra funcionar os módulos OV9655 e OV2640. Consegui com resolução 320x240. Acho que a documentação das câmeras é bem limitada e de acordo com algumas pessoas as datasheets disponíveis estão erradas. O fabricante nunca retorna quando solicito guias de usuário e datasheets. Agora, estou tentando com resoluções maiores. Para isso, estou usando uma memoria externa. Aguardo a próxima parte pra ver se entendo melhor alguns pontos que não ficaram tao claros pra mim enquanto trabalhava no projeto.