USB-Stick am Mikrocontroller

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Allgemeine Funktionsbeschreibung

- AVR/GCC-Version im Projektarchiv verfügbar -

Das Projekt demonstriert an einem Hard- und Softwarebeispiel die Verwendung von USB-Sticks an Mikrocontrollersystemen. Es ist nicht als fertiges Projekt zu betrachten, sondern soll eine Grundlage zur Realisierung eigener Anwendungen sein. Die Software liegt in einer 8051er/SDCC und einer AVR-GCC Version vor.

Ansicht des Testaufbaues

Dazu ist ein USB-Hostcontroller erforderlich. Die meisten Mikrocontroller mit integrierten USB-Port, bzw. Lösungen mit FT232-Bausteinen, bieten keine Host-Funktionalität. Es wird der Typ VNC1L-1A von FTDI (Vinculum) eingesetzt.

Dieser IC hat folgende Eigenschaften:

  • USB 2.0 Host- und Slave-Funktionalität
  • 2 USB-Ports mit Low- und Full-Speed
  • UART-, SPI- und Parallelinterface
  • zusätzliche, frei verwendbare I/O-Ports
  • integrierter 8Bit Mikrocontroller und 32Bit Aritmetik-Prozessor
  • interner DMA-Controller, 64kByte Flash, 4kByte SRAM
  • Firmware für FAT16 und FAT32 Support kostenfrei Verfügbar
  • 3.3V (25mA) Versorgungsspannung, I/O-Pins sind 5V tolerant
  • wenige externe Bauteile erforderlich

Leider ist der IC nur in SMD (LQFP-48 Gehäuse) erhältlich.

Hardware

Zum Einsatz kommt ein fertiges Modul VDIP1. Dieses enthält auf einer kleinen Platine einen VNC1L-1A mit allen erforderlichen Zusatzbauteilen. Werksmäßig ist auch die passende Firmware (VDAP) bereits programmiert.

VDIP1-Modul
  • VNC1L-1A
  • Quarz 12MHz (per interne PLL auf 48MHz vervielfacht)
  • 3.3V Spannungsregler
  • 2 Jumper für die Interfaceeinstellung
  • USB-A Buchse
  • komplette Schutzbeschaltung
  • 2 Status-LEDs
  • 2x 12 Stifte im DIP24 IC-Format
  • VDAP Firmware und Bootloader bereits vorinstalliert
  • Updatefähig über USB-Stick

VDIP1-Schaltung (PDF) / VDIP1-Datenblatt (PDF)

Das VDIP1-Modul ist für Experimente gut geeignet, zumal es die VDAP-Firmware bereits enthält. (Das flashen eines leeren VNC1L-1A ist dagegen nicht gerade einfach!) Bezug ist über diverse Elektronikversender möglich. Preis: VDIP1 ca. 25 Euro, VNC1L-1A als einzelner IC ab ca. 10 Euro. Bezugsquellen befinden sich im Diskussionsbeitrag, siehe unten.

Im Beispiel wurde als Zielsystem (8051) eine universelle Mikrocontroller-Platine PRO-51 mit 8051-Mikrocontroller verwendet. Es kann natürlich jeder andere Mikrocontroller eingesetzt werden. Besondere Leistung ist nicht erforderlich. Die Taktfrequenz beträgt im Bsp. 11.0592MHz und ist unkritisch. Ich habe die Frequenz auch mal Testweise auf 24MHz erhöht, was ohne Software-Änderung auch funktionierte.

Für die AVR-Version habe ich einen ATmega644 verwendet. Auch andere AVRs sollten funktionieren. Getestet mit unterschiedlichen Taktfrequenzen (1MHz, 8MHz, 11.0592MHz). Beim Einsatz des UART-Monitoring sollte unbedingt ein externer Quarz angeschlossen werden.

Stromlaufplan 8051

Stromlaufplan (8051) als PDF.

Stromlaufplan AVR

Stromlaufplan (AVR) als PDF.

