Fakultät Informatik Institut für Technische Informatik, Professur für VLSI-Entwurfssysteme, Diagnostik und Architektur DIPLOMARBEIT Entwurf und Implementierung eines modularen USB-Stacks für eingebettete Controller ohne Betriebssystem Uwe Pfeiffer Dresden, 21.5.2015
Gliederung Überblick USB Motivation Funktionsweise USB Ziele Realisierung Ergebnisse Fazit Ausblick TU Dresden, 21.5.2015 USB-Stack Folie 2 von 16
01 Überblick USB Host Root-Hub Gerät 1 Hub Gerät 1 Gerät 2 Gerät 3 Gerät 2 Hub Gerät 3 Gerät 4 Hub Host Gerät 4 Gerät 5 Gerät 6 Hub Hub Gerät 8 Gerät 7 Hub Gerät 5 Gerät 6 Gerät 7 Gerät 8 Abbildung: Topologie eines beispielhaften USB-Systems
Eigenschaften serielles Bussystem Verbindung zwischen Peripheriegerät und Host Host-gesteuert Plug-and-play Stromversorgung für Peripheriegeräte möglich verschiedene Geschwindigkeiten TU Dresden, 21.5.2015 USB-Stack Folie 4 von 16
02 Motivation USB für Anwender einfach zu nutzen vielseitig einsetzbar USB kompliziert/komplex für Geräte-Entwickler jeder Hersteller mit eigenem Beispielcode viel selbst zu implementieren TU Dresden, 21.5.2015 USB-Stack Folie 5 von 16
03 Funktionsweise USB Host Gerät Funktionsschicht Client-Software logische Pipes Funktion Nutzdaten Nutzdaten Geräteschicht USB-System- Software Standard Control-Pipe logisches Gerät USB-Frames USB-Frames Schnittstellenschicht USB-Host- Controller physische Verbindung USB-Bus- Schnittstelle Abbildung: Überblick über Datenfluss
Deskriptoren endpoint interface endpoint... configuration interface endpoint endpoint...... endpoint device endpoint interface... interface endpoint Abbildung: Hierarchie der Standard-Deskriptoren
04 Ziele einfache und schnelle Erstellung von Firmware Deskriptoren Datenübertragung zur Verwendung wenig Wissen über USB notwendig mit geringem Aufwand auf andere Hardware portierbar objektorientiert mit C++ TU Dresden, 21.5.2015 USB-Stack Folie 8 von 16
05 Realisierung Funktionsschicht sonstige Control-Transfers Datenübertragung Geräteschicht Geräte-Stack Deskriptoren Schnittstellenschicht Hardware Abbildung: Übersicht über Schnittstellen des Stacks TU Dresden, 21.5.2015 USB-Stack Folie 9 von 16
Klassendiagramm Klassen, die weitere USB-Requests bearbeiten abstrakte Klasse des USB-Stacks <<interface>> RequestInterface 0..* 1 UsbDevice 1 1 Device-Deskriptor; Zugriff auf Stringandere Standard-, und sonstige Deskriptoren Deskriptoren, die durch Nicht-Standard- Deskriptoren erweiterbar sind UsbDeviceHw 1 DescriptorAccess 1 1 1 1 Nicht- Standard- Deskriptoren 1 Descriptor plattformspezifische Implementierung der Hardware-Schnittstelle 0..* StringDescriptor 0..* 0..* GeneralDescriptor 1..* <<create>> Configuration 1 1..* Interface 1 1 0..* 1..* Endpoint Abbildung: Vereinfachtes Klassendiagramm
Nutzung des Stacks TU Dresden, 21.5.2015 USB-Stack Folie 11 von 16
06 Ergebnisse MCU: 1024 Byte; PC: 1024 Byte MCU: 1024 Byte; PC: 64 Byte MCU: 64 Byte; PC: 1024 Byte MCU: 64 Byte; PC: 64 Byte 1,200 theoretisch maximal erreichbare Übertragungsrate 1,000 Senden / kbyte/s 800 600 400 200 0 Linux- USB-2.0- Linux- USB-3.0- Windows- USB-3.0- Linux- USB-2.0- Linux- USB-3.0- Windows- USB-3.0- STM32F1 STM32F4 Abbildung: Durchschnittliche Übertragungsraten mit bulk-transfers
Übertragungsraten - Empfangen STM: 1024 Byte; PC: 1024 Byte STM: 1024 Byte; PC: 64 Byte STM: 64 Byte; PC: 1024 Byte MCU: 64 Byte; PC: 64 Byte 1,200 theoretisch maximal erreichbare Übertragungsrate 1,000 Empfangen / kbyte/s 800 600 400 200 0 Linux- USB-2.0- Linux- USB-3.0- Windows- USB-3.0- Linux- USB-2.0- Linux- USB-3.0- Windows- USB-3.0- STM32F1 STM32F4 Abbildung: Durchschnittliche Übertragungsraten mit bulk-transfers
Speicher STM32F1 STM32F4 generischer Stack 3506 3554 HW-Implementierung 2120 2014 5830 5772 Tabelle: Übersicht über den benötigten Flash STM32F1 STM32F4 Heap 704 624 Stack 302 288 1006 912 Tabelle: Übersicht über den benötigten RAM TU Dresden, 21.5.2015 USB-Stack Folie 14 von 16
07 Fazit automatische Enumeration control-/bulk-/interrupt-transfers einfache Datenübertragung Erstellen beliebiger Deskriptoren + selbstständige Übertragung im Prinzip volle Geschwindigkeit von Full-Speed-USB nutzbar relativ geringer Speicherbedarf einfach erweiterbar TU Dresden, 21.5.2015 USB-Stack Folie 15 von 16
08 Ausblick vollständige Unterstützung von Schnittstellen Implementierung von isochronen Transfers weitere Vereinfachung der Erzeugung der Deskriptoren weitere Möglichkeiten der Steuerung der Datenübertragung Implementierung von USB-Klassen ierung auf weitere Mikrocontroller noch fehlende USB-2.0-Unterstützung TU Dresden, 21.5.2015 USB-Stack Folie 16 von 16
Heap Erzeugung der Objekte auf Erzeugung von nähere Beschreibung Heap Stack Endpunkt Endpunkt selbst 48 0 Schnittstelle Schnittstelle selbst 48 0 je zugeordnetem Endpunkt 4 4 Konfiguration Konfiguration selbst 48 0 Array für Gesamtkonfiguration; Standardgröße 128 128 je zugeordneter Schnittstelle 4 4 DescriptorAccess DescriptorAccess selbst 80 16 automatisch erzeugter Endpunkt 0 48 48 je zugeordneter Konfiguration 4 4 StringDescriptor Beispiel für String der Länge 10 48 32 Listeneintrag in DescriptorAccess 16 16 GeneralDescriptor GeneralDescriptor selbst 16 0 Listeneintrag in DescriptorAccess 32 32 Zuordnung zu Endpunkt/Schnittstelle/Konfiguration 4 4 USB-Stack bei Verwendung des STM32F1 400 304 bei Verwendung des STM32F4 336 224 Tabelle: Übersicht über den benötigten Heap; alle Werte in Byte TU Dresden, 21.5.2015 USB-Stack Folie 16 von 16