Posted on Leave a comment

Lattice VIP IMX214/CrossLink issues

Overview

The imx214 sensors are configured using the ‘default’ sequence from the reference design, but at a lower PLL frequency around 54 MHz. Both sensors are started synchronously.

Single camera configuration

This setup uses the single camera bit file provided from Helion Vision.

  • Framing errors occur early in the entire video stream, then it runs stable for a very long time (recorded up to 150’000 frames)

Dual camera configuration

This setup uses the stereo camera reference design from the Lattice website (DualCSI2toRaw10_impl1.bit).

Color shifts
Bayer pattern offsets

Issues:

  • Framing very unstable, right image shows interesting color shift
  • Offset changing from frame to frame, displaying as above

Further analysis

The reason for the occuring DEMUX errors from the JPEG encoder is occasional invalid framing. Frames are then dropped and the image is out of sync.

Possibilities:

  1. Framing from sensor is wrong (critical sensor configuration mode)
  2. Framing from Sensor correct, but translation hickups inside CrossLink
  3. Irregular timing (too short Hblank time) stressing the JPEG encoder FIFOs

(1) can not be verified without a MIPI timing debugger. (2) can not be simulated due to closed source of CrossLink Firmware.

For (3), the LINE_VALID (blue) and FRAME_VALID (yellow) signals, both routed to external debug header display as follows:

IMX214 sensor framing via CrossLink

The above behaviour of two subsequent pixel lines with short blanking time occur in the current Stereo and single sensor CrossLink firmware configuration.

Potential remedies

Sorted by ascending complexity:

  • Find magic setting for more regular MIPI data transfer
  • Use another sensor (parallel interface)
  • Try to fix irregular timing by a ‘sanity checker’ interface with line buffer
  • Revisit Crosslink firmware (consider fixes by third party)
Posted on Leave a comment

Lattice VIP MJPEG Inbetriebnahme

Das von Lattice Semiconductor zu einem Spezialpreis von 199 USD angebotene Entwicklungs-Kit (Embedded Vision Development Kit) oder auch VIP ist eine vollwertige Stereokamera für die Entwicklung von Standard-Vision-Anwendungen auf Basis der FPGA-Familie ECP5 und CrossLink von Lattice. Es bietet als optionale Erweiterung ein Zusatzboard mit GigE-fähigem Netzwerkstecker und USB 3.0 kompatiblen Cypress FX3 Chipsatz an.

Der Bild-Erfassungs-Teil des VIP ist mit zwei Rolling-Shutter Sensoren IMX214 von Sony ausgestattet, deren Bilddaten über einen ebenfalls von Lattice stammenden CrossLink-Baustein vom schwierig zu handhabenden MIPI-Interface in einen parallelen Video-Strom umgewandelt werden. Dabei gibt es unterschiedliche Firmware für den Crosslink:

  1. Stereo-Modus: Beide Sensorenbilder werden on-chip zusammengefügt, die Fenstergrösse halbiert
  2. Monokel-Modus: Nur die Bilddaten eines Sensors (CN2) werden weitergeleitet

Die entsprechenden Bit-Files sind bei Lattice nach Registrierung zum Download verfügbar [ Link ]

JPEG-Streaming

Genau wie beim älteren Entwicklerkit HDR60 von Lattice ist auch hier eine Motion-JPEG-Demo-Firmware verfügbar, welche auf der bewährten gstreamer-Referenzumgebung für den Empfang von Video mit niedriger Latenz basiert.

Dazu wird zunächst ein Script für den Empfang erstellt:

caps="application/x-rtp, media=\(string\)video,"
caps="$caps clock-rate=\(int\)90000,"
caps="$caps encoding-name=\(string\)JPEG"

gst-launch-1.0 -v udpsrc \
caps="$caps" \
port=2020 \
! rtpjpegdepay \
! jpegdec \
! autovideosink

Beim Aufruf dieses Scripts unter Linux wie unter Windows startet gstreamer eine RTP-Empfängerpipeline und zeigt den Videostrom an, sobald dieser eintrifft. Dieser muss zunächst am VIP konfiguriert werden

Anleitung

  1. USB-Programmier-Kabel  verbinden, Terminal-Programm konfigurieren: 115200 bps, 8N1
  2. Unter Linux mit /dev/ttyUSB1 verbinden
  3. Bit-File per Diamond-Programmer auf den Target laden
  4. Im Terminal die IP-Adresse des Empfängers konfigurieren:
    r 192.168.0.2
  5. ARP-Antwort abwarten:
    # Got ARP reply: 44 ac de ad be ef
  6. JPEG-Video starten, z.b. in 1920×1080 bei 12fps:
    j 4

Falls der JPEG-Strom abreisst, ist dafür meistens ein Engpass im Encoding dafür verantwortlich. Da JPEG über keine eingebaute Rate-Control verfügt, kann in der Demo das System u.U. zum Stillstand gebracht werden, z.B. indem ein buntes Tuch vor die Kamera gehalten wird. Das detaillierte Muster ist in der Regel schlechter zu komprimieren und kann so eine Verstopfung im Datenfluss verursachen.

Der JPEG-Encoder meldet diese Fehler unmittelbar und bricht in dieser Demo ab. Zu den detaillierten Fehlermeldungen konsultieren Sie bitte die Dokumentation zum MJPEG Encoder.

Konfiguration der Sensor-Parameter

Per i2c-Bus können die angeschlossenen Sensoren konfiguriert werden. Dies geschieht über das ‘i’-Kommando. Dessen Funktion ist von der Anzahl der Parameter abhängig:

# i2c-Bus scannen:

i

# i2c-Register abfragen (Registerwerte hexadezimal):

i 100

# i2c-Register setzen

i 100 1

Einige vereinfachte Kommandos zur Sensorenkonfiguration (auch hier alle Werte in Hexadezimalform):

Funktion

Kommando
se [Wert] Belichtungszeit
sh [HDR_modus] Belichtungszeit
sr [Gain] Verstärkung (Gain) rot
sg [Gain] Verstärkung grün
sb [Gain] Verstärkung blau

Probleme und Lösungen

  • Video startet nicht:
    1. Fehlermeldungen an Konsole überprüfen
    2. Überprüfen, ob orange LED am GigE-Board Aktivität anzeigt
    3. Wireshark zur Aufzeichnung der Aktivität am Netzwerk benutzen
  • Video startet, aber reisst ab:
    1. Fehlerbits an Konsole überprüfen: [DEMUX], [FIFO], …
    2. Qualitätswert vergrössern:
      q 30
    3. Netzwerkverkehr mit Wireshark und RTP-Parser überprüfen. Gehen Pakete verloren?
    4. Direktverbindung zwischen VIP und PC nutzen (kein zwischengeschalteter Router)
  • Video fehlerhaft:
    1. Fehlerbits an Konsole überprüfen. DEMUX-Fehler dürfen sporadisch (bis zu fünf mal) auftreten, bevor der Video-Strom terminiert wird.