Freier USB Host Stack für Eingebettete Systeme
von Benedikt Sauter, sauter@ixbat.de, 05.08.2007
Was ist usbport? usbport ist aus dem Ziel für meine Diplomarbeit entstanden, einen freien, portablen und erweiterbaren USB-Host-Stack für Embedded-Systeme zu entwickeln. Um einen einfach einsetzbaren und vollständigen USB-Host-Stack erstellen zu können, musste viel Arbeit in das Design der Softwarestruktur investiert werden. Denn nur mit einer klaren und übersichtlichen Struktur können andere Entwickler dafür begeistert werden, diesen USB-Stack zu nutzen. Die klare Struktur wurde mit einer Aufteilung in einzelne Komponenten und Treiber erreicht. Für den USB-Host-Stack wurden in der Diplomarbeit ein Host-Controller-Treiber für den Baustein SL811HS von Cypress, ein USB-Gerätetreiber für den USB zu RS232 Wandler FT232 von FTDI Inc. und USB-Klassentreiber für Massenspeicher, Hub- und HID-Geräte entwickelt. Aktuell ensteht noch ein Host-Controller-Treiber für den AT90USB1287 Mikrcocontroller von Atmel.  Mit Hilfe von Beispielanwendungen wird dem Anwender der Einstieg leichter gemacht. Desweiteren wurde viel Wert auf die Kommentierung des Quelltextes gelegt, um die Lesbarkeit für interessierte Entwickler zu erhöhen. Die nächsten Arbeiten an dem Projekt, werden erstrangig die Veröffentlichung als Open-Source-Projekt und die Entwicklung von weiteren Host-Controller-Treibern sein. Entwicklungsplatine
Downloads Diplomarbeit als PDF (GFDL) Quelltexte als Archiv (LGPL)
Aktuellste Entwicklerversion: http://developer.berlios.de/svn/?group_id=7604 Quelltexte Online lesen: http://svn.berlios.de/viewcvs/usbport/trunk/ News- Veröffentlichung der Version 0.1 (05.08.2007)
EinleitungUniversal Serial Bus - kurz USB - ist speziell mit dem Ziel entwickelt worden, die damals technisch veralteten Schnittstellen wie RS232, Parallelport, Gameport, usw. abzulösen. Mit USB sollten Kosten reduziert werden, der Anschluss und die Konfiguration für den Nutzer vereinfacht und viele technische Probleme von bereits existierenden Schnittstellen gelöst werden können.
Zu Beginn von USB gab es nur Controller, die fest im Chipsatz von Computern integriert waren. Es gab keine einzelnen USB-Bausteine, mit denen man über einen beliebigen Mikrocontroller USB-Geräte ansteuern hätte können. Mittlerweile gibt es aber eine Vielzahl an USB-Bausteinen für Embedded Systeme. Oft ist USB sogar schon ein fester Bestandteil moderner System-on-Chip Einheiten. Dadurch steht einem Embedded System mit einer USB-Schnittstelle nun die ganze Welt der USB-Peripherie zur Verfügung.
Ein Nachteil von USB ist jedoch, dass die Spezifikation durch die vielen Anforderungen zu einem sehr umfangreichen Text geworden ist. Dadurch ist es schwierig, ohne tiefere Kenntnisse eine Kommunikation mit einem Gerät über USB zu programmieren. Als Basis gibt es von vielen Anbietern eigene kleine Bibliotheken, mit denen demonstriert wird, wie der eingesetzte Baustein angewendet werden kann. Doch oft stehen diese Bibliotheken unter nicht freien Lizenzen und zeigen meist nur typische Standardaufgaben, wie z.B. die Anbindung eines Massenspeichers oder Ähnliches. Will man auf andere Geräte zugreifen, steht man wieder vor dem Problem, dass man sich erst tief in die USB-Materie einarbeiten muss.
Das Ziel der vorliegenden Diplomarbeit ist es, einen freien, portablen und erweiterbaren USB-Host-Stack für Embedded Systeme zu entwerfen und zu implementieren. Die Software soll als Basis für viele unterschiedliche USB-Host-Bausteine dienen. Durch eine Aufteilung der Software in mehrere Ebenen ist ein hoher Grad an Wiederverwendbarkeit gegeben. Wie dies im Einzelnen aussieht, wird in den Kapiteln der Diplomarbeit wie folgt beschrieben.
Begonnen wird in Kapitel 1 mit der Betrachtung der Aufgaben, den Anforderungen und Einsatzgebieten von USB-Host-Stacks. Im Anschluss werden in Kapitel 2 die Grundlagen des USB-Busses beschrieben. Dies soll dem Leser helfen, besser zu verstehen, was beim Entwurf des USB-Host-Stacks zu beachten ist. Aufbauend darauf werden in Kapitel 3 die Komponenten und ihre Aufgaben im USB-Host-Stack diskutiert. Die Implementierung der einzelnen Ebenen des USB-Host-Stacks werden anschliessend in Kapitel 4, 5 und 6 beschrieben. In Kapitel 7 wird die im Rahmen der Diplomarbeit entworfenen Testplatine vorgestellt. Zuletzt wird in Kapitel 8 ein Ausblick auf zukünftige Arbeiten, und ein Fazit über die getane Arbeit gegeben.
|