Cómo hacer aparecer la cámara y la pantalla en una placa base de un módulo informático

Hemos desarrollado nuestra propia Compute Module Carrier Board, llamada PCCB. Es compatible con los módulos de computación Raspberry Pi 1 - 3 Plus, y tiene una serie de características muy útiles para el uso industrial (RS232, CAN Bus, RS485, TPM, DC / DC Stepdown).

Hoy, he verificado la cámara y la interfaz de la pantalla de 7'' que proporcionamos en la placa también.

Bild 1 Szene 1

Observe los conectores DISP1 y CAM1.

Conocimientos previos sobre la cámara

El módulo de la cámara tiene dos pines GPIO adicionales. Estos son designados:

  • CAM_IO0 o CAM_GPIO / CAMERA_0_SHUTDOWN
  • CAM_IO1 o Línea LED / CAMERA_0_LED

CAM_IO0 se utiliza para conducir la cámara, y la energía hacia arriba / abajo, cuando se requiere. Esto no se puede hacer manualmente poniendo el pin en alto en tiempo de ejecución - el VideoCore Blob tiene que ser capaz de hacer esto.

(posiblemente es posible llevar esto a alto siempre, pero esto dejará la cámara alimentada y aumentará el consumo de energía).

El CAM_IO1 (Línea de LED) fue utilizado en la cámara v1 previamente para conducir el LED. No está en uso en Raspberry Pi Camera v2, según los ingenieros de Raspberry Pi.

El pinout del conector de la cámara (tanto en la Raspberry Pi Camera como en nuestra placa) es:

  • GND
  • CAM_D0_N
  • CAM_D0_P
  • GND
  • CAM_D1_N
  • CAM_D1_P
  • GND
  • CAM_CK_N
  • CAM_CK_P
  • GND
  • CAM_IO0
  • CAM_IO1
  • CAM_SCL
  • CAM_SDA
  • CAM_3V3

La cámara suele utilizar el bus I2C interno (SDA0 y SCL0 disponibles, por ejemplo, en GPIO0 y GPIO1)

imagen

Esquemas

Estos son los esquemas de nuestra disposición de hardware:

imagen

Como puedes ver (y como se discutió anteriormente), estamos usando GPIO_27 como CAM_IO0 y GPIO_26 como CAM_IO1.

La pantalla no necesita pines GPIO adicionales.

Tanto la pantalla como la cámara utilizan el bus I2C interno, en los pines GPIO_1 y GPIO_0.

dt-blob.bin

Este archivo es una parte opcional de los archivos de arranque de Raspberry Pi. Se coloca en /boot y anula un dt-blob.bin incorporado que se compila en start.elf.

Comunica la configuración de los pines GPIO al Firmware que se ejecuta en el VideoCore (VCOS, Video Core OS). Como las placas portadoras de módulos de computación, como la nuestra, tendrán configuraciones de pines personalizadas, con frecuencia, es necesario proporcionar este dt-blob.bin.

Aquí hay más información sobre este archivo, incluyendo un proceso de arranque paso a paso:

Raspberry Pi proporciona la fuente de varias configuraciones posibles con el dt-blob.bin aquí:

He seleccionado el archivo dt-blob-disp1-cam1.dts como fuente y lo he renombrado como dt-blob-disp1-cam1_pccb.dts.

Puedes descargar el archivo fuente original de Raspberry Pi aquí:

Este archivo necesita ser modificado para reflejar nuestra elección de pines GPIO (que a su vez permitirá que el VideoCore Firmware encienda la cámara y hable con ella).

Este archivo fuente incluye configuraciones para muchos modelos diferentes de Pi. Sólo nos interesan las configuraciones del módulo de cálculo: pins_cm3 y pins_cm

imagen

imagen

(Tenga en cuenta que sus números de línea pueden estar fuera de algunos contadores, ya que he incluido algunas cosas adicionales en el archivo que no son relevantes para nuestra discusión aquí).

Aquí debe modificar cuatro líneas. En nuestra configuración de hardware específica (!), he modificado:

imagen

a

imagen

y

imagen

a:

imagen

Hay que aplicar las mismas modificaciones tanto para CM3 como para CM.

pin@p26 { función = "salida"; terminación = "no_pulling"; }; // LED CAMERA 0
pin@p27 { function = "output"; termination = "no_pulling"; }; // CAMERA 0 SHUTDOWN

