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.
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)
Esquemas
Estos son los esquemas de nuestra disposición de hardware:
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:
- https://www.raspberrypi.org/documentation/hardware/computemodule/cm-peri-sw-guide.md
- https://www.raspberrypi.org/documentation/configuration/pin-configuration.md
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
(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:
a
y
a:
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
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:
vcgencmd get_camera
rendimientos:
soportado=1 detectado=1
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.
utilizar VLC para ver el flujo (utilizando la IP de su placa de computación):
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.
Pantalla y cámara juntas
Esto también funciona, el flujo de la cámara también se muestra en vivo en la pantalla.
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
- https://raspberrypi.stackexchange.com/questions/95420/raspivid-es-out-set-group-pcr-is-called-too-late-stream-keeps-freezing
- https://www.raspberrypi.org/documentation/hardware/display/
- https://raw.githubusercontent.com/raspberrypi/documentation/master/hardware/computemodule/dt-blob-disp1-cam1.dts
- https://www.raspberrypi.org/forums/viewtopic.php?t=164987 (esto tiene la explicación sobre para qué se usan las líneas CAM_IO0 y CAM_IO1)
- https://raspberrypi.stackexchange.com/questions/72549/how-can-i-enable-both-the-cameras-on-the-compute-module-3