Literatur

USB Org

Webauftritt der USB Standard Organization. Enthält unter anderem alle offiziellen Standards
Speziell interessant das Unterverzeichnis Developers, dort finden sich auch Tools.
Die Standards sind die Referenz, allerdings zum Selbststudium eher ungeeignet. Dort sieht man nach, wenn man ein Detail wissen möchte.
Das gilt nicht für den USB selbst, sondern auch für die bisher standardisierten Klassen, z.B. HID. Die Klassenstandards enthalten in der Regel auch Beispiele am Ende, d.h. funktionsfähige Deskriptoren.
Man kann damit entweder schnell ein funktionsfähiges Gerät deklarieren (zum Test) oder auch einfach das eigene Verständnis testen.
Link: USB Org

Lakeview Research (Axelson)

Webauftritt von Jan Axelson. Axelson dürfte der englischsprachige Autor über den USB sein.
Er schreibt swowohl über den USB allgemein (USB Complete Series, aktuell ist die 4. Ausgabe) als auch Einzelthemen dazu.
Eine interessante Lektüre ist z.B. USB Mass Storage. Die Bücher können in vielen Fällen als Ersatz für den Standard genommen werden, zumindest soweit es um die Software geht.
Darüber hinaus behandelt USB Complete auch sinnvolle Themen außerhalb des Standards, z.B. das Einbinden und Ansprechen der Geräte unter Windows.
Es gibt auch eine deutsche Ausgabe, zumindest bis zur 2. Ausgabe - die genügt völlig.
Link: Lakeview Research

USB in a Nutshell (Peacock)

Eine hervorragende Kurzfassung zum USB aus SW-Entwicklersicht von Craig Peacock (30 Seiten!).
Dieses Dokument holt aus dem Standard alles Wesentliche für den Firmwareentwickler bis zur Enumeration. Das ist die beste mir bekannte Zusammenfassung, denn man benötigt tatsächlich 80% dessen, was beschrieben wird - und auch nicht mehr!
Die restlichen 20% sind auch nicht unnütz, nur benötigt die eine reiner Softwareentwickler eben nicht, zum Lesen trotzdem ebenfalls empfehlenswert.
PDF-Datei: Download
Link: Beyond Logic (Webauftritt)

USB 1.1 Professional Series

Frühes deutschsprachiges Buch zum Thema USB. Es behandelt zwar nur den Standard bis zur Version 1.1, aber der genügt für viele Geräte heute auch noch. Das Buch hat neben der deutschen Sprache noch den Vorteil, dass es sehr entwicklernah geschrieben ist und aus einer Zeit ist, in der noch alles "zu Fuss" gemacht werden musste.
Daher findet man hier, im Gegensatz zu Axelson, auch tatsächlich Ablaufdiagramme für eine einfache Gerätefirmware.
Das Buch ist vergriffen, eine Erweiterung zu USB2.0 scheint in so geringer Auflage erschienen, dass ich kein Exemplar zur Beurteilung habe.
Das hier besprochene Buch (USB 1.1) kann man aber noch als Gebrauchtexemplar bekommen.
USB 1.1: ISBN-13: 978-3-7723-7964-2, Franzis-Verlag, Hrsg.: Kelm, 2. Auflage
USB 2.0: ISBN-13: 978-3-7723-7965-9, Franzis-Verlag, Hrsg.: Kelm, 4. Auflage

Programme zum USB

USB View

Sehr informative Darstellung aller aktuell an einen PC angeschlossenen USB-Geräte.
Das Programm ist im Original für MS-Windows entwickelt worden. Für Linux gibt es eine Adapation, von mir nicht getestet.

Windows: Download
Linux: Externer Link

Four Walled Cubicle (Camera)

