MP2103-Stick: Ein Mini-Mikrocontroller-Board mit USB und bis zu 4MB Datenspeicher
von Mario Pieschel
Einleitung
Der MP2103-Stick ist ein kleines Arm7-Mikrocontroller-Board, welches sehr einfach und damit sehr billig gehalten wurde. Jeglicher Schnickschnack wurde weggelassen und möglichst viele Pins des Mikrocontrollers zu den beiden Steckverbindern geführt. Als Mikrocontroller kommt der LPC2103 von NXP zum Einsatz. Viele Mikrocontroller-Anwendungen sind als Stand-Alone-Anwendungen konzipiert – der MP2103-Stick nicht!!! Er soll mehr als Interface-Baustein für den PC gesehen werden. Anwendungsbereiche sehe ich überall dort, wo irgendetwas mit dem PC elektrisch verbunden werden soll, was sich sonst nicht mit diesem über die herkömmlichen PC-Schnittstellen verbinden lässt. Da der LPC2103 über eine mannigfaltige Peripherie verfügt (digitale Ein/Ausgänge, ADC, Timer, I2C, SPI/SSP, PWM, RTC), sehe ich fast keine Grenzen in seinem Einsatzspektrum. Überall wo der PC steuern, regeln und/oder messen soll, könnte der MP2103-Stick zum Einsatz kommen. Die Daten feuern vom und zum PC mit einer Datenübertragungsgeschwindigkeit von fast bis zu 1 Megabit pro Sekunde! Für eventuelle Kalibrierdaten oder andere individuelle Daten für das zu betreibende Gerät steht ein bis zu 4 Megabyte großer Datenspeicher zur Verfügung. Für den MP2103-Stick wird kein spezielles Programmiergerät benötigt – er wird einfach an einen USB-Anschluss eines PCs angeschlossen und das war’s. An ein bestimmtes Betriebssystem des Ziel-PCs ist man ebenfalls nicht gebunden, da für den eingesetzten USB-Baustein (FT232) Treiber für alle gängigen Betriebssysteme vom Hersteller FTDI-Chip angeboten werden.
LINK: MP-Stick mit ARM Cortex-M3 (STM32F103CBT6)
Funktionsmodell des MP2103-Stick
LINK: Datasheet und Anwendung vom AT45DBxxx
Schaltungsbeschreibung
Die Schaltung des MP2103-Sticks gliedert sich in fünf Funktionsgruppen.
1. Dem Mikrocontroller LPC2103 von NXP (IC3) mit seiner Grundbeschaltung (dem so genannten Hühnerfutter), den beiden Quarzen (Q2: 14,7456MHz und Q1: 32,768kHz), dem Anschluss für eine Real-Time-Clock-Batterie und den beiden Anschlussleisten CON1 und CON2 für externe Elektronik.
2. Dem USB-IC FT232RL (IC4) mit Hühnerfutter und der USB-Buchse.
3. Dem 4 Megabyte großen Datenspeicher AT45DB321 von Atmel (IC2) mit Hühnerfutter. Es sind auch die kleineren Varianten z. B. AT45DB161 (2MB) und AT45DB081 (1MB) möglich. Der AT45DB642 (8MB) hat leider ein anderes Gehäuse - Das Löten geht dann nur mit etwas Geschick.
4. Der Reset-Automatik für Normalbetrieb und Programmiermodus mit Signal-LED (die Schaltung oben rechts).
5. And last but not least die Mikrocontroller-Core-Spannungsversorgungsschaltung von 1,8 Volt mit LM317D oben links.
Schaltplan
Der Mikrocontroller benötigt vier Betriebsspannungen:
– VDD1.8, für den Core an Pin 5 (1,8 Volt)
– VDD3.3, für dessen Peripherie an Pin 17 und 40 (3,3 Volt)
– VDDA, für die analogen Komponenten an Pin 42 (3,3 Volt)
– VBAT, für die Real Time Clock an Pin 4 (3,3 Volt)
Die Core-Spannung wird mit dem LM317 erzeugt und mit den Widerständen R1 und R2 fest eingestellt. Die 3,3 Volt werden im FT232RL erzeugt. VDDA wird über den Widerstand R10 von VDD3.3 bezogen. VBAT wird über die Diode D2 von VDD3.3 oder von einer externen Backup-Batterie versorgt. Die Kondensatoren an den Versorgungsspannungen dienen der Entkopplung von Störsignalen und damit dem sicheren Betrieb des LPC2103. R1! und R2! mit je Null Ohm in den beiden Spannungsversorgungsleitungen VDD1.8 und VDD3.3 dienen dem Schutz des Mikrocontrollers bei Inbetriebnahme des MP2103-Sticks. Sie sollten erst ganz zum Schluss eingelötet werden – erst wenn alle Spannungen überprüft und OK sind. Dem Mikrocontroller wird mit dem Quarz Q2 (14,7456 MHz Grundton) sozusagen das Leben eingehaucht. Er erzeugt den Takt für den LPC2103. Durch den Multiplier in diesem kann das System mit bis zu 4 x 14,7456MHz = 58,9824MHz betrieben werden. Der krumme Wert von 14,7456MHz ist einzig und allein für die Kommunikation zum PC über die UART0 und USB von Nöten. Q1 ist ein normaler Uhren-Quarz mit 32KHz für die interne Echtzeituhr. An CON1 und CON2 gehen fast alle Pins des Mikrocontrollers. CON1 und CON2 sind im Raster 2,54mm auf der Leiterplatte angeordnet, so dass eine Lochraster-Leiterplatte auf den Stick gesteckt werden kann. Die Kommunikation mit einem PC/Labtop erfolgt mit dem seriellen Port UART0 des LPC2103 (Pin 13 und 14) über den USB-zu-seriell-Umsetzer FT232RL (IC4). Dort gehen die beiden Signale (Leitungen) RXD und TXD gekreuzt an die Pins 1 und 5. Die beiden Handshake-Signale RTS und DTR sind über den Dip-Schalter S2 mit der Reset-Automatik oben rechts verbunden. Die beiden Datenleitungen USBDM (Pin 16) und USBDP (Pin 15) sind direkt mit der USB-B-Buchse (Pin 2 und 3) verbunden. VDD (5 Volt) kommt von Pin 1 der USB-B-Buchse über L1 (Entstörung) und geht an Pin 20 von IC4 und an Pin 16 von CON2 zur Außenwelt. Aus Sicherheitsgründen sind die 3.3 Volt nicht nach außen geführt. Wenn man auf seiner externen Schaltung 3,3 Volt benötigt, kann man dieses sehr einfach mit einem weiteren LM317 mit angepassten Widerständen bewerkstelligen. Die Reset-Automatik oben rechts im Schaltplan sorgt bei geöffnetem Dip-Schalter S2 und nicht gestecktem Jumper auf BSL_HAND (BSL = Bootstrap Loader: Urlader) für ein ordnungsgemäßes Starten des Mikrocontrollers im Normalbetrieb. LED1 kann dann in einem Programm als Signallampe benutzt werden. Wird der Jumper BSL_HAND gesteckt geht der Mikrocontroller sofort nach einem Reset-Impuls an Pin 6 in den Bootloader-Modus. Es kann sofort eine Firmware (das Anwenderprogramm) mit einer Programmer-Software hochgeladen werden. Damit man nicht immer bei der Softwareentwicklung diesen Jumper ständig stecken und abziehen muss, gibt es noch die Programmier-Automatik mittels der beiden Handshake-Leitungen RTS und DTR. Eine Programmer-Software kann diese beiden Leitungen der RS232-Schnittstelle schalten und damit den Mikrocontroller gezielt in den Bootloader-Modus bringen, die Firmware übertragen und anschließend das Programm starten. Der MP2103-Stick muss bei der Softwareentwicklung nicht angefasst werden. Alles geschieht vom PC aus. Im endgültigen Normalbetrieb müssen S2 offen und BSL_HAND nicht gesteckt sein. In welchen Modus der Mikrocontroller geschaltet werden soll entscheidet der Signalpegel an Pin 44 des LPC2103 bei einem Reset-Impuls. High = Normalbetrieb, Low = Bootloader. Sehr einfach gestaltet sich die Beschaltung des externen seriellen Flash-Speichers IC2. Es können die ICs AT45DB321D-SU (4MB), AT45DB161D-SU (2MB) oder AT45DB081D-SU (1MB) eingelötet werden. Dieser ist mit der SPI des LPC2103 verbunden. Wichtig ist R3! Er wird nur bestückt wenn der Speicher schreibgeschützt sein soll.
Eagle-Files
Mechanische Realisierung
Die Leiterplatte sollte von einem Leiterplattenhersteller gefertigt werden. Ich habe die Erfahrung gemacht, dass Anbieter mit Preis-Berechnungen auf Quadratdezimeter-Basis egal mit welchem Inhalt die günstigsten sind. Wichtig ist, dass die Leiterplatten mit Durchkontaktierungen gefertigt werden. Aus Erfahrung rate ich die Leiterplatten mit Lötstopplack fertigen zu lassen. Einfach die Datei „MP03Stick_v1.0.brd“ dem Hersteller schicken.
Board top:
Board bottom:
Stueckliste:
Bestückung der Leiterplatte
Elektronische Bauteile sind durch elektrostatische Ladungen gefährdet. Deshalb ab jetzt mit ESD-Armband und ESD-Unterlage arbeiten!!! Beim Arbeiten mit den kleinen Bauteilen hilft auf jeden Fall ein Briefmarken-Lupen-Headset oder ein Stereo-Mikroskop mit Verstärkungsfaktor 10 (bei ebey ca. 200,- €). Zuerst die beiden großen ICs, IC3 (LPC2103) und IC4 (FT232RL), bestücken. Da es sich um ziemlich kleine und mit hoher Pin-Anzahl versehene elektronische Bauteile handelt, empfehle ich folgende Vorgehensweise: Die Lötpads auf der Leiterplatte für das entsprechende IC reichlich mit dem Lötkolben und Lötzinn (<= 0,5 mm Durchmesser) verzinnen. Die Lötpads sollten glänzen und um ca. 0,1 bis 0,2 mm erhaben sein. Nun die Leiterplatte mit handelsüblichem Brennspiritus reinigen. Jetzt das IC mit ein wenig Klebstoff auf der Leiterplatte fixieren. Ich nehme dafür handelsüblichen Klebestift (Pr…-Stift). Eine kleine Messerspitze voll vom Klebestift auf die Mitte der IC-Position auf die Leiterplatte auftragen, das IC auf die Leiterplatte aufsetzen und positionieren. Es darf auf keinen Fall Klebstoff bis zu den Lötanschlüssen des ICs quellen. Erst mit dem Festlöten beginnen, wenn das IC korrekt auf den Lötpads sitzt und etwas angetrocknet ist. Ab jetzt wird nicht mehr mit Lötzinn gearbeitet – dieses am besten so weit wie möglich weglegen. Die Kapillarwirkung der IC-Anschlüsse ist viel zu groß, diese würden eine weitere Zugabe von Lötzinn sofort dieses zwischen die Lötpins ziehen und damit für reichlich Kurzschlüsse sorgen. Ab jetzt wird nur noch mit Flussmittel gearbeitet, entweder handelsübliches Flux oder Kolofonium (in Brennspiritus aufgelöst) nehmen. Ist das IC korrekt positioniert und fixiert mit dem Festlöten beginnen. Jeden einzelnen IC-Anschluss mit dem heißen Lötkolben und wenig Druck in Richtung Leiterplatte anlöten. Wichtig ist wirklich, sich damit Zeit zu lassen und darauf zu achten, dass das Lötzinn richtig fließt. Sollte bei einem der hier beschriebenen Arbeitsschritte etwas schief gehen, unbedingt die Arbeiten abbrechen, alles reinigen und von Anfang beginnen. Sind IC3 und IC4 erfolgreich auf die Leiterplatte gelötet können alle anderen Bauteile bestückt und gelötet werden. Wichtig: „R1!“, „R2!“ und „R3!“ nicht bestücken!!! Die voll bestückte Leiterplatte gründlich mit Brennspiritus und einem kleinen Pinsel reinigen. Die Leiterplatte wegen der Buchsen und Schalter/Taster nicht im Reinigungsmittel baden. Das Reinigungsmittel nicht abtrocknen lassen sondern mit Druckluft entfernen. Es werden so unschöne Flecken vermieden. Sollte der Stick in rauer Umgebung betrieben werden ist das Lackieren mit farblosem Leiterplattenlack sinnvoll.
Optische Prüfung
Jetzt sollte eine ausgiebige Fehlersuche auf Kurzschlüsse, kalte Lötstellen, Verpolung von Bauteilen und richtiger Bestückung erfolgen. Entweder mit einer großen Lupe oder einem Stereo-Mikroskop mit Vergrößerungsfaktor 10.
Alle weiteren Arbeitsschritt erst nach vollständiger Trocknung des Stick durchführen.
Elektrische Inbetriebnahme
Für erste Tests ist es am Besten den Stick mit einem Strom geregelten Netzteil über die USB-Buchse (Pin1 +5V, Pin4 Masse) zu verbinden; den Strom auf 50 mA begrenzen und 5 Volt einstellen. Nach Einschalten sollte ein Strom von ca. 10 bis 20 mA fließen und die anliegende Spannung weiterhin 5 Volt betragen. Bricht die Spannung zusammen auf keinen Fall die Strombegrenzung erhöhen sondern auf Kurzschlusssuche gehen. Fließt zu wenig Strom oder keiner kalte Lötstellen suchen. Ist kein Netzteil vorhanden, einfach drei kleine billige Knopfzellen á 1,5 Volt in Reihe schalten und den Strom mit einem Multimeter messen. Stimmt der Strom und liegen die 5 Volt an, die Spannungen an den Testpunkten TP1 bis TP4 überprüfen. Bezugspunkt ist TPM (Masse). Folgende Spannungen sollten gemessen werden:
TP1 = 1,8 Volt
TP2 = 3,3 Volt
TP3 = 5 Volt (oder 4,5V bei der Variante mit den drei 1,5V Knopfzellen)
TP4 = 3,3 Volt
Wenn diese Spannungen OK sind kann der Stick an den PC/Notebook über ein USB-Kabel angeschlossen werden. Nun sollte das Betriebssystem (Windows, für WinCE, Linux und Mac weiß ich es nicht) melden, dass neue Hardware erkannt wurde. Jetzt kann der Treiber für den FT232RL installiert werden. Den Treiber (Virtual COM Port, VCP) von der Herstellerseite downloaden – die Vorgehensweise ist dort ausführlich beschrieben. Nach erfolgreicher Installation des Treibers sollte im Hardwaremanager ein neuer COMx-Port zu sehen sein. Die COM-Nummer sollte man sich merken. Windows registriert für jede USB-Schnittstelle eine andere COM-Port-Nummer, was zu Verwirrung beim Umstecken führen kann. Damit sind aber auch mehrere Sticks anschließbar.
LINK: die Treiber für den FT232RL
LINK: Driver Installation Guides
Sind alle Tests und Arbeitsschritte bis hier OK können die beiden Widerstände „R1!“ und „R2!“ eingelötet werden um den Mikrocontroller mit Strom zu versorgen. Es sollte ein Strom zwischen 20 und 40 mA fließen, wenn nicht: Fehlersuche nach Kurzschlüssen, kalten Lötstellen, verpolten Bauteilen und falscher Bestückung. Sind die beiden Dip-Schalter von S2 offen (nicht auf ON) und der Jumper BSL_Hand gezogen sollte die LED leuchten.
Firmware Upload
Zum Hochladen der Firmware benötigt man das Programm Flash-Magic-Tool.
Die Einstellungen sind folgende:
Unter „Step 1 - Communications“:
Com Port: der COMx-Port, an dem der MP2103-Stick angeschlossen ist. Im Hardwaremanager nachsehen!
Baud Rate: 115200
Device: LPC2103
Interface: None (ISP)
Oscillator Freq. (MHz): 14.7456
Unter „Step 2 - Erase“:
Ein Hägchen hinter: „Erase all Flash+Code Rd Prot“
Ùnter „Step 3 – Hex File“:
Das Hex-File, welches hochgeladen werden soll.
Unter „Step 4 – Options“:
Hinter „Verify after programming“
Unter Adanced Options im Formular „Hardware Options“ ein Häckchen hinter „Use DTR and RTS to control RTS and P0.14“
Jetzt am Besten erst einmal testen, ob sich der Mikrocontroller meldet. Die beiden Dip-Schalter von S2 müssen auf „ON“ stehen und Jumper „BSL_HAND“ muss gezogen sein. Flash Magic starten, die Einstellungen wie oben und in der Menüleiste „ISP“ den Menüpunk „Read Device Signatur“ anwählen. Der Mikrocontroller muss in dem sich öffnenden Fenster die Divice-ID und die Bootloaderversion liefern. Meldet Magic Flash einen Fehler: Fehlersuche. :O(
Den Firmware-Upload startet man mit dem Button "Start" unter "Step 5 - Start!" im Falsh Magic.
Ein weiteres Flash-Tool ist das „LPC2000 Flash Utility“ von Philips, welches leider nicht mehr weiterentwickelt wird. Es ist aber in der Auswahl der COM-Ports begrenzt (COM1 bis COM5). Im Geräte-Manager von Windows müssen bei Bedarf Änderungen an der COM-Port-Nummerierung vorgenommen werden. Bis auf diesen Makel ist dieses Tool schnell und unkompliziert.
Testprojekt
Hier ein kleines Testprogramm als Basis für eigene Projekte. Es lässt die LED blinken und kommuniziert über die serielle Schnittstelle.
Einstellungen im Hyperterminal:
Baud Rate (Bits pro Sekunde): 921600
Einstellungen/Emulation: ANSI
Die genauen Einstellungen befinden sich im Projekt unter MP2103-Stick_921600_baud.ht.
Compiliert wird das Projekt mit WinARM oder Yagarto.
Compiler und IDE (neu)
Die Integrierte Entwicklungsumgebung von Raisonance, Ride7 und RKit-ARM, umfasst einen voll funktionsfähigen und Code unbegrenzten GNU C/C++-Compiler und das Raisonance Integrated Development Environment (RIDE). Über eine grafische Benutzeroberfläche wird die Bedienung der Softwareentwicklungs-Tools (Compiler, Assembler, Linker und Simulator) ermöglicht. Für die Softwareentwicklung und Kompilierung vom C-Source-Code bis hin zum endgültigen HEX-File besteht keine Codegrößenbegrenzung, lediglich das Debugging ist bis 32kByte begrenzt. Das ist aber hier nicht von Belang, da mit dem Bootloader des Mikrocontrollers geflasht wird.
Auf der Page von Raisonance.com anmelden und die Files "RKit-ARM" (GCC) und "Ride7" (IDE) downloaden und installieren. Zuerst RKit-ARM dann Ride7. Der Umgang mit diesen Programmen ist super einfach - keine Rumquälerei mit Makefiles und solcherlei Teufelszeug - alles ist bereits Mundgerecht von Raisonance zugeschneidert. Sehr empfehlenswert! Ride7 ist eigentlich nicht für den LPC2103 ausgelegt, aber mit ein wenig Überredungskunst geht dieses auch.
LINK: Compiler und IDE Ride7 von Raisonance.com
LINK: Getting Started with ARM & Ride7 User manual
Und wie einfach alles ist zeigt dieses Beipiel-Projekt:
LINK: Hello-World-Projekt mit Ride7
Da in Ride7 kein serielles Upload-Tool für den MP2103-Stick integriert ist, kann zum Hochladen der Firmware (Hello_World.hex) „LPC2000 Flash Utility“ von Philips oder Flash-Magic genommen werden.
Fazit
Es wurde ein kleines Arm7-Mikrocontroller-Board mit beachtlichen Leistungsmerkmalen und sehr geringen Herstellungskosten vorgestellt.
32-Bit-Mikrocontroller 14,7456 bis 58,9824 MHz
32 kByte Flash-ROM
8 kByte RAM
bis zu 4MByte Flash-Datenspeicher
jeder Menge Peripherie
Es kann als Standard-Interface-Modul für den PC eingesetzt werden. Es ist so konzipiert, dass es in ein Gehäuse eingebaut und mit vier M2-Schrauben befestigt werden kann. Auf den beiden Wannensteckerleisten CON1 und CON2 kann ein Tochterboard über zwei 16-polige Pfostenbuchsenleisten mit individueller Elektronik aufgesteckt werden (conrad.de Artikel-Nr.: 738501-62).
Ich stelle mir folgende Einsatzbeispiele vor:
Interface für einen Roboter
Logik-Analysator
Datenlogger für analoge Signale
Oszilloskop
Einsatz in Computer gesteuerten Messgeräten
CNC-Maschinen
usw.
Überall, wo ein Interface für den PC benötigt wird, kann der MP2103-Stick eingesetzt werden. Im Stick laufen nur die Treiber für die Peripherie und eine Transport-Routine für die Rohdaten vom und zum PC - die eigentliche Software läuft auf dem PC.
Übrigens:
Der Board-Computer der Mondlandefähre von Apollo 11, der "Apollo Guidance Computer", hatte einen 16-Bit-Computer mit 2,048 MHz, 72 kByte ROM und 4 kByte RAM.