43376.jpg

Bild 1: Das Schaltbild der USB-Webcam-Applikation zeigt, dass der Vinculum II auch das OLED-Display ansteuert.

Bild 1: Das Schaltbild der USB-Webcam-Applikation zeigt, dass der Vinculum II auch das OLED-Display ansteuert.FTDI

Herkömmliche Webcam-Implementierungen bestehen oft aus einem Mikroprozessor und einem diskreten USB-Transceiver-IC. Leider benötigt dieses Design viel Platz auf der Platine, beträchtlich Zeit für die Entwicklung und zahlreiche Bauteile. Wer einen günstigeren Preis, eine schnellere Markteinführung und einen kleineren Formfaktor sucht, braucht eine höher integrierte und optimierte Alternative.

Das Beispiel in Bild 1 zeigt einen solchen Ansatz mit einem kombinierten USB-Host- und Slave-Controller-IC. Der Controller liest Videodaten von einer USB-Webcam, verarbeitet die Daten mit seinem 16-Bit-CPU-Core und wandelt sie in ein RGB-Format um, um das Video auf einem OLED-Display anzuzeigen. Diese Implementierung unterstützt Bildraten mit 4,4 fps (Frames pro Sekunde) und eine Auflösung von 160 mal 120 Pixel. Als Controller dient der Vinculum II von FTDI.

Hardware-Überlegungen

Die zur Implementierung der Applikation erforderliche Hardware (Bild 2) umfasst folgende Bestandteile:

Bild 2: Das Evaluierungsboard V2EVAL von FTDI mit OLED-Display eignet sich, um eigene Applikationen zu entwickeln und zu testen.

Bild 2: Das Evaluierungsboard V2EVAL von FTDI mit OLED-Display eignet sich, um eigene Applikationen zu entwickeln und zu testen.FTDI

  • V2EVAL-Board, einschließlich einem Netzteil mit 5 V und 2 A
  • 64-polige Vinculum-II-Zusatzkarte
  • OLED-Displaymodul mit Farbbildschirm (Auflösung: 160 mal 128 Pixel)
  • DC/DC-Wandler und Regler von 5 V auf 12 V (Versorgung für das OLED)
  • RGB mit 128 Dots, 262 K Farb-OLED-Displaytreiber und Controller
  • Webcam mit UVC-Support (Universal Video Class)

Die Webcam ist an den USB-Port 1 angeschlossen. Die Display-Daten- und Steuerungsleitungen werden über die GPIO-Anschlüsse des Vinculum II verwaltet. Der DC/DC-Wandler stellt 12 V für das OLED-Display bereit.

Die Gesamtstromaufnahme des Systems beträgt 136 mA für die Webcam, 103 mA für das Display und nur 21 mA für das V2EVAL-Board. Der integrierte Programmier-/Debugging-Schaltkreis des V2EVAL und die große Prototyping-Fläche ermöglichen zahlreiche Entwicklungs- und Debugging-Funktionen.

Das Systemlayout

Das in dieser Implementierung genutzte OLED bietet zwei Betriebsmodi, die beide zum Einsatz kommen: 8-Bit-Bus-Interface-Modus und 6-Bit-RGB-Interface-Modus. Jeder Modus hat dabei seine eigenen Steuersignale. Der Bus-Interface-Modus kommt beim Start-up zum Einsatz, um die Display-Charakteristika des OLED zu konfigurieren. Sobald das OLED voll konfiguriert ist, schaltet die Anwendung in den RGB-Interface-Modus und ist bereit, RGB-Daten an das OLED zu senden.

Bild 3: Auf dem Controller laufen ein Webcam- und ein Display-Thread, die mit zwei Puffern und Semaphoren kommunizieren.

Bild 3: Auf dem Controller laufen ein Webcam- und ein Display-Thread, die mit zwei Puffern und Semaphoren kommunizieren.FTDI

Die Anwendung besteht aus zwei grundlegenden Threads innerhalb des Vinculum-II-Echtzeit-Betriebssystems (RTOS), wie Bild 3 zeigt. Der „USBReader“-Thread kümmert sich um die Verbindung zur Webcam, die vom USB-Host enumeriert wurde, sowie um die Konfiguration der Webcam und das Lesen und Speichern des Videodaten-Streams, den die Webcam erzeugt.

Der zweite Thread „DisplayOutput“ ist verantwortlich für das Umwandeln der Videodaten von der Webcam (YUV-Signal) in das RGB-Format und das Senden der Daten zum Display. Zwei Puffer dienen zum Speichern der Daten; der Zugriff auf die Daten wird mit Semaphoren synchronisiert. Diese steuern das Lesen und Beschreiben des Puffers, den sich die Threads teilen.

