Einschalten der Kamera und des Displays auf einer Computermodul-Trägerkarte

Wir haben unser eigenes Compute Module Carrier Board, genannt PCCB, entwickelt. Es ist kompatibel mit den Raspberry Pi Compute Modules 1 - 3 Plus und verfügt über eine Reihe von sehr nützlichen Funktionen für den industriellen Einsatz (RS232, CAN Bus, RS485, TPM, DC/DC Stepdown).

Heute habe ich die Kamera und die 7-Zoll-Display-Schnittstelle überprüft, die wir ebenfalls auf dem Board bereitstellen.

Bild 1 Szene 1

Beachten Sie die Anschlüsse DISP1 und CAM1.

Hintergrundwissen über die Kamera

Das Kameramodul hat zwei zusätzliche GPIO-Pins. Diese sind bezeichnet:

  • CAM_IO0 oder CAM_GPIO / CAMERA_0_SHUTDOWN
  • CAM_IO1 oder LED Zeile / CAMERA_0_LED

CAM_IO0 wird verwendet, um die Kamera anzusteuern und ein- und auszuschalten, wenn es erforderlich ist. Dies kann nicht manuell erfolgen, indem der Pin zur Laufzeit auf High gesetzt wird - der VideoCore Blob muss dazu in der Lage sein.

(Möglicherweise ist es möglich, diesen Wert immer auf "hoch" zu stellen, aber dann bleibt die Kamera eingeschaltet und der Stromverbrauch steigt).

Die CAM_IO1 (LED Line) wurde früher bei der Kamera v1 zur Ansteuerung der LED verwendet. Laut den Raspberry Pi Ingenieuren wird sie bei der Raspberry Pi Camera v2 nicht verwendet.

Die Pinbelegung des Kameraanschlusses (sowohl auf der Raspberry Pi Kamera als auch auf unserer Platine) ist:

  • 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

Die Kamera verwendet in der Regel den internen I2C-Bus (SDA0 und SCL0 sind z. B. an GPIO0 und GPIO1 verfügbar)

Bild

Schematische Darstellung

Dies sind die Schaltpläne unseres Hardware-Layouts:

Bild

Wie Sie sehen können (und wie zuvor besprochen), verwenden wir GPIO_27 als CAM_IO0 und GPIO_26 als CAM_IO1.

Das Display benötigt keine zusätzlichen GPIO-Pins.

Sowohl das Display als auch die Kamera verwenden den internen I2C-Bus an den Pins GPIO_1 und GPIO_0.

dt-blob.bin

Diese Datei ist ein optionaler Teil der Raspberry Pi-Bootdateien. Sie wird in /boot abgelegt und überschreibt die eingebaute dt-blob.bin, die in start.elf kompiliert wird.

Er kommuniziert die GPIO-Pin-Konfiguration an die auf dem VideoCore laufende Firmware (VCOS, Video Core OS). Da Compute Module Carrier Boards, wie das unsere, häufig kundenspezifische Pin-Setups haben werden, diese dt-blob.bin muss bereitgestellt werden.

Hier finden Sie weitere Informationen zu dieser Datei, einschließlich einer Schritt-für-Schritt-Anleitung zum Booten:

Raspberry Pi stellt den Quellcode für mehrere mögliche Setups mit der dt-blob.bin hier zur Verfügung:

Ich habe die Datei dt-blob-disp1-cam1.dts als Quelle ausgewählt und sie in dt-blob-disp1-cam1_pccb.dts umbenannt.

Sie können die Original-Quelldatei vom Raspberry Pi hier herunterladen:

Diese Datei muss modifiziert werden, um unsere Wahl der GPIO-Pins widerzuspiegeln (was wiederum der VideoCore-Firmware ermöglicht, die Kamera einzuschalten und mit ihr zu kommunizieren).

Diese Quelldatei enthält Konfigurationen für viele verschiedene Pi-Modelle. Wir sind nur an den Konfigurationen für das Rechenmodul interessiert: pins_cm3 und pins_cm

Bild

Bild

(Beachten Sie, dass Ihre Zeilennummern um einige Zähler abweichen können, da ich einige zusätzliche Dinge in die Datei aufgenommen habe, die für unsere Diskussion hier nicht relevant sind).

Hier sollten Sie vier Zeilen ändern. In unserem speziellen (!) Hardware-Setup habe ich geändert:

