Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03408.jsonl.gz/1936

Posts tagged USB
Diese Anwendung habe ich für eine Ausstellung im Auftrag von Iris Rennert erstellt. Es handelt sich dabei um einen “Teppich” mit Kontaktschaltern/Sensoren, die Audio-Samples ab einer SD-Karte mehrstimmig (polyphon) abspielen.
Die Anlage besteht aus einer mehrschichtigen Kunststoffmatte, einer Steuerung und einem Verstärker- / Lautsprechersystem.
Mit einem Laptop werden die letzten Programmupdates über USB auf die Steuerung übertragen.
Die Steuerung besteht aus einem TMS320C5515 eZdsp USB Stick und dem Prototypen eines I/O Boards.
Das I/O-Board ist bestückt mit 3 8-Kanal-CMOS-Multiplexern (4051) und hat 22 Eingänge für Sensoren.
Eine Vorgängerversion des I/O-Boards arbeitete mit 4 Analogeingängen und “Analog-DACs” aus Widerstandreihen. Diese Idee habe ich nicht weiter verfolgt, weil die gemessenen Spannungwerte zu ungenau waren um die einzelnen Tastendrucke auseinanderzuhalten.
Eine Nebenaufgabe war, die SD-Karte direkt über USB von einem Hostrechner aus beschreiben zu können. Hierzu muss die USB-Hardware des DSP als “USB Mass Storage” konfiguriert werden.
Heute ist es mir gelungen, basierend auf dem USB Demo des C5515 Boards ein eigenes Projekt zu erstellen, dass kompiliert, und sich danach unter Windows 7 als USB MASS STORAGE Device anmeldet. Ich habe hierzu lediglich die USB Deskriptoren leicht modifiziert, gemäss folgender Spezifikationen:
Es stellen sich nun verschiedene Fragen:
- Wie funktioniert der USB-Interrupt-Mechanismus genau? Das Demo definiert keine ISR-Vektoren, sondern loopt lediglich in einer Endlosschleife durch eine pseudo USB-ISR. Hierzu habe ich folgendes Dokument gefunden: Setting up TMS320 DSP interrupts in C (focus.ti.com/lit/an/spra036/spra036.pdf )
- Welchen MASS STORAGE transport Standard soll verwendet werden (bInterfaceSubClass)? Beim Beispiel hat 06h ( SCSI transparent command set) funktioniert, 00h ( SCSI command set not reported ) hat nicht funktioniert.
- Teilweise beantwortet: www.lvr.com/mass_storage_faq.htm
- Die USB-Funktionalität ist spärlich dokumentiert. Auf der Suche nach weiteren Hinweisen habe ich folgende interessanten Dokumente gefunden:
- TI Prozessor Wiki Seiten: processors.wiki.ti.com/index.php/Category:C5000, processors.wiki.ti.com/index.php/C5504/05/14/15_Training
- TI Lernmaterial: www.ti.com/ww/eu/university/roms.html
- Elektor Artikel zum erstellen eines MP3-Players auf meinem Testboard: www.elektor.com/magazines/2011/march/mp3-one-two-three.1706996.lynkx
Bei der Evaluation des Testhardware standen folgende Kandidaten in der engeren Auswahl. Es ergab sich eine Rangliste:
- eZDSP TMS320C5515: erste Wahl, verfügt über vielfältige Möglichkeiten, insbesondere programmierbare USB-Schnittstelle und Micro-SD Slot.
- eZDSP TMS320VC5505: Geeignet, aber ohne USB und SD-Karten Unterstützung.
- Beagleboard: wenig Informationen vorhanden, Linux-basiert daher tendenzieller Universalrechner mit hohem Software-Overhead
- Arduino: viel zu langsam
Wie sich heraus stellt, ist die ursprünglich intuitiv gewählte Speicher-Technologie der SD-Karte nicht frei, d.h. es steht eine Organisation dahinter, die eine Lizenzgebühr für die vollständige Dokumentation und für den Einsatz in Produkten verlangt. Ausserdem wird eine proprietäre Steckverbindung verwendet, die teuer und nicht so einfach erhältlich ist.
Als sinnvolle Alternative dazu bietet sich an, einen Onboard-Flash-Memory Chip zu verwenden. Ein solcher ist auf dem eZdsp-Board vorhanden. Dazu müsste ich eine USB-Anbindung schreiben, so dass unser Board sich als USB-Memory-Stick an einem Host anmelden kann. Diese Technologie zu ergründen und zu beherrschen ist sehr spannend, denn USB ist ein freier und weit verbreiteter Standard.
Aufgrund dieser Erkenntnis verzichte ich auf eine weitere Entwicklung mit der SD-Karte.
In folgendem Archiv findet sich ein USB-Stick Codebeispiel, das allerdings für ein C5515-Board geschrieben ist. Es ist jedoch ein Einstiegspunkt. Ich werde nun versuchen, dieses Beispiel auf unser VC5505-Board zu portieren.
Ausserdem habe ich schon mal die USB2.0-Spezifikationen besorgt:
Erkenntnisse:
- USB kann auf dem VC5505-Board nicht getestet werden, da die benötigten Anschlüsse an der CPU gegen Masse verdrahtet sind (Schema Seite 3, Pins G13,J12,H14,G8…). Ausserdem würde ein zusätzliches 12-MHz-Quarz benötigt.
- Bis auf eine höhere maximale Taktfrequenz (C5515: 120 MHz, VC5505: 100 MHz) sind die beiden CPUs identisch.
- Die CPUs verfügen über einen SD-Card Controller, der auch im SD-Modus funktioniert
- VC5505 scheit ein Auslaufmodell zu sein und wird vom Hersteller nicht für Neuentwicklungen empfohlen. Nachfolgermodell wäre C5505, C5515 ist ähnlich
Weiteres Vorgehen: Besorgen des C5515-Testboards: ch.farnell.com/spectrum-digital/c5515-ezdsp-usb-stick/entwicklungsboard-ezdsp-usb-stick/dp/1831928