USB

Wechseln zu: Navigation, Suche

Universal Serial Bus.

Serieller Bus, der heutzutage an jedem neuen PC zu finden ist und langsam aber sicher die RS-232- und Parallelport-Anschlüsse ersetzt.

Einleitung[Bearbeiten]

Übertragungsgeschwindigkeiten:

  • Low Speed: 1,5 MBit/s (USB 1.1 und 2.0)
  • Full Speed: 12 MBit/s (USB 1.1 und 2.0)
  • High Speed: 480 MBit/s (nur USB 2.0)
  • SuperSpeed: 5 GBit/s (nur USB 3.0)

Die in Datenblättern oder Verpackungen gern verwendete Angabe "USB 2.0 Full Speed" darf man also nicht wörtlich verstehen, das sind trotz USB 2.0 nur 12 Mbit/s.

Zu beachten ist, dass es bei USB im Gegensatz zu RS-232 zwei Arten von Controllern gibt: Host- und Devicecontroller. Host bezeichnet dabei die steuernde Seite und ist z. B. in PCs zu finden; Devices sind die USB-Geräte, z. B. USB-Webcams. Diese Unterscheidung ist ziemlich wichtig, weil die meisten USB-Lösungen für Mikrocontroller USB-Devices darstellen und man deswegen dort weder Webcams noch USB-Speichersticks anschließen kann. Mit der letzten Ergänzung des Standards (USB On-The-Go) gibt es die begrenzte Möglichkeit, dass Geräte Host-Funktionalität zur Kommunikation mit ausgewählten Peripheriegeräten erhalten.

Benutzt man ein USB-Device am PC, dann braucht man auch noch passende Treiber. Die aktuellen Betriebssysteme bringen meist eine Reihe von Treibern für Standardanwendungen (z. B. USB-Festplatte) mit. Gibt es keinen passenden Standardtreiber, dann muss man eben einen erstellen. Dazu werden bei manchen Chips kostenlose Treiber mitgeliefert, bei anderen muss man sie kaufen oder (aufwendig) selbst erstellen.

Allgemeine Informationen[Bearbeiten]

  • USB-Hauptseite Die Homepage des USB Implementers Forum, Inc., creators of USB technology.
  • libusb Allgemein ist die Treiberprogrammierung für USB das Hauptproblem. Die plattformübergreifende libusb (Win32-Port (nicht Vista!)) ermöglicht die Kommunikation mit USB-Geräten unter Verwendung eines Universaltreibers. Ein deutschsprachiges Projekt, erstellt von Weichinger Klaus, das libusb verwendet, findet man unter [1] (Programmiersprache C mit MINGW; Dokumentation, Sourcecode und Binärdateien).
  • Diplomarbeit von Eik Arnold Viele Informationen über USB (Vergleich mit anderen Bussystemen, Elektrisches Interface, Transferarten, Übersicht über die verschiedenen USB Chips, ...)
  • USB in a NutShell Eine kleine Wanderung durch die USB-Spezifikation
  • Steuern und Messen mit USB - FT232, 245 und 2232 "Das aktuelle Buch zu den USB-Controllern von FTDI. Viele Beispielprogramme in C, zwei Projektbeschreibungen: I2C-Bus mit LM75A und ein Web-Projekt. Bauteilesatz und USB-Modul mit dem FT2232 zum schnellen Einstieg in die Thematik. Buch / Teilesatz über Segor oder dieser Seite erhältlich."
  • Universal Serial Bus Eine gute Einführung und detaillierte Beschreibung.
  • Buch: Messen, Steuern, Regeln mit USB von B. Kainka.
  • Wikipedia-Artikel: Universal Serial Bus

USB-Hostcontroller[Bearbeiten]

Host-Controller im Mikrocontroller[Bearbeiten]

Es gibt eine erfreuliche Anzahl geeigneter Schaltkreise, nur für den Amateur unschön beschaffbar. Entsprechend der USB-Spezifikation kann jeder Full-Speed-Hostcontroller auch mit Low-Speed arbeiten.