(...)

pin_define@CAMERA_0_LED {
    tipo = "interno";
    número = ;
};
pin_define@CAMERA_0_SHUTDOWN {
    tipo = "interno";
    número = ;
};
pin_define@CAMERA_0_UNICAM_PORT {
    tipo = "interno";
    número = ;
};

Tenga en cuenta que también tiene la posibilidad de utilizar un CAMERA_0_I2C_PORT y CAMERA_0_SDA_PIN / CAMERA_0_SCL_PIN diferentes si su configuración de hardware lo requiere.

Lo mismo ocurre con la pantalla, hay entradas DISPLAY_SDA, DISPLAY_SCL, DISPLAY_I2C_PORT que se pueden modificar.

En nuestro caso los he dejado por defecto, ya que así es como está diseñada nuestra placa.

Compilar este archivo

En la pi, ejecuta:

sudo dtc -I dts -O dtb -o dt-blob-disp1-cam1_pccb.dtb dt-blob-disp1-cam1_pccb.dts

imagen

Esto le dará un muro de advertencias, que puede ser ignorado con seguridad.

Instalar dt-blob.bin

sudo cp dt-blob-disp1-cam1_pccb.dtb /boot/dt-blob.bin

Y reiniciar.

Prueba

los pines 26 y 27 están ahora configurados como pines de salida, y son conducidos a nivel bajo:

imagen

vcgencmd get_camera

rendimientos:

soportado=1 detectado=1

imagen

Puedes tomar una foto fija usando:

raspistill -v -o prueba.jpg

(¡No olvides habilitar la cámara con raspi-config también!)

Transmisión de vídeo

Un pequeño consejo extra. En tu Pi, puedes iniciar un stream usando:

raspivid -o - -t 0 -hf -w 800 -h 400 -fps 24 |cvlc -vvv -h264-fps=24 stream:///dev/stdin -sout '#standard{access=http,mux=ts,dst=:8160}' :demux=h264

Ten en cuenta el -fps 24 y -h264-fps=24 tanto en raspivid como en cvlc, para sincronizar sus velocidades de fotogramas.

imagen

imagen

utilizar VLC para ver el flujo (utilizando la IP de su placa de computación):

imagen

imagen

Mostrar

La pantalla también requiere el dt-blob.bin.

Utilicé una fuente de alimentación externa para alimentar la pantalla, en una revisión del PCCB tendremos alimentación de +5 V en un cabezal para usar con la pantalla.

Hay que tener en cuenta que no pude utilizar el cable flexible de la cámara para hacer funcionar la pantalla, sino que hubo que conectarla con su propio cable (corto).

Secuencio la alimentación primero a la pantalla, luego al PCCB

El tacto funciona.

b2461dd4-c434-4882-b277-baab25b705eeb700c161-0009-4e3f-ba0b-5759cfdbe78cadd6926c-45c2-4293-a506-3f2fdd8d752f

Pantalla y cámara juntas

Esto también funciona, el flujo de la cámara también se muestra en vivo en la pantalla.

Imagen de WhatsApp 2020-09-01 a las 21.01.21Imagen de WhatsApp 2020-09-01 a las 21.01.20

imagen

Errores

cuando se ejecuta

raspistill -v -o prueba.jpg

...obtendrás:

mmal_vc_component_create: fallo al crear el componente 'vc.ril.camera' (1:ENOMEM)

también

vcgencmd get_camera

mostrará cualquiera de los dos:

soportado=0 detectado=0

o

soportado=1 detectado=0

Si está soportado=0 debe comprobar si su dt-blob.bin está instalado correctamente en /boot.

Si se detecta=0, debes verificar que los pines GPIO están configurados correctamente en el dt-blob.bin.

Asegúrese también de que la cámara está activada mediante raspi-config.

Orientación correcta de la flexión

Los cables flexibles tienen que estar orientados correctamente para hacer la conexión. Puedes echar un vistazo al pinout, y ver si los pines GND y +3V3 se comportan como se espera, o si no hay conexión / no hay tensión.

Servicio de pi3g

Podemos poner en marcha su hardware, ofrecerle servicios de consultoría o desarrollar hardware y software Raspberry Pi a medida. contacte con nosotros hoy mismo.

Ref