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.
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)
Schematische Darstellung
Dies sind die Schaltpläne unseres Hardware-Layouts:
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:
- https://www.raspberrypi.org/documentation/hardware/computemodule/cm-peri-sw-guide.md
- https://www.raspberrypi.org/documentation/configuration/pin-configuration.md
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
(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:
zu
und
zu:
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
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:
vcgencmd get_camera
Erträge:
unterstützt=1 erkannt=1
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!
Verwenden Sie VLC, um den Stream anzuschauen (unter Verwendung der IP Ihres Compute Boards):
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.
Display und Kamera zusammen
Das funktioniert auch, der Kamerastream wird auch live auf dem Display angezeigt.
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
- 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 (hier wird erklärt, wofür die Leitungen CAM_IO0 und CAM_IO1 verwendet werden)
- https://raspberrypi.stackexchange.com/questions/72549/how-can-i-enable-both-the-cameras-on-the-compute-module-3