Hersteller IC Speed Pins Ucc/Uio CPU Takt Flash RAM ADU DAU/PWM Async Sync Extras Bezug
Fujitsu MB96F338U Full 144 3-5 V 16bit / 16FX Core 4 MHz extern 544Kbyte 32Kbyte 36x10bit 20xPWM, 12xOCU 8 8 3xCAN, 2xI²C Glyn, EBV
Fujitsu MB90F334 Full 120 3,3 V 16bit / 16LX Core 4 MHz extern 384Kbyte 24Kbyte 16x10bit 6xPWM, 4xOCU 4 1 3xI²C Glyn, EBV
Fujitsu MB90F337 Full 64 3,3 V 16bit / 16LX Core 4 MHz extern 64Kbyte 4Kbyte - 4xPWM 2 1 1xI²C Glyn, EBV
Cypress CY7C67300 Full 100 3,3 V 16bit RISC 48 MHz 4K x 16bit OTP 8K x 16bit - 1 1 1 IDE
Atmel AT90USB647 Full 64 3,3 - 5 V AVR 16 MHz 64 K 4 K 8 x 10 bit Farnell ca. 11,42 €
Atmel AT32UC3B0128 Full/OTG 64 (40) 3,3 V AVR32 60 MHz 128 K 32 K 8 x 10 bit (7+6) x PWM 2 (1x full) I²C, SPI, SSC Kernspannungsregler 1,8 V Farnell ca. 6 €
Microchip PIC24FJ256GB106 Full 64 3,3V/5V PIC24 16 MHz 64 KB 16 KB 10bit - - Spannungsregler Farnell ca. 5,70 €
Microchip PIC32MX420FxxxH Full 64 3,3V/5V MIPS32 80 MHz ab 32 KB 8 - 32 KB 16 x 10bit - 1 mit IRDA Spannungsregler, JTAG Farnell ca. 4,83 €
Philips/NXP LPC2388 Full 144 3,3V/5V ARM7 72MHz 512KB 32KB 8 x 10bit 1 x 10bit, 6 PWM 2 USART, 2 CAN SPI, I²C, SSC SD/MMC, Ethernet 10 Mbit, Businterface, JTAG Digikey ca. 8 €
ST STM32F10x Full 36..144 3,3V/5V Cortex-M3 72MHz 512KB 64KB 21 x 12bit 2 x 12bit, 32 PWM 5 USART, 1 CAN SPI, I²C, SSC Siehe Artikel STM32 Farnell ab ca. 5 €
ST STM32F4xx Full + Hi 64..176 3,3V/5V Cortex-M4 168MHz 1024KB 192KB 24 x 12bit 2 x 12bit, 32 PWM 6 USART, 2 CAN SPI, I²C, SSC Siehe Artikel STM32 Mouser ab ca. 7 €

Alle mit „USB OTG“ beworbenen Schaltkreise sind als Host-Controller und Device-Controller verwendbar. Mikrocontroller mit High-Speed-USB sind selten.

Implementierung in Software auf Atmel AVR[Bearbeiten]

Solche Hostcontroller sind nur für Low-Speed-Geräte geeignet, in der Regel Tastaturen, Mäuse und ggf. Joysticks oder ähnliche HID-Geräte.

Software-Implementierungen auf anderen Mikrocontrollern scheitern wegen zu geringer Taktfrequenzen bzw. Durchsatzraten, oder – bei leistungsstärkeren Controllern – wegen Sinnlosigkeit durch Verfügbarkeit von Mikrocontrollern mit USB (siehe oben).

Spezielle Schaltkreise[Bearbeiten]

USB-Schaltkreise, die vorzugsweise für den Anschluss an ein „Externes Businterface“ eines Mikrocontrollers oder per SPI vorgesehen sind.

Außerdem gibt es eine Reihe Schaltkreise, die einen PCI-Bus haben. Diese sind für Mikrocontrollerprojekte in der Regel nicht zu gebrauchen.

USB HOST taugliche Stacks[Bearbeiten]

Fertige Module mit einem USB-Host[Bearbeiten]

  • VDIP1 von FTDI (UART, SPI und parallel)
  • STI 100 von elv (UART und SPI)
  • Z-USB von rz-robotics (UART und SPI, kann auch stehend montiert werden)
  • USBStickLogger OpenSource-Projekt, Bausatz verfügbar (UART)

USB-Devices[Bearbeiten]

Implementierung in Software[Bearbeiten]