Der Entwickler Dean Camera hat eine sehr universelle Bibliothek zum USB speziell für den AVR geschrieben. Die gesamte Software ist Open Source. An sich wäre das als geradezu ideal für das Praktikum.
Es gibt dabei jedoch aus meiner Sicht drei Probleme, für die LUFA nichts kann.
1. Verständnis
Man kann, ohne die Grundlagen des USB verstanden zu haben, weder den Aufbau der Bibliothek noch die einzelnen Funktionen verstehen. Wenn man eine einfache Anwendung um USB-Funktionalität erweitern möchte, dann kann LUFA sehr, sehr viel Arbeit sparen. Man wird dann aber nicht verstehen, warum es funktioniert.
2. Komplexität
Die Software ist zum Teil sehr unverständlich geschrieben. C ist eine Sprache, in der man sehr viel sehr knapp ausdrücken kann und Camera macht Gebrauch davon. Für einen C-Anfänger sind viele Konstrukte gar nicht nachvollziehbar, sie sind auch bei Camera erst mit der Zeit so entstanden, als er LUFA weiterentwickelt hat.
3. Universalität
LUFA stellt einen allgemeinen Ansatz zur USB-Firmware dar. Es kann daher in der Regel viel mehr, als für ein spezielles Problem gebraucht wird. Das ist technisch kein Problem, weil nicht benötigte Teile keine Rechenzeit verbrauchen und der "verschenkte" Programmspeicherplatz vernachlässigbar istt. Problematisch ist, dass ein Anfänger nicht nachvollziehen kann, warum jetzt ein bestimmter Fall behandelt wird, obwohl der in der speziellen Aufgabenstellung nicht vorkommt.
br> LUFA ist also ein hervorragendes Projekt, für den USB-Anfänger aber meiner Ansicht nach bereits zu weit fortgeschritten und nur als Ganzes zu genießen (Friss oder Stirb).
Link: LUFA

Firmware von Herrn Salewski

Dies ist eine USB Firmware speziell für den AT90USB1287.
Das Projekt entstand wohl parallel zu LUFA (schreibt der Autor). Da der Umfang sehr viel kleiner als bei LUFA ist und der Autor auf Deutsch schreibt, ist diese Firmware für den Einstieg sehr viel besser als LUFA geeignet.
Link: Salewski, USB-Firmware

Appnotes diverser Firmen

Alle mir bekannten Firmen, die USB-Chips herstellen, haben dazu auch diverse Application Notes verfasst.
Für den AT90USB1287 lassen sich bei Atmel einige Appnotes finden, auch mit C-Quellen dazu. Dasselbe gilt für andere Firmen mit USB-fähigen Mikrocontrollern, z.B. Microchip, NXP etc.
Das Problem dabei ist jedoch immer dasselbe: Wer den USB in seinen softwaretechnischen Grundlagen nicht verstanden hat, kann es aus den Appnotes auch nicht lernen. Die Appnotes können in zwei Fällen sehr hilfreich sein:
1. 1:1 Übernahme
Will man den USB nicht verstehen, benötigt aber schnell eine bestimmte Funktion, dann kann eine solche Appnote die Lösung sein. Es wird schwierig bis unmöglich sein, das vorgegebene Programm guten Gewissens anzupassen, außer an den Stellen, die in der Appnote speziell dafür vorgesehen sind. Man weiss ja dann nicht, was man tut und kann die Folgen nicht abschätzen.
2. Aufbereitung spezieller Infos aus dem Standard
In manchen Fällen ist der Standard sehr abstrakt geschrieben und man hätte gerne ein Beispiel, wie denn nun ein bestimmer Request oder Deskriptor aufgebaut ist. Das kann in Appnotes sehr gut dargestellt sein, dann spart man sich viel Arbeit und versteht dabei trotzdem, was man tut. Man entnimmt der Appnote also einen Teil der Information und baut ihn in seinem eigenen Programm ein.

Praktikum

Datenblatt AT90USB1287, Rev. L

Zur Zeit (November 2012) aktuellste Revsion des Datenblatts zum AT90USB1287. Für die Programmierung im Praktikum sind die Kapitel 22 und 23 wesentlich.
PDF-Datei: Download

USB/RS232-Adapter im AVR

Man kann die Praktikumsplatine auch zum Debuggen verwenden, indem man sie als RS232<->USB-Konverter programmiert. Die nötigen Dateien finden Sie hier.
ZIP-Archiv: Download

USB Skript

Unvollständiges Skript zur Vorlesung und zum Praktikum.
PDF-Datei: Download

Firmware Starter

Projekt (AVR Studio 4) für den Anfang mit dem USB Makro. Das Projekt kann sicher auch nach AVR Studio 6 konvertiert werden oder man trägt die paar C- und H-Dateien manuell in ein neues Projekt ein.
Für den Anfang gibt es dort zwei Hilfen:
Erstens kann man mit printf() ganz normal Ausgaben über RS232 machen, das ist für das Debugging sehr nützlich.
Zweitens habe ich als Grundstock für die Funktionensammlung in der Datei usb.c die Initialisierung des USB-Makro als Device mitgeliefert. So haben Sie immerhin einmal eine funktionsfähige Grundlage.
Jetzt sollten Sie einmal versuchenm, einen Attach am USB durchzuführen und dann in der Schleife einem USB-Reset erkennen.
Sie können das immer wieder am Host ausprobieren, dazu müssen Sie nichts ausstecken, denn der Attach wird ja vom Host/Hub immmer neu erkannt.
Zip-Archiv: Download

IDE (V7)

AVR Studio V7 Download