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.

Bild 1 Szene 1

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)

afbeelding

Schema's

Dit zijn de schema's van onze hardware layout:

afbeelding

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:

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

afbeelding

afbeelding

(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:

afbeelding

naar

afbeelding

en

afbeelding

naar:

afbeelding

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

afbeelding

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:

afbeelding

vcgencmd get_camera

opbrengsten:

ondersteund=1 gedetecteerd=1

afbeelding

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!

afbeelding

afbeelding

gebruik VLC om de stream te bekijken (met het IP van je rekenbord):

afbeelding

afbeelding

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.

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

Beeldscherm & camera samen

Dit werkt ook, de camerastream wordt ook live op het display weergegeven.

WhatsApp Afbeelding 2020-09-01 om 21.01.21WhatsApp Afbeelding 2020-09-01 om 21.01.20

afbeelding

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