Spezielle USB-µC[Bearbeiten]

  • Diverse µCs von Cypress, siehe unten
  • TUSBxxxx-Serie von Texas Instruments ebenfalls mit 8051-kompatiblem Mikrocontroller (Beispiel Projekt von Weichinger Klaus (EXPL_DHTML.C Virus ?))
  • PIC18F2455/2550/4455/4550/67J50/67J55/87J50/87J55 sowie alle PIC24FXXXGBXXX von Microchip, üppig ausgestattet mit USB, seriellem Port (RS232/SPI), PWM-Ausgängen, A/D-Wandler und vielen IO-Pins
  • Freescale
    • 69HC908JB8 - 20 Pin DIP . . . MC68HC908JB8 ?
    • 69HC908JB16 - Mehr Peripherie u.a. RS232
    • 69HC908JG16 - Mit A/D wandler
    • 69HC908JW32 - Mehr Speicher, mehr Ports
  • LPC2000/3000-Reihe von NXP (LPC2888: High Speed USB 480Mbps)
  • C8051F320 & C8051F340 von Silicon Laboratories (USB, UART, SPI, SMBus, 10-Bit-ADC, Komperator, integr. Spannungsregler & Oszillator)
  • AT91SAM Familie von Atmel, ARM7-basiert, nicht OTG-fähig
  • AVR32 (AT32UC3A/B) Familie von Atmel mit AVR32-Kern ohne MMU für einfachere Firmware, OTG-fähig, auch High-Speed, Externes Businterface, Ethernet. Alle AT32UC3A or -B's haben vorprogrammierten USB Device Firmware Upgrade (DFU) bootloader.[1]
  • AT90USB Familie von Atmel.
  • Atmel
    • ATmega(8|16|32)U2 -
    • ATmega(16|32)U4 - 1x USB 2.0 full-speed/low speed device
    • (USB Appnotes AVR270..273, 282, 287, 293)

Alle hier genannten Mikrocontroller haben keinen USB-Host (nur Client)!

Eine Auswahl:

Hersteller IC Speed Pins Ucc/Uio CPU Takt Quarz Flash RAM ADU DAU/PWM Async Sync Extras Bezug
Cypress AN2131
AN2135
Full 44 3,3V/5V 8051 24MHz 12MHz 0 4KB - - UART I²C veraltet
Cypress CY7C68013A High 56,100,128 3,3V/5V 8051 48MHz 24MHz Grundton 0 16KB - - 2 UART
(ab 100 Pin)
I²C GPIF (State Machine) Digikey ca. 11,28 €, Air Electronics ca. 9 €
Cypress CYUSB3014 Super 121 (BGA) 1,8V ARM9  ? 0 256KB? - - 2 UART I²C GPIF II (State Machine)  ?
Microchip PIC18F2550 Full 28 PIC 12MHz 16K x 16bit 2KB 8 x 10bit Reichelt ca. 7,95 €
Atmel AT91SAM7S64 Full 64 3,3V/5V ARM7 55MHz für Bootloader: 18,432MHz 64KB 16KB - 4 PWM 2 USART SPI, I²C, SSC größere Chips auch mit Ethernet Reichelt ca. 6,25 €
Philips/NXP LPC2378 Full 144 3,3V/5V ARM7 72MHz bspw. 12MHz 512KB 32KB 8 x 10bit 1 x 10bit, 6 PWM 2 USART, 2 CAN SPI, I²C, SSC SD/MMC, Ethernet 10 Mbit, Businterface Digikey ca. 7,85 €
Texas Instruments MSP430F55xx Full bis 80 3,3V MSP430 25MHz bspw. 24MHz bis 128KB bis 8+2KB 8 x 12bit PWM 2 USART SPI, I²C verschiedene Ausbaustufen TI zurzeit als Muster
ST STM32F10x Full 36..144 3,3V/5V Cortex-M3 72MHz 512KB 64KB 21 x 12bit 2 x 12bit, 32 PWM 5 USART, 1 CAN SPI, I²C, SSC Siehe Artikel STM32 Farnell ab ca. 5 €
Silicon Laboratories C8051T3xx, -T6xx, -F3xx, -F6xx Full 24 28 32 48 1,8..5,25V 8051 25/48MHz 8KB..64KB 1,25..256KB 1 x 10bit, 500 ksps, 23 ins 5 x PWM 2 x UART SPI, I²C Temperatursensor, Komparator, 4 x 16bit timer Mouser OTP ab 0,81 €, Flash ab 1,11 €
Atmel SAM3U High 100 144 1,62..3,6V Cortex M3 96MHz 64..256KB 20..52KB 8-channel 12-bit 1MSPS, 8-channel 10-bit bis zu 7 x PWM bis zu 4 x UART SPI, I²C, I2S, 1 HSMCI (SDIO/SD/MMC) 3 x 16bit timer, 32-bit Real Time Timer, bis zu 96 IO-Pins Mouser ab 4,09 €
  • Ucc/Uio gibt die maximale Betriebsspannung und die maximale Eingangsspannung an Eingabeports an. 3,3V/3,3V heißt: nicht 5V-verträglich!
  • Takt: CPU-Taktfrequenz, bei Microchip ehrlicherweise durch 4 geteilt
  • Async: Anzahl und Art der asynchron-seriellen Schnittstellen (also mit Startbit operierend)
  • Sync: Anzahl und Art der synchron-seriellen Schnittstellen (also mit einer Taktleitung, also auch I²C)
  • SSC: Serielles Interface besonders für Audiochips, verschiedene Namen bei den Mikrocontroller-Herstellern