Applikationsfirmware

Für die Anbindung der Webcam an das OLED-Display ist eine Firmware erforderlich. Da Vinculum-II-Bausteine durch kostenlose Tools unterstützt werden, lassen sich die Zeit und der Aufwand dafür erheblich reduzieren. Das Toolpaket besteht aus einem proprietären C-Compiler, Assembler, Linker und Debugger, die sich zusammen in einer integrierten Entwicklungsumgebung (IDE) befinden. Damit lässt sich kundenspezifische Firmware entwickeln. Lizenzfreie Treiber, Bibliotheken und Beispiele helfen bei der Applikationsentwicklung und sind auf der FTDI-Website zu finden.

Auf einen Blick

Für kompakte USB-Anwendungen empfiehlt sich der Vinculum-II-Chip von FTDI. Der Entwickler kann diesen Baustein frei programmieren und hat zwei USB-Host- und Slave-Ports zur Verfügung. Sogar die isochrone Kommunikation, etwa mit einer USB-Webcam, gelingt damit problemlos.

Die Anwendung stelle eine Verbindung zwischen dem UVC-Treiber und dem USB-Host her, indem sie die Anfrage „VOS_IOCTL_UVC_ATTACH“ an den UVC-Treiber sendet und das Handle des USB-Hosts als Parameter weiterleitet. Die „VOS_IOCTL_UVC_ATTACH“-Anfrage blockiert, bis der Host die Webcam an seinem Port enumeriert hat. Kehrt die Anfrage zurück, wird die Webcam mit dem USB-Host-Port verbunden und die Anwendung kann Anfragen über den UVC-Treiber an die Webcam senden.

Immer schön synchron

Kodierte YUV-Farbdaten werden von der Webcam über einen isochronen USB-Endpunkt empfangen, und zwar in einem Frame mit 192 Byte. Die ersten 12 Byte bilden den Header, die restlichen 180 Byte sind die Videodaten an sich. Die Anwendung verwendet die Informationen im Header, um eine Synchronisation mit dem Datenstrom durchzuführen; die übrigen Bytes des Datenstroms sind die YUV-Daten.

Um sich mit den Frame-Daten zu synchronsisieren, wartet die Anwendung auf das Ende eines Frames. Während dieser Zeit ignoriert sie alle anderen empfangenen Daten. Ist die Anwendungen mit den Frame-Daten synchronisiert, bedeutet der Eingang einer Fehlermeldung, dass eine erneute Synchronisation erforderlich ist. In dieser Phase ignoriert die Anwendung alle Daten bis ein End-of-Frame empfangen wird und die Synchronisation erneut erfolgt ist.

Der passende Farbraum

Die Anwendung muss die YUV-Daten von der Webcam weiterverarbeiten, um sie für das OLED-Display aufzubereiten. Sie muss sie in das RGB-Format umwandeln und über eine GPIO-Schnittstelle an das Display leiten.

Die hier beschriebene Webcam-Anwendung nutzt die isochrone Funktion des Vinculum-II-Chips, die den Baustein von anderen aktuellen USB-Lösungen am Markt unterscheidet. Obwohl in diese Anwendung nur einen der beiden USB-Ports verwendet (als USB-Host), kommuniziert der Baustein mit zwei Peripherieeinheiten (Webcam und OLED-Display), um eine Videoübertragung zu ermöglichen. Die Anwendung ließe sich erweitern, indem man den zweiten USB-Port als USB-Host konfiguriert und zum Aufzeichnen der Daten auf einem USB-Flash-Laufwerk verwendet.

Die größere Flexibilität, die sich durch die Host/Slave-Funktion dieses Halbleiterbausteins ergibt, vereinfacht nicht nur den Entwicklungsprozess, sondern auch den Einkauf und die Lagerhaltung. Haben Entwickler einen einfachen Zugriff auf eine solche Plattform, können sie hochentwickelte Multimedia-Anwendungen mit minimalem Aufwand realisieren. 

Andrew Miller

: Senior Software Development Engineer bei FTDI in Glasgow, Großbritannien.

(lei)

Sie möchten gerne weiterlesen?

Unternehmen

FTDI Chip - Future Technology Devices International Ltd.

Unit 1, 2 Seaward Place Centurion Business Park
0 Glasgow, G41 1HH
United Kingdom