STM32F407 + Kamera (OV7670) + Ethernet stream

OP #3181790
Lesenswert?

Hallo,
ich habe momentan das Problem die Kamera (OV7670) per Ethernet (UDP) zu 
stream.

Ich nutze momentan die Demosoftware und kann eine einfache UDP 
Verbindung (Server) aufbauen, nun möchte ich die Kamera daten als JPEG 
Format senden.

Könnt ihr mir bitte dabei helfen? Ich habe die Demo Software auf Dropbox 
hochgeladen 
->https://www.dropbox.com/sh/x74c963dkxyct74/3oCAFAA8dq?v=0mcn

Wie könnte ich die Daten vom Kamera auslesen und per UDP senden?

Ich würde mich sehr freuen wenn ihr mir helfen könnt?

Vielen Dank
OP #3182478
Lesenswert?

Hallo Uwe,

ich habe bereits ein Demo Software welche die Kamera zum laufen bekommt 
und diese an dem Display ausgibt.

Es gibt eine Funktion "DCMI_JPEGCmd" welche warscheinlich die Daten 
daten als JPG bereit stellt. Nur finde ich die Demo Software so komplex, 
dass ich die einzelnen schritte nicht ganz verstehe.

Die Daten werden vom Kamera über die DMA gesendet an das Display 
gesendet, ich wüsste momentan nicht wie ich den DMA Stream abfangen und 
als UDP Paket versenden soll?? :(

Freundliche Grüße
#3182606
Lesenswert?

>Es gibt eine Funktion "DCMI_JPEGCmd" welche warscheinlich die Daten
>daten als JPG bereit stellt.

das Datenblatt vom OV7670 sagt
das Output-Format ist RGB oder YUV (in versch. Modes)

und das die DCMI-Schnittstelle vom STM32 autom.
in JPG wandelt halte ich für unwahrscheinlich

>ich wüsste momentan nicht wie ich den DMA Stream abfangen und
>als UDP Paket versenden soll

die Kamera hat ein "Einzelbild-Mode"
in dem nur ein einzelnes Frame übertragen wird

du könntest als Ziel beim DMA statt dem Display
eine RAM-Adresse angeben, dann wäre das Bild erstmal im RAM
(allerdings brauchst du genügend RAM für ein Bild :-)

den RAM Block müsstest du dann per UDP versenden

was hast du den als "Gegenstelle" bzw. wo sollen die Bilder
angezeigt werden ?

Gruss Uwe
OP #3182633
Lesenswert?

Vielen dank für dein Tipp.

Die gegenstelle könnte VLC Player sein, nur ist für mich hierbei die 
Herausforderung die Frames bzw. einzelnen Bilder in die SRAM zubekommen.

Müsste die Einstellung unter dcmi_OV7670.c vorgenommen werden?

---------------------------------------------------
 /* DMA2 Stream1 Configuration */
  DMA_DeInit(DMA2_Stream1);

  DMA_InitStructure.DMA_Channel = DMA_Channel_1;
  DMA_InitStructure.DMA_PeripheralBaseAddr = DCMI_DR_ADDRESS;
  DMA_InitStructure.DMA_Memory0BaseAddr = FSMC_LCD_ADDRESS; //Hier die 
änderung?
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
  DMA_InitStructure.DMA_BufferSize = 0xfffe;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
  DMA_InitStructure.DMA_PeripheralDataSize = 
DMA_PeripheralDataSize_Word;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable;
  DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
  DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
  DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;

  DMA_Init(DMA2_Stream1, &DMA_InitStructure);
-----------------------------------------------------

Speicher hätten wir unter SRAM 192 kByte zur verfügung.

Schöne Grüße
#3182693
Lesenswert?

1
DMA_InitStructure.DMA_MemoryInc

das hier muss noch auf "enable" eingestellt werden
sonst schreibt er alle Daten in eine Adresse

ich hab sowas schon mal gemacht (für eine OV9655)
und kann heut abend mal nach dem Code schauen
um das Einzelbild aufzunehmen...das hab ich nicht mehr im Kopf

für ein Bild brauchst du 320x240x16 = 150 KByte
(also mehr als ein Bild passt in deinen Speicher nicht rein :-)

der VLC Player erwartet allerdings vermutlich einen MPEG-Stream
und wie der aufgebaut ist kann ich dir nicht sagen
(ob es da ein Plugin für RGB gibt ?)

das wird nicht so trivial...

kannst du die Gegenstelle selbst programmieren ? (z.B. .NET)
dann könntest du die Roh-Daten
direkt anzeigen und müsstest sie nicht erst umformatieren

Gruss Uwe
OP #3182767
Lesenswert?

Die Gegenstelle dürfte kein Problem sein, diese würde ich noch schaffen 
ob mit Java oder C++:-)

Ich würde mich riesig freuen, wenn du die Codestelle bzw. Projekt von 
dir damals nähr bringen könntest. Ich versuche zwischenzeitlich das mit 
SRAM "zwischenspeichern" umzusetzen, ob es klappt ist eine andere 
Frage... :-)

Freundliche Grüße

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren