Hoe de camera en het display op een computermodule carrierboard tevoorschijn te halen
Wij hebben onze eigen Compute Module Carrier Board ontwikkeld, PCCB genaamd. Het is compatibel met de Raspberry Pi Compute Modules 1 - 3 Plus, en heeft een aantal zeer nuttige functies voor industrieel gebruik (RS232, CAN Bus, RS485, TPM, DC/DC Stepdown).
Vandaag heb ik de camera en 7'' display interface geverifieerd die we ook op de printplaat hebben.
Let op de DISP1 en CAM1 aansluitingen.
Achtergrondkennis over de camera
De cameramodule heeft twee extra GPIO-pennen. Deze worden aangeduid als:
- CAM_IO0 of CAM_GPIO / CAMERA_0_SHUTDOWN
- CAM_IO1 of LED-lijn / CAMERA_0_LED
CAM_IO0 wordt gebruikt om de camera aan te sturen, en aan / uit te zetten, wanneer dat nodig is. Dit kan niet handmatig worden gedaan door de pin hoog te zetten tijdens runtime - de VideoCore Blob moet in staat zijn dit te doen.
(het is mogelijk om dit altijd op hoog te zetten, maar dan blijft de camera onder stroom en wordt er meer stroom verbruikt).
De CAM_IO1 (LED Line) werd eerder op de camera v1 gebruikt om de LED aan te sturen. Het is niet in gebruik op Raspberry Pi Camera v2, volgens Raspberry Pi ingenieurs.
De pinout van de camera connector (op zowel de Raspberry Pi Camera als ons bord) is:
- 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
De camera zal meestal de interne I2C bus gebruiken (SDA0 en SCL0 beschikbaar, bijvoorbeeld op GPIO0 en GPIO1)
Schema's
Dit zijn de schema's van onze hardware layout:
Zoals u kunt zien (en zoals eerder besproken), gebruiken we GPIO_27 als CAM_IO0 en GPIO_26 als CAM_IO1.
Het display heeft geen extra GPIO-pinnen nodig.
Zowel het display als de camera gebruiken de interne I2C-bus, op de pennen GPIO_1 en GPIO_0.
dt-blob.bin
Dit bestand is een optioneel onderdeel van de Raspberry Pi opstartbestanden. Het wordt geplaatst in /boot en overschrijft een ingebouwde dt-blob.bin die gecompileerd is in start.elf.
Het communiceert de GPIO pin instellingen naar de firmware die op de VideoCore draait (VCOS, Video Core OS). Aangezien Compute Module Carrier boards, zoals de onze, vaak aangepaste pin setups zullen hebben, deze dt-blob.bin moet worden verstrekt.
Hier is meer informatie over dit bestand, inclusief een stap voor stap opstartproces:
- https://www.raspberrypi.org/documentation/hardware/computemodule/cm-peri-sw-guide.md
- https://www.raspberrypi.org/documentation/configuration/pin-configuration.md
Raspberry Pi levert de broncode voor verschillende mogelijke opstellingen met de dt-blob.bin hier:
Ik heb het dt-blob-disp1-cam1.dts bestand als bron geselecteerd en het hernoemd naar dt-blob-disp1-cam1_pccb.dts.
U kunt het originele bronbestand van Raspberry Pi hier downloaden:
Dit bestand moet worden aangepast om onze keuze van GPIO pinnen weer te geven (die op hun beurt de VideoCore Firmware in staat stellen de camera aan te zetten en ermee te praten).
Dit bronbestand bevat configuraties voor veel verschillende Pi-modellen. Wij zijn alleen geïnteresseerd in de configuraties voor de rekenmodule: pins_cm3 en pins_cm
(Merk op dat uw regelnummers er met enkele tellers naast kunnen zitten, aangezien ik enkele bijkomende dingen in het bestand heb opgenomen die niet relevant zijn voor onze bespreking hier).
Hier moet je vier regels aanpassen. In onze specifieke (!) hardware opstelling, wijzigde ik:
naar
en
naar:
Dezelfde wijzigingen moeten worden aangebracht voor CM3 en 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 = "intern";
nummer = ;
};
pin_define@CAMERA_0_SHUTDOWN {
type = "intern";
nummer = ;
};
pin_define@CAMERA_0_UNICAM_PORT {
type = "intern";
nummer = ;
};
Merk op dat u ook de mogelijkheid hebt om een andere CAMERA_0_I2C_PORT en CAMERA_0_SDA_PIN / CAMERA_0_SCL_PIN te gebruiken als uw hardware-instelling dit vereist.
Hetzelfde geldt voor het display, er zijn DISPLAY_SDA, DISPLAY_SCL, DISPLAY_I2C_PORT entries die kunnen worden gewijzigd.
In ons geval heb ik ze op de standaardwaarde gelaten, omdat ons bord zo is ontworpen.
Compileer dit bestand
Op de pi, draai:
sudo dtc -I dts -O dtb -o dt-blob-disp1-cam1_pccb.dtb dt-blob-disp1-cam1_pccb.dts
Dit zal u een muur van waarschuwingen geven, die veilig genegeerd kunnen worden.
Installeer dt-blob.bin
sudo cp dt-blob-disp1-cam1_pccb.dtb /boot/dt-blob.bin
En opnieuw opstarten.
Test
de pennen 26 en 27 zijn nu ingesteld als uitgangspennen, en worden laag gestuurd:
vcgencmd get_camera
opbrengsten:
ondersteund=1 gedetecteerd=1
Je kunt een foto nemen:
raspistill -v -o test.jpg
(Vergeet niet om de camera ook in te schakelen met raspi-config!)
Video streaming
Een kleine bonus tip. Op je Pi, kun je een stream starten met:
raspivid -o -t 0 -hf -w 800 -h 400 -fps 24 |cvlc -vv -h264-fps=24 stream:///dev/stdin -sout '#standard{access=http,mux=ts,dst=:8160}' :demux=h264
Let op de -fps 24 en -h264-fps=24 voor zowel raspivid als cvlc, om hun framerates te synchroniseren!
gebruik VLC om de stream te bekijken (met het IP van je rekenbord):
Weergave
Het scherm heeft ook de dt-blob.bin nodig.
Ik heb een externe voedingsbron gebruikt om het display te voeden, in een revisie van de PCCB zullen we +5 V voeding op een header hebben voor gebruik met het display.
Merk op dat ik de flexibele kabel van de camera niet kon gebruiken om het display werkend te krijgen; het moest worden aangesloten met zijn eigen (korte) kabel.
Ik leid de stroom eerst naar het scherm, dan naar de PCCB
Aanraken werkt.
Beeldscherm & camera samen
Dit werkt ook, de camerastream wordt ook live op het display weergegeven.
Fouten
wanneer hij draait
raspistill -v -o test.jpg
krijg je:
mmal_vc_component_create: mislukt om component 'vc.ril.camera' aan te maken (1:ENOMEM)
ook
vcgencmd get_camera
zal ofwel:
ondersteund=0 gedetecteerd=0
of
ondersteund=1 gedetecteerd=0
Indien ondersteund=0 moet u controleren of uw dt-blob.bin correct geïnstalleerd is in /boot.
Indien gedetecteerd=0, moet u controleren of de GPIO pinnen juist zijn ingesteld in de dt-blob.bin.
Zorg er ook voor dat de camera geactiveerd is met raspi-config.
Juiste flex oriëntatie
De flex kabels moeten goed georiënteerd zijn om verbinding te maken. U kunt de pinout bekijken, en zien of de GND en +3V3 pinnen zich gedragen zoals verwacht, of dat er geen verbinding / geen spanning is.
Service door pi3g
Wij kunnen uw hardware voor u klaarzetten, adviesdiensten aanbieden of Raspberry Pi-hardware en -software op maat ontwikkelen. neem dan vandaag nog contact met ons op.
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 (dit heeft de uitleg over waar de CAM_IO0 en CAM_IO1 lijnen voor gebruikt worden)
- https://raspberrypi.stackexchange.com/questions/72549/how-can-i-enable-both-the-cameras-on-the-compute-module-3