Zu Übertragung wird die SPI-Schnittstelle verwendet. Das SPI-Handling ist komplexer als beispielsweise die UART-Schnittstelle, hat aber den Vorteil, dass die wertvolle Mikrocontroller-UART für andere Anwendungen erhalten bleibt.

Nicht vergessen, die Jumper J3 und J4 des VDIP1-Moduls auf SPI zu stecken!

Das VNC1L-1A SPI-Protokoll weicht erheblich von dem üblichen SPI ab. Es ist ehr eine Mischung aus SPI-, I2C- und UART-Eigenschaften und Bedarf einiger Aufmerksamkeit. Wenn es einmal läuft, dann jedoch sehr stabil und bis 12MHz Busfrequenz schnell. Delays sind kaum notwendig. Da immer 13 Bit übertragen werden, ist eine Hardware-SPI auf Mikrocontrollerseite nicht nutzbar. Das Timing wurde über normale Port-Pins per Software nachgebildet.

Der Mikrocontroller ist Master, der VNC1L-1A Slave. Zum senden eines Zeichens an den VNC1L-1A ist dies ideal, schwieriger erscheint das Empfangen von Zeichen vom VNC1L-1A, da dieser keinen Interrupt-Pin hat, welcher das Vorhandensein neuer Zeichen signalisiert. Der VNC1L-1A muss dennoch nicht ständig vom Mikrocontroller auf neue Zeichen gepollt werden, da er einen ziemlich großen FIFO hat. Ein "Buffer voll" wird vom Programm erkannt und entsprechend gewartet.

Jedes übertragene Zeichen wird vom VNC1L-1A im Status-Bit sofort auf Akzeptanz bestätigt, ähnlich dem Acknowledgment-Bit des I2C-Buses. Ein nicht bestätigtes Zeichen wird erneut gesendet.

Das Testsystem benutzt zur Anzeige ein alphanumerischen LC-Display mit 4x20 Zeichen, konkret ein DIP204-4 von EA, mit KS0073 Controller. Die Anschaltung und der Betrieb ist Standard und nicht Thema dieses Beitrages. Alle an den VNC1L-1A gesendeten und von ihm empfangenen Daten können bei Bedarf auf dem Display angezeigt werden.

Ebenfalls möglich ist UART-Monitoring über die serielle Schnittstelle. Alle gesendeten und empfangenen Zeichen werden hierbei ebenfalls übertragen.

Beide Funktionen sind hilfreich bei der Inbetriebnahme und zum verstehen der Arbeitsweise.

Software

Es wird vorausgesetzt, dass auf dem VNC1L-1A die VDAP Software bereits installiert ist. Dies ist auf einen VDIP1-Modul werkseitig der Fall. Meist ist jedoch eine ältere Version drauf. Das sollte man auch erstmal so lassen.

Der Stick muss mit FAT16 oder FAT32 formatiert sein. Es wird nur die erste primäre Partition unterstützt. NTFS oder andere Dateisysteme werden nicht erkannt.

Die VDAP-Firmware stellt praktisch alle Funktionen zum Zugriff auf dem USB-Stick bereit. Kenntnisse des FAT-Dateisystems sind nicht erforderlich. Die Firmware arbeitet im Prinzip wie ein Monitorprogramm mit DOS-ähnlichen Kommandos. Nach einem erfolgreichen Kommando meldet sich die Firmware mit einen 'D:\>' zurück.

Die Beispielprogramme sind in Ansi-C geschrieben und mit SDCC bzw. GCC kompiliert. Sie belegen inkl. der LCD-Funktionen und Test-Filedaten ca. 7Kbyte FLASH und 270Byte RAM (8051) und ca. 700Byte SRAM (AVR), mit Einsparpotential. (Auf PROGMEM-Nutzung wurde bisher verzichtet.) Eine Portierung auf andere Mikrocontroller sollte problemlos möglich sein. Spezielle SFR- und Zusatzkomponentennutzung wurde weitgehend vermieden. Das Programm dürfte leicht zu verstehen sein. Einige Erfahrungen sollten jedoch schon vorhanden sein.

