USB-Stick am Mikrocontroller

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

Allgemeine Funktionsbeschreibung

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.

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


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 IC ab ca. 10 Euro.

Im Beispiel wurde als Zielsystem 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 Software auch mal Testweise auf 24MHz erhöht, was ohne Software-Änderung auch funktionierte.

Stromlaufplan

Hier der Stromlaufplan 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, C2C 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 offenbar einen ziemlich großen FIFO hat. Ein "Tx-Buffer voll" konnte ich nie erreichen.

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 schaltet LED D1 zur Fehlersuche dauerhaft ein.

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. Dies ist hilfreich bei der Inbetriebnahme und zum verstehen der Arbeitsweise.

Software

Es wird vorausgesetzt, das 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.

Das Beispielprogramm ist in Ansi-C geschrieben und mit SDCC kompiliert. Es belegt inkl. der LCD-Funktionen und Test-Filedaten ca. 6Kbyte FLASH und 160Byte RAM. Eine Protierung auf andere Mikrocontroller sollte problemlos möglich sein. Spezielle SFR- und Zusatzkomponentennutzung wurde weitgehend vermieden. Das Programm läuft in einer Endlosschleife und dürfte leicht zu verstehen 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. Alle Funktionen habe ich mit der Version 3.66 ausprobiert.

Firmwaremeldung nach FWV-Kommando

Die danach folgenden Softwareteile zeigen, wie man eine Datei auf dem USB-Stick erzeugt bzw. einliest.

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!)

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

Ausblick

Die Software wurde mit 5 unterschiedlichen USB-Sticks von 512MByte bis 16GByte getestet und funktionierte jedesmal ohne Änderungen. FAT16-Systeme sind schneller als FAT32-Systeme. Ich habe während der Testphase, auch bei gravierenden Softwarefehlern, niemals ein Dateisystem auf den 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: matthiask (az51@gmx.net)

Links / Download