Comment faire apparaître la caméra et l'écran sur une carte de support de module de calcul

Nous avons développé notre propre Compute Module Carrier Board, appelée PCCB. Elle est compatible avec les Raspberry Pi Compute Modules 1 - 3 Plus, et possède un certain nombre de fonctionnalités très utiles pour une utilisation industrielle (RS232, CAN Bus, RS485, TPM, DC/DC Stepdown).

Aujourd'hui, j'ai vérifié la caméra et l'interface d'affichage 7'' que nous fournissons également sur la carte.

Bild 1 Szene 1

Notez les connecteurs DISP1 et CAM1.

Connaissances de base sur la caméra

Le module caméra possède deux broches GPIO supplémentaires. Elles sont désignées :

  • CAM_IO0 ou CAM_GPIO / CAMERA_0_SHUTDOWN
  • CAM_IO1 ou Ligne LED / CAMERA_0_LED

CAM_IO0 est utilisée pour piloter la caméra, et l'allumer ou l'éteindre, lorsque cela est nécessaire. Cela ne peut pas être fait manuellement en mettant la broche en haut au moment de l'exécution - le Blob VideoCore doit être capable de le faire.

(il est éventuellement possible de le mettre en permanence en position haute, mais cela laissera la caméra sous tension et augmentera la consommation d'énergie).

Le CAM_IO1 (LED Line) était utilisé sur la caméra v1 précédemment pour piloter la LED. Elle n'est pas utilisée sur la caméra Raspberry Pi v2, selon les ingénieurs de Raspberry Pi.

Le brochage du connecteur de la caméra (à la fois sur la caméra Raspberry Pi et sur notre carte) est le suivant :

  • 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 caméra utilise généralement le bus I2C interne (SDA0 et SCL0 disponibles, par exemple, sur GPIO0 et GPIO1).

image

Schémas

Voici les schémas de notre disposition matérielle :

image

Comme vous pouvez le voir (et comme discuté précédemment), nous utilisons GPIO_27 comme CAM_IO0 et GPIO_26 comme CAM_IO1.

L'écran n'a pas besoin de broches GPIO supplémentaires.

L'écran et la caméra utilisent le bus I2C interne, sur les broches GPIO_1 et GPIO_0.

dt-blob.bin

Ce fichier est une partie optionnelle des fichiers de démarrage du Raspberry Pi. Il est placé dans /boot et remplace un dt-blob.bin intégré qui est compilé dans start.elf.

Il communique la configuration des broches GPIO au firmware fonctionnant sur le VideoCore (VCOS, Video Core OS). Comme les cartes porteuses de modules de calcul, telles que la nôtre, auront des configurations de broches personnalisées, fréquemment, ce dt-blob.bin doit être fourni.

Voici plus d'informations sur ce fichier, y compris un processus de démarrage étape par étape :

Raspberry Pi fournit la source de plusieurs configurations possibles avec le fichier dt-blob.bin ici :

J'ai sélectionné le fichier dt-blob-disp1-cam1.dts comme source et l'ai renommé en dt-blob-disp1-cam1_pccb.dts.

Vous pouvez télécharger le fichier source original de Raspberry Pi ici :

Ce fichier doit être modifié pour refléter notre choix de broches GPIO (ce qui permettra au Firmware de VideoCore d'alimenter la caméra et de lui parler).

Ce fichier source comprend des configurations pour de nombreux modèles de Pi différents. Nous sommes intéressés par les configurations du module de calcul uniquement : pins_cm3 et pins_cm

image

image

(Notez que vos numéros de ligne peuvent être décalés de quelques compteurs, car j'ai inclus des éléments supplémentaires dans le fichier qui ne sont pas pertinents pour notre discussion ici).

Ici, vous devez modifier quatre lignes. Dans notre configuration matérielle spécifique ( !), j'ai modifié :

image

à

image

et

image

à :

image

Les mêmes modifications doivent être appliquées pour le CM3 et le CM.

pin@p26 { function = "output" ; termination = "no_pulling" ; } ; // CAMERA 0 LED
pin@p27 { function = "output" ; termination = "no_pulling" ; } ; // CAMERA 0 SHUTDOWN

(...)

pin_define@CAMERA_0_LED {
    type = "interne" ;
    nombre = ;
};
pin_define@CAMERA_0_SHUTDOWN {
    type = "interne" ;
    nombre = ;
};
pin_define@CAMERA_0_UNICAM_PORT {
    type = "interne" ;
    nombre = ;
};

Notez que vous avez également la possibilité d'utiliser une CAMERA_0_I2C_PORT et un CAMERA_0_SDA_PIN / CAMERA_0_SCL_PIN différents si votre configuration matérielle le nécessite.

Il en va de même pour l'affichage, il existe des entrées DISPLAY_SDA, DISPLAY_SCL, DISPLAY_I2C_PORT qui peuvent être modifiées.

Dans notre cas, je les ai laissés par défaut, car c'est ainsi que notre tableau est conçu.

Compiler ce fichier

Sur le pi, exécutez :

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

image

Cela vous donnera un mur d'avertissements, que vous pouvez ignorer sans risque.

Installer dt-blob.bin

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

Et rebooter.

Test

les broches 26 et 27 sont maintenant configurées en tant que broches de sortie, et sont pilotées à bas niveau :

image

vcgencmd get_camera

rendements :

supporté=1 détecté=1

image

Vous pouvez prendre une photo en utilisant :

raspistill -v -o test.jpg

(N'oubliez pas d'activer la caméra en utilisant raspi-config aussi !)

Streaming vidéo

Un petit conseil bonus. Sur votre Pi, vous pouvez démarrer un flux en utilisant :

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

Notez le -fps 24 et -h264-fps=24 à raspivid et cvlc, pour synchroniser leurs framerates !

image

image

utiliser VLC pour visionner le flux (en utilisant l'IP de votre compute board) :

image

image

Afficher

L'affichage nécessite également le dt-blob.bin.

J'ai utilisé une source d'alimentation externe pour alimenter l'écran, dans une révision du PCCB nous aurons une alimentation +5 V sur un header pour une utilisation avec l'écran.

Veuillez noter que je n'ai pas pu utiliser le câble flexible de la caméra pour faire fonctionner l'écran ; il a dû être connecté à l'aide de son propre câble (court).

Je séquence l'alimentation d'abord vers l'écran, puis vers le PCCB.

Le toucher fonctionne.

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

Écran et caméra réunis

Cela fonctionne également, le flux de la caméra est également affiché en direct sur l'écran.

Image WhatsApp 2020-09-01 à 21.01.21Image WhatsApp 2020-09-01 à 21.01.20

image

Erreurs

en cours d'exécution

raspistill -v -o test.jpg

vous obtiendrez :

mmal_vc_component_create : échec de la création du composant 'vc.ril.camera' (1:ENOMEM)

également

vcgencmd get_camera

affichera soit :

supporté=0 détecté=0

ou

supporté=1 détecté=0

Si supporté=0, vous devriez vérifier si votre dt-blob.bin est installé correctement dans /boot.

Si détecté=0, vous devez vérifier que les broches GPIO sont configurées correctement dans le dt-blob.bin.

Assurez-vous également que la caméra est activée à l'aide de raspi-config.

Orientation correcte des flexibles

Les câbles flexibles doivent être orientés correctement pour établir la connexion. Vous pouvez jeter un coup d'oeil au brochage, et voir si les broches GND et +3V3 se comportent comme prévu, ou s'il n'y a pas de connexion / pas de tension.

Service par pi3g

Nous pouvons installer votre matériel pour vous, offrir des services de conseil ou développer du matériel et des logiciels Raspberry Pi sur mesure. contactez-nous dès aujourd'hui.

Réf.