Zunächst werden ein Reset des VNC1L-1A und einige Initialisierungen durchgeführt:

  • ECS - erweitertes Kommando-Set einstellen
  • IPA - alle Zahlen werden als ASCII übertragen
  • FWV - Anzeige der Softwareversion
  • DIR - Anzeige des Stickinhaltes

Wenn diese 4 Punkte funktionieren, kann man sich an ein Update der VDAP-Firmware trauen. Dazu die aktuelle Firmware von der Vinculum-Homepage laden (endet mit .ftd), in "ftrfb.ftd" umbenennen und diese Datei ins Root des USB-Sticks kopieren. Der Bootloader flasht die Datei dann automatisch beim nächsten anstecken und quitiert den Vorgang mit der Anzeige CHANGE MAIN. Alle Funktionen habe ich mit der Version 3.66 und 3.68 ausprobiert.

Firmwaremeldung nach FWV-Kommando

Die danach folgenden Softwareteile zeigen, wie man eine Datei auf dem USB-Stick erzeugt bzw. einliest. Hinweis! Nur 8.3 Dateinamen verwenden!

Besonderen Wert sollte man auf die elementaren SPI I/O-Funktionen vnc_wr_byte und vnc_rd_byte legen. Das Datenblatt des VNC1L-1A geht recht detailiert auf das Timing ein. Damit sollte man sich vorab gründlich beschäftigen. (Die Angaben zum SPI im Datenblatt des VDIP1 sind dagegen spärlich und teilweise falsch!)

Die vollständigen Quelltexte sind im Projektarchiv (siehe unten), enthalten. Zusätzlich ist darin ein kleines Testprogramm (AVR) zur Überprüfung der elementaren SPI-Kommunikation enthalten. Es wird ständig ein E(cho) gesendet und empfangen. Dieses Progamm sollte man für den Einstieg und Inbetriebnahme als erstes verwenden. Man kann dann ziemlich sicher sein, dass die Hardware-Verbindung funktioniert.

Das Video zeigt den Ablauf des Beispielprogrammes auf dem LC-Display. Die Pausen zwischen den einzelnen Kommandos wurden zur besseren Demonstration etwas vergrößert.

Video Video ansehen (Länge ca. 1 Minute auf www.youtube.de)

Ein weiteres Video zeigt zum Verständnis das Grundprinzip der Kommunikation mit dem VNC1L, hier über UART und Terminalprogramm auf einem PC.

Video Video ansehen (Länge ca. 1.5 Minuten auf www.youtube.de)

Auf die LCD-Ansteuerung wird hier nicht näher eingegangen.

Ausblick

Die Software wurde mit folgenden USB-Sticks getestet:

  • RUNDISK 512MB FAT16 - ok
  • PLATINUM 2GB FAT32 - ok
  • CNMEMORY 4GB FAT32 - ok
  • TREKSTOR 16GB FAT32 - ok
  • OCZ 8GB (RALLY DUAL-CANAL) FAT32 - kein schreiben möglich

(VDAP-Firmware kann mit Dual-Canal-Technik offenbar nicht korrekt umgehen. Der Stick wird zwar erkannt, ein schreiben war mir jedoch nicht möglich.)

FAT16-Systeme sind schneller als FAT32-Systeme. Ich habe während der Testphase, auch bei gravierenden Softwarefehlern, kein Dateisystem auf dem Stick demoliert, oder fremde Dateien beschädigt. Die VDAP-Firmware scheint recht stabil zu funktionieren. Trotzdem sollte man nicht seinen einzigen Backup-Stick zum testen verwenden...

Mit dem VNC1L-1A können auch andere Geräte, wie z. B. USB-Drucker, Kameras und Handys angesteuert werden.

Über Kommentare und Anregungen bin ich dankbar. Kontakt: Matthias Kahnt / matthiask (az51@gmx.net)
(zum Diskussionsbeitrag im Forum)

Weiterhin ist im "Embedded Projects Journal", Ausgabe 4 ein Beitrag zum Thema "USB-Stick am Mikrocontroller" veröffentlicht wurden. Download: siehe unten.

Links / Download