Posted on

netpp node ‚Dual‘ Firmware

Die netpp-Firmware besteht aus einem binären Abbild im Konfigurations-Flash, welche die Funktionalität und Identität der auf dem netpp node programmierbaren Hardware definiert. Sie unterstützt von Haus aus die Möglichkeit, zwei Varianten einer Firmware und des zugehörigen Betriebssystems zu speichern. Die Möglichkeiten dieser doppelten Konfiguration sind im netpp node quick start (englisch) beschrieben und werden hier im Detail erläutert.

Wir verwenden im Folgenden die Begriffe ‚Slot‘ (Steckplatz) für den Speicherplatz der Konfiguration.

Im Standard-Fall wird der netpp node mit einem Bootloader in Slot 0 beim Einstecken der Stromversorgung gestartet. Der Bootloader überprüft die im Flash gespeicherte Variable ‚SysCtrl.BootMode‘, falls sie von 0 abweicht, wird das System neu gestartet und die Hardware/Software-Konfiguration aus Slot 1 geladen.

Durch eine ungünstige Konfiguration oder beim Ausprobieren neuer Firmware-Versionen kann u.U. das System nicht mehr zugänglich für eine Neukonfiguration sein. Deshalb lässt sich der netpp node wie folgt  in den Urzustand versetzen:

  1. SW2 drücken und halten
  2. SW1 kurz drücken, warten bis alle LEDs kurz aufleuchten
  3. SW2 loslassen

Im Urzustand gilt die netpp URL: UDP:192.168.0.5:2016

Wichtig: Der Urzustand sollte nicht im aktiven Fabrik-Netz bei mehreren nodes hergestellt werden, da sonst Adresskollisionen auftreten können.

Bootloader

Der Bootloader bietet minimale Funktionalität:

  • Programmierung der Netzwerkparameter
  • Flash-Zugriff zum Update der Firmware per Netzwerk

Normalerweise enthält auch die komplexere, kundenspezifische Firmware die Bootloader-Komponenten im ‚Service-Modus‘, damit Neuprogrammierung aus dem laufenden Betrieb heraus erfolgen kann, ohne den Urzustand herstellen zu müssen.

Wird der Bootloader durch Überschreiben des entsprechenden Flash-Speichers beschädigt, startet das System nicht und besitzt keine Identität, über die es per Netzwerk angesprochen werden kann. Dann ist Neuprogrammierung über den Programmieradapter (bzw. eingebauten USB-Adapter, falls vorhanden) notwendig.

Szenarien

Prototyping-Modus

Bevor die Firmware in der Anlage final eingesetzt wird, empfiehlt es sich, SysCtrl.BootMode auf 0 zu lassen (Standard-Auslieferung), die zu testende Firmware in Slot 1 zu programmieren und explizit zu booten. Dies geschieht, indem die Property SysCtrl.Reboot auf ‚1‘ gesetzt wird, z.B. per Kommandozeile:

netpp UDP:192.168.0.22:2016 SysCtrl.Reboot 1

Beim nächsten Reset oder Unterbruch der Stromversorgung startet das System wieder aus Slot 0.

Soll schliesslich das System automatisch in Slot 1 buchen, sind die netpp-Properties wie folgt zu setzen:

SysCtrl.BootMode  1
SysCtrl.StoreNV   1

Wird anschliessend SysCtrl.Reboot auf 0 gesetzt (Slot 0), bootet das System zwar zunächst in Slot 0, lädt aber bei korrekter Firmware in Slot 1 diese nach.

Redundante Firmware

Sicherheitsrelevante Firmware benutzt u.U. einen Hardware-Watchdog, um bei einem Programmfehler oder unerlaubter Intrusion einen Neustart auszulösen. Dabei wird der Reset aus Slot 0 ausgeführt.

Da der Bootloader durch eigene, angepasste Firmware ersetzt werden kann, sind folgende Szenarien möglich:

  • Safety-Konfiguration: BootMode = 1
    • ‚Goldene‘ Firmware in Slot 0: Bei einem Fehler wird auf diese Version ‚zurückgefallen‘ (Fail-Safe)
    • ‚Aktive‘ Firmware in Slot 1: Diese Version wird im laufenden Betrieb genutzt
  • Test-Konfiguration: BootMode = 0
    • ‚Aktive‘, stabile Firmware in Slot 0
    • Test-Firmware (in Entwicklung) in Slot 1

Da die Konfigurationslogik aus der Bootloader-Routine angesprochen wird, kann sie durch den Benutzer modifiziert werden, so sind also eigene Konfigurationsoptionen möglich.

Es wird empfohlen, in der Entwicklungsphase die Bootloader-Default-Properties beizubehalten. So kann per SysCtrl.Reboot 0 oder 1 zwischen den Slots im laufenden Betrieb umgeschaltet werden.

Fehlerszenarien

  • Bei SysCtrl.BootMode 1 und aktivem Watchdog in Slot 1 können im Prinzip Endlos-Neustart-Schleifen auftreten. Diese können durch SW2 unterbrochen werden, d.h. das System startet dann mit Slot 0.
  • Wenn im Wartungs-Modus (ServiceMode.ChallengeResponse) die IP-Adresse verändert wird, kann u.U. beim Zusammenbrechen der Verbindung das Gerät aus Sicherheitsgründen nicht mehr ansprechbar sein. In diesem Fall ist ein Reset (SW1) notwendig.
Posted on

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.