Via µC ansteuerbare USB-Controller[Bearbeiten]

IC Hersteller Host oder Device IC-Pins Interface Beschreibung Bezugs-Quelle(n) Sonstiges
FT232
FT245
FTDI Device 28-32 RS232
parallel 8 bit
1 bidirektionale FIFO ** Reichelt, ab 1,95 € libftdi - FTDI (bitbang) software collection von Intra2net (Opensource)
FT232R FTDI Device 28-32 RS232/Bitbang/CBUS 1 bidirektionale FIFO ** Reichelt, ab 3,15 € libftdi - FTDI (bitbang) software collection von Intra2net (Opensource)
FT2232D FTDI Device 48 RS232 / parallel 8 bit / I2C, SPI, JTAG 2 bidirektionale FIFOs ** csd-electronics Watterott electronic libftdi - FTDI (bitbang) software collection von Intra2net (Opensource)
FT2232H FTDI Device 64 RS232 / (synchron/asynchron) parallel 8 bit / I2C, SPI, JTAG 2 bidirektionale FIFOs, HS ** libftdi - FTDI (bitbang) software collection von Intra2net (Opensource)
FT4232H FTDI Device 64 RS232 / I2C, SPI, JTAG (2 Kanäle) 4 bidirektionale FIFOs, HS ** libftdi - FTDI (bitbang) software collection von Intra2net (Opensource)
FT232H FTDI Device 48 RS232 / (synchron/asynchron) parallel 8 bit /I2C, SPI, JTAG/CBUS 1 bidirektionale FIFOs, HS ** Reichelt, ab 3,20 € libftdi - FTDI (bitbang) software collection von Intra2net (Opensource)
PDIUSBD11 Philips Device I²C USB-Device Controller abgekündigt
PDIUSBD12 Philips Device 28 parallel 8 bit 1 bidirektionale FIFO ** Reichelt, ab 2,65 €
MAX3420E Maxim Device 24-32 SPI Fullspeed-Controller, 4 Endpoints
USBN960x National Device 28 Datenbus 8 bit, SPI Fullspeed-Controller, 7 Endpoints, 3,3-V-Längsregler enthalten Reichelt, ab 4,65 € Siehe USBN960x, NRND
CP210x Silabs Device UART USB2.0 kompatibler (arbeitet Fullspeed) UART-USB Umsetzer. Sehr kompakt, Intel MAC OSX: Forenbeitrag beachten
CP2110 Silabs Device 24-28 UART UART-USB ohne Treiber (HID-Klasse)
CP2112 Silabs Device 24 SMBUS SMBUS-USB HID
PL2303 Prolific Device 28 RS232 „USB CDC 1.1“-konform Im Gegensatz zum FT232 sollte kein Treiber erforderlich sein: Von wegen!
OTI-6858 Ours Technology Inc. Device 28 UART USB to RS232 Bridge Controller - USB2.0 bis 12MB
ARK3116T Arkmicro Device UART USB-to-UART Controller - USB2 bis 3MB)
TUSB3410 Texas Instruments Device UART USB to Serial Port Controller Digi-Key, ca. 5,60 € USB 2.0 full Speed, Basis 8052 µC
VNC1L Vinculum 2x Host Dual USB Host-Controller Watterott electronic LVProg is an (X11/Qt)application for programming a ROM file into a Vinculum USB host controller from FTDI. (GPL v2)

