Diplomarbeit DA-4
Die Kommunikation von Linux Applikationen mit generischer Hardware
über das USB-Subsystem, praktisch realisiert am Beispiel
einer USB-zu-Mikroprozessor und einer USB-zu-CAN Schnittstelle.
Zusammenfassung
Im Zentrum dieser Diplomarbeit wird eine
kleine Schaltung stehen, die an den USB-Bus eines Linux-Rechners
angeschlossen werden kann. Zur Ankopplung an den USB-Bus wird in
dieser Schaltung der Baustein AN2131 von Cypress Semiconductors
verwendet, der aus einem frei programmierbaren Kern mit dem 8051
Prozessor besteht. Der Baustein verfügt über ausreichend freie
I/O-Leitungen, die zur Steuerung von externer Hardware verwendet
werden können - in unserem Fall ist daran der Controller SJA 1000
zur Ansteuerung des CAN Feldbusses angeschlossen. Die Aufgabe wird
sein, einen Gerätetreiber unter Linux zu entwickeln, der die
Kommunikation mit dem AN2131 in das Betriebssystem integriert. Dazu
gehört auch die Programmierung des 8051 Prozessor-Kerns im AN2131
in Assembler und/oder C.
1 Die Aufgabe
In Abb. 1 sehen Sie den Prototypen des USB-zu-CAN
Konverters. In der Mitte ist das USB-Modul der Firma
Braintechnology, das im wesentlichen den SMD-Baustein AN2131 in der
Mitte enthält. Über zwei DIL Kontaktleisten ist das Modul mit der
Lochrasterplatine verbunden. Unten ist der Philips 82C200 CAN
Controller-Baustein zu sehen (ein Vorgänger des SJA1000). Oben ist
ein Lattice isp1016 CPLD als Glue-Logic zur Ansteuerung des
82C200. Der 10-polige Steckverbinder links oben dient zur
Programmierung des CPLD.
Momentan fehlt im Prototypen noch der CAN-Bus Transceiver (ein Philips
82C150) und der CAN-Bus Stecker.
Abb. 1: Der USB/CAN Prototyp.
Wir verwenden statt des gezeigten 82C200 CAN Controllers einen SJA1000. Der
Atmel AVR Baustein hat mit der CAN Schnittstelle nichts zu tun, sondern diente
in einem anderen Projekt (,,avrpipe''), um USB direkt an einen AVR zu koppeln.
[board.jpg]
Ihre Aufgaben werden sein:
- Das Programm für den AN2131 schreiben. Dieses Programm wird in
8051 Assembler geschrieben, unter Umständen können Teile davon
auch in C geschrieben werden. Das Programm wird die Kommunikation
auf dem USB-Bus abbilden auf Registerzugriffe des CAN-Bus Controllers.
Sie werden dazu die Werkzeuge asx8051 und sdcc unter
Linux verwenden.
- Den Linux Gerätetreiber schreiben. Dieser Treiber wird die
Kommunikation mit dem CAN-Bus übernehmen. Neben den üblichen
Treiberaufgaben wird es auch dazugehören, den AN2131 nach dem
Einschalten zuerst mit dem im ersten Aufgabenteil geschriebenen
8051 Programm über den USB-Bus zu laden.
1.1 Literatur
- Die USB Homepage ist http://www.usb.org. Hier gibt es die
Spezifikation zum freien Download (387 Seiten in der Version 1.1).
- Auf der Webseite von Cypress, http://www.cypress.com,
finden Sie das Datenblatt des ,,Easy-USB'' (EZ-USB) Bausteines
AN2131.
- Die Homepage der Firma Braintechnologie, die das USB
Prototypenmodul mit dem AN2131 herstellen, ist
http://www.braintechnology.de.
- Ein Tutorial für den 8051 Prozessor gibt es hier:
http://www.8052.com/tut8051.phtml
- Brad Hards, The Linux USB sub-system, Sigma Bravo Pty
Ltd. Diesen Text gibt es frei auf http://www.linux-usb.org/.
- Detlef Fliegl, Programming Guide for Linux USB Device
Drivers, 2000, http://usb.cs.tum.edu/download/usbdoc/.
- Für Linux gibt es folgende Pakete, die den AN2131 ansteuern. Es
lohnt sich auf alle Fälle, diese Software zum Einstieg zu studieren:
- Serai von Bernd Porr,
http://www.cn.stir.ac.uk/~bp1/ezusb/. Serai ist
ursprünglich ein USB-Projekt von Bernhard Kainka, der allerdings nur
Treiber für Windows zur Verfügung gestellt hat. Bernd Porr hat
die Treiber für Linux geschrieben.
- Das ,,usbstress'' Paket von Thomas Sailer, sailer@ife.ee.ethz.ch.
Dieses und ähnliche Pakete wie z.B. usbutils gibt es unter
http://usb.cs.tum.edu/download.html.
- USB By Example, http://www.usb-by-example.com/Examples/
- Das Datenblatt des CAN Controllers SJA1000 finden Sie auf der
Philips Homepage (oder durch eine Suche mit Google). Dieser Baustein
ist anschlusskompatibel mit dem älteren 82C200.
File translated from
TEX
by
TTH,
version 3.13.
On 5 Jun 2004, 10:45.