Bild

zu

Bild

und

Bild

zu:

Bild

Die gleichen Änderungen müssen sowohl für CM3 als auch für CM vorgenommen werden.

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 {
    Typ = "intern";
    Nummer = ;
};
pin_define@CAMERA_0_SHUTDOWN {
    Typ = "intern";
    Nummer = ;
};
pin_define@CAMERA_0_UNICAM_PORT {
    Typ = "intern";
    Zahl = ;
};

Beachten Sie, dass Sie auch die Möglichkeit haben, einen anderen CAMERA_0_I2C_PORT und CAMERA_0_SDA_PIN / CAMERA_0_SCL_PIN zu verwenden, wenn Ihr Hardware-Setup dies erfordert.

Das gleiche gilt für das Display, es gibt DISPLAY_SDA, DISPLAY_SCL, DISPLAY_I2C_PORT Einträge, die geändert werden können.

In unserem Fall habe ich sie auf der Standardeinstellung belassen, da unser Board so konzipiert ist.

Kompilieren Sie diese Datei

Führen Sie auf dem Pi aus:

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

Bild

Sie erhalten dann eine Reihe von Warnungen, die Sie getrost ignorieren können.

dt-blob.bin installieren

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

Und Neustart.

Test

Die Stifte 26 und 27 sind nun als Ausgangsstifte eingerichtet und werden auf "low" gesetzt:

Bild

vcgencmd get_camera

Erträge:

unterstützt=1 erkannt=1

Bild

Sie können ein Standbild verwenden:

raspistill -v -o test.jpg

(Vergessen Sie nicht, die Kamera auch mit raspi-config zu aktivieren!)

Video-Streaming

Ein kleiner Bonus-Tipp. Auf Ihrem Pi können Sie einen Stream mit starten:

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

Beachte die -fps 24 und -h264-fps=24 sowohl bei raspivid als auch bei cvlc, um ihre Frameraten zu synchronisieren!

Bild

Bild

Verwenden Sie VLC, um den Stream anzuschauen (unter Verwendung der IP Ihres Compute Boards):

Bild

Bild

Anzeige

Für die Anzeige ist auch die Datei dt-blob.bin erforderlich.

Ich habe eine externe Stromquelle für die Stromversorgung des Displays verwendet. In einer Revision der PCCB werden wir eine +5-V-Stromversorgung auf einer Stiftleiste für die Verwendung mit dem Display haben.

Bitte beachten Sie, dass ich das Flexkabel der Kamera nicht verwenden konnte, um das Display zum Laufen zu bringen; es musste mit einem eigenen (kurzen) Kabel angeschlossen werden.

Ich schalte den Strom zuerst zum Display und dann zum PCCB.

Berührung funktioniert.

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

Display und Kamera zusammen

Das funktioniert auch, der Kamerastream wird auch live auf dem Display angezeigt.

WhatsApp Bild 2020-09-01 um 21.01.21WhatsApp Bild 2020-09-01 um 21.01.20

Bild

Fehler

beim Laufen

raspistill -v -o test.jpg

erhalten Sie:

mmal_vc_component_create: Komponente 'vc.ril.camera' konnte nicht erstellt werden (1:ENOMEM)

auch

vcgencmd get_camera

wird entweder angezeigt:

unterstützt=0 erkannt=0

oder

unterstützt=1 erkannt=0

Wenn unterstützt=0, sollten Sie überprüfen, ob Ihre dt-blob.bin korrekt in /boot installiert ist.

Wenn detected=0, sollten Sie überprüfen, ob die GPIO-Pins in der Datei dt-blob.bin korrekt eingestellt sind.

Stellen Sie außerdem sicher, dass die Kamera mit raspi-config aktiviert ist.

Richtige Flex-Ausrichtung

Die Flexkabel müssen richtig ausgerichtet sein, um eine Verbindung herzustellen. Sie können einen Blick auf die Pinbelegung werfen und sehen, ob sich die GND- und +3V3-Pins wie erwartet verhalten, oder ob es keine Verbindung / keine Spannung gibt.

Dienstleistung von pi3g

Wir können Ihre Hardware für Sie in Betrieb nehmen, Beratungsdienste anbieten oder maßgeschneiderte Raspberry Pi-Hardware und -Software entwickeln. Kontaktieren Sie uns noch heute.

Ref