Siehe auch: USB-Stick am Mikrocontroller

SL811HST Cypress 1x beides 48 Datenbus 8 bit Controller 1 Port Digikey, Air Electronics ca. 8 € für OTG viel Außenbeschaltung erforderlich
ISP1160 Philips/NXP 2x Host 64 Datenbus 16 bit Host-Controller 2 Ports Reichelt, ca. 6,85 € für ATmega unzweckmäßig, eher für ARM-Prozessoren
MCP2210 Microchip Device 20 SOIC, SSOP USB nach SPI (Master) Bridge, GPIO USB SPI Bridge (HID-Klasse) + 9 GPIO / SPI CS Reichelt, ca. 1,75 € Durch HID simpel anzusteuern, aber in der Praxis nur (sehr) langsame SPI (ca. 80 kbit/s @ 12Mbit/s SPI). HW Ansteuerung sehr simpel.

Reine FIFO-Schaltkreise sind nicht für benutzerspezifische Deskriptoren geeignet. Damit lassen sich nahezu keine klassenspezifische Geräte-Interfaces realisieren. Folglich kann man damit bspw. kein HID-Gerät bauen.

NRND = Not recommended for new designs = wird alsbald abgekündigt

UART: Gemeint sind die Signale RxD und TxD sowie Flusskontrolle /RTS und /CTS

RS232: Gemeint ist eine UART mit den 4 Modemsteuersignalen /DTR, /DSR, /DCD und /RI

Tipp: USB-Handy-Datenkabel arbeiten oft mit FT232-ähnlichen Chips!

USB-Transceiver[Bearbeiten]

USB-Transceiver können nur verwendet werden für:

  • speziell dafür ausgelegte Mikrocontroller (PIC 18F2455/2550/4455/4550 u.ä.)
  • FPGAs (wenn diese nicht selbst über geeignete Portpins verfügen)
  • V-USB (Software-Anpassungen erforderlich)

Vorteil: Zwischen Transceiver und Mikrocontroller kann eine galvanische Trennstufe angeordnet werden.

Heutzutage ist es besser, einen seriell ansteuerbaren USB-Controller (siehe oben) zu verwenden und dazwischen eine maßgeschneiderte galvanische Trennung. Daher sind Transceiver heutzutage eher obsolet.

IC Hersteller Speed IC-Pins Interface Beschreibung Bezugs-Quelle(n)
MAX345xE Maxim  ? 14-16 - Transceiver
ISP1106 Philips/NXP Low, Full 16 - Transceiver Reichelt, ca. 1,15 €

Tipps + Tricks[Bearbeiten]

Herausforderung bei USB ist

    • das USB-Signal bidirektional ist
    • USB keine Steuerleitungen hat, man kann nur aus der vollständigen Dekodierung der Daten erfahren, in welche Richtung die Daten jetzt gehen müssen. Dieses Problem betrifft V-USB-basierte Projekte nicht, eine solche Leitung lässt sich leicht nachrüsten.
    • es sehr kurze Antwortzeiten von den USB-ICs verlangt (im Bereich von ~10 Bitzeiten!)
  • Es gibt auf dem Markt einige wenige, aufwändige und damit teure Lösungen. Wer also ein galvanisch getrennte Schnittstelle braucht, sollte nicht USB nehmen. Allerdings ist es leicht möglich, einen USB-RS232/RS485 Wandler galvanisch auf der RS232/RS485 Seite zu trennen.
  • Eine einfache Lösung wäre einen FT232 zu verwenden und diesen auf der TTL-Seite mit Optokopplern zu trennen.
  • Die zur Zeit einfachste und kostengünstigste Möglichkeit zur galvanischen Trennung ist der ADUM3160BRWZ oder der ADuM4160 von Analog Devices.
    • Einschränkungen: nur Full- und Low-Speed, keine automatische Erkennung der Übertragungsrate.
    • ADuM3160 im AD Newsletter: [4]
    • Leerplatine für ADuM4160 im IT-WNS Webshop
    • Forumsbeitrag mit Eagle 3D Bild und Schaltplan
  • Suche nach USB und galvanischer Trennung im Forum

Analysetools[Bearbeiten]

Weblinks[Bearbeiten]


Referenzfehler: Es sind <ref>-Tags vorhanden, jedoch wurde kein <references />-Tag gefunden.