ARM Cortex Mikrocontroller: Unterschied zwischen den Versionen

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 21: Zeile 21:
== Compiler & Software ==
== Compiler & Software ==


=== [[ARM_GCC|GCC]] ===
sd
Einer der beliebtesten Compiler für ARM-Prozessoren ist der GCC. Er kann sowohl ARM- als auch Thumb-Code erzeugen. Mehr dazu unter [[ARM GCC]].


=== C/C++ IDEs ===
=== C/C++ IDEs ===

Version vom 20. Januar 2017, 16:49 Uhr

Die Firma ARM stellt selbst keine Prozessoren/Controller her, sondern entwickelt nur sogenannte "IP-Cores", die von Herstellern wie Atmel, Infineon, ST, NXP, TI und vielen anderen lizenziert werden. Diese Hersteller ergänzen den Core um Speicher und Peripherie. Der Vorteil dieses Modells ist, dass dadurch sehr viele Prozessoren mit unterschiedlichster Ausstattung verfügbar sind, die alle mit dem selben Befehlssatz (und damit dem selben Compiler) programmierbar sind.

Allen ARM-Cores gemeinsam ist die 32 Bit RISC-Architektur. Für diese gibt es den klassischen 32bit ARM Befehlssatz und den zusätzlichen, kleineren 16/32 Bit Thumb-Befehlssatz. Die verschiedenen Prozessoren/Controller unterstützen einen oder beide davon. Thumb-fähige Controller sind erkennbar am T in der Bezeichnung, z. B. ARM7TDMI. Thumb kodiert die meisten Instruktionen in 16bit, den Rest in 32bit, was in einem kleineren Prozessor und geringenem Platzbedarf des Codes resultiert [1]; der Nachteil ist die etwas niedrigere Geschwindigkeit. Die Cortex-M Kerne unterstützen ausschließlich den Thumb2-Befehlssatz.

Seit einigen Jahren sind ARM-basierte Mikrocontroller erhältlich, die aufgrund der vergleichbar einfachen Beschaltung und niedrigem Stromverbrauch eine echte Alternative zu 8-Bit-Controllern wie dem AVR darstellen. Die ersten Controller mit diesen Eigenschaften verwendeten den ARM7TDMI-Kern (zB. LPC2000) (ARMv4T-Architektur). Mittlerweile wurden diese vom Cortex M-Kern abgelöst (ARMv6M, ARMv7M-Architektur), welcher in verschiedenen Varianten für verschiedene Einsatzzwecke verfügbar ist.

In diesem Artikel geht es primär um die ARM Cortex-M Mikrocontroller, weniger um ARM Cortex-A Prozessoren, welche in Smartphones, Raspberry Pi u.ä. eingesetzt werden.

Es gibt folgende Varianten des Cortex-M Mikrocontroller-Kerns, aufgeführt vom energieeffizientesten zum leistungsfähigsten (Liste nicht unbedingt aktuell! Am besten immer die Herstellerseiten bemühen).

sgdzg

sdg

sdahg

fdhgfg

sd

Compiler & Software

sd

C/C++ IDEs

Kostenlose Entwicklungsumgebungen (überwiegend GCC-basiert):

  • CooCox IDE (Eclipse basierend)
  • GNU ARM Eclipse (Eclipse Plugin)
  • EmBlocks IDE (Basiert auf Code::Blocks)
    • Compiler: GNU ARM-GCC (in der Installation enthalten), RealView und IAR
    • Hardware: STlink (mit "Live data"), openOCD, Jlink.
    • Project Import: CoIDE, uVision, Atmel studio, MplabX, Mplab 8
    • OS aware debugging
      • FreeRTOS
      • ChibiOS/RT
    • Unterstützt sehr viele Controller(-Hersteller):
      • Atmel-ARM
      • NXP-ARM
      • STMicro-ARM
      • EnergyMicro-ARM
    • Keine Beschränkungen
    • Hier gehts zum Download'
  • emIDE Windows, komplette Visual Studio artige Entwicklungsumgebung (basierend auf Code::Blocks) mit GCC und Debugger (Unterstützung für Adapter von Segger)
  • mbed: eine kostenlose Online-Entwicklungsumgebung basierend auf dem ARM Realview-Compiler, mit einer umfangreichen C++-Bibliothek für die Controllerfunktionen, integrierter Versionsverwaltung, und vielen Beispielprogrammen. Projekte lassen sich für Keil/IAR/GCC exportieren und offline weiterbearbeiten; die Bibliotheksfunktionen sind Open Source und auch kommerziell einsetzbar.
  • winIDEAOpenDie Fa. iSystem stellt mit der winIDEAOpen nun eine kostenlose Entwicklungsumgebung für alle Cortex-M Bauteile zur Verfügung. Als Compiler wird der GNU GCC verwendet und auch gleich mitinstalliert. Die IDE ist recht intuitiv und mit einer umfangreichen Hilfe ausgestattet. Das Ganze funktioniert mit dem GCC ohne Codesize Limit und auch ein Testwerkzeug (testIDEA) ist mit integriert. Hardwareseitig werden neben dem iSystem iTag50 [2] auch die Segger J-Link Debug Probes sowie der ST-Link von ST unterstützt. Auf der Webseite von iSystem sind auch einige schöne Beispielprojekte für diverse Boards zu finden [3]. Demnächst soll noch die Unterstützung für die ARM und IAR Compiler hinzuzkommen. Hier gehts zum Download'
  • Infineon bietet für seine XMC Prozessorfamilien auch eine kostenlose, professionell gepflegte C/C++ Entwicklungsumgebung an, ohne Einschränkungen auf bestimmte Typen oder Speichergrößen - alle erhältlichen XMC 1000er und 4000er Prozessoren werden unterstützt. Wenn man sich dazu noch eines der günstigen XMC Evaluierungsboards besorgt (XMC 1100 Bootkit, XMC 4500 Relax (lite) Kit o.ä.), hat man ein erstes Entwicklungssystem inklusive wiederverwendbaren HW-Debugger zur Verfügung. Die Entwicklungsumgebung basiert auf Eclipse, besitzt aber zahlreiche Erweiterungen samt Codegenerierung (sogenannte Apps), die gerade am Anfang viele Dinge abnehmen kann, da man die Peripherals damit einfach grafisch konfigurieren kann. Das ist bei Prozessoren, dessen User Manual einige hundert Seiten ausmacht (oder auch für Umsteiger von 8bitter oder anderen 32bittern), nicht unwichtig. Der generierte Code ist template-basiert, gut lesbar und kann später - wenn man mehr Erfahrung hat, für eigene Entwicklungen weiter nutzen und optimieren. Damit verliert man dann allerdings die Möglichkeit, Updates der generierten Codes aus den Apps zu bekommen, die Infineon ebenfalls kostenfrei zur Verfügung stellt. Die Software nennt sich Digital Application Virtual Engineer (DAVE) und kann nach Registrierung kostenlos für Windows heruntergeladen werden. Innerhalb von Dave kann man dann Apps und viele Beispiele (ohne weitere Anmeldung und Kosten) komplett oder selektiv (für bestimmte Prozessoren) herunterladen. Die aktuell stabile Version ist v3. Es ist eine neue DAVE Umgebung v4 in Arbeit, eine Betaversion kann heruntergeladen werden. Diese neue v4 Variante wird auch ein separates SDK besitzen, um Apps für Dave selbst schreiben zu können (z.B. Bauteilhersteller, die die Anbindung an den XMC für Kunden vereinfachen wollen). Einsteiger sollten aber mit v3 beginnen, um nicht über Bugs der Beta v4 zu stolpern (siehe auch im XMC-Forum).
  • NXP bietet für seine LPC Prozessorfamilien eine kostenlose C/C++ Entwicklungsumgebung an. Die auf Eclipse basierende Entwicklungsumgebung (LPCXpresso) ist nach der Installation bis 8kB freigeschaltet und nach einer einfachen und kostenlosen Registrierung für 256kB. LPCXpresso steht für Windows, Linux und Mac zur Verfügung.
  • ST bietet für seine STM32 Prozessorfamilie eine kostenlose C/C++ Entwicklungsumgebung an. Die auf Eclipse basierende Entwicklungsumgebung kann nach Registrierung auf der Homepage heruntergeladen werden. [4]

Kommerzielle Entwicklungsumgebungen (zum Teil kostenlos mit Einschränkungen) für ARM-basierte Mikrocontroller sind z. B.:

Compiler für sonstige Programmiersprachen

Interpreter

ARM/XSCALE/CORTEX Instruction Set Simulator

Die Firma Lauterbach bietet unter der Artikelnummer LA-8809 einen Instruction Set Simulator für ARM Cores an. Die Demoversion ist zur Evaluierung kostenlos. Einschränkungen bestehen in der Anzahl der zu ladenden Debugsymbole. Der Simulator unterstützt alle gängigen ARM Derivate und lädt alle üblichen Debugformate, wie die des RealView, IAR und TI Compilers, oder der freien GCC Tools. Zum Simulator gibt es entsprechende zugehörige Debugtools, die allerdings käuflich zu erwerben sind.

Debug- und Programmierschnittstellen (JTAG/SWD)

Alle ARM-basierten Prozessoren verwenden ein einheitliches JTAG-Interface, über das Debugging und Speicherzugriff erfolgen kann. Nicht standardisiert sind allerdings die Verfahren zum Beschreiben des Flash-ROMs. Deshalb muss man beachten, ob die verwendete JTAG-Software Programmierroutinen für den jeweiligen Controller besitzt.

SWD (Serial Wire Debug) ist eine neue mit den Cortex-Mikrocontrollern eingeführte Debug- und Programmierschnittstelle, die weniger Pins benötigt als JTAG. Hier wird Debug-Bandbreite bzw. Speed gegen mehr verfügbare Pins für in-circuit Debugging "getauscht". Die meisten Controller der Cortex-M0 & M3 Serie können sowohl mittels JTAG als auch mittels SWD programmiert werden, es gibt allerdings auch Exemplare (z.B. EFM32 von Silicon Labs, XMC1100 von Infineon) welche nur SWD unterstützen.

Eine Übersicht über die empfohlenen Steckerbelegungen für JTAG und SWD gibt ein Dokument von ARM.

Darüber hinaus gibt es noch herstellerspezifische Schnittstellen wie SPD (Single Pin Debug) von Infineon, oder vorinstallierte serielle Bootloader, z.B. beim STM32 oder auch bei den Infineon XMC, die dann z.B. über ein eigenes Tool ohne weitere Hardware - abgesehen von einem handelsüblichen seriellen Schnittstellenadapter - programmiert werden können.

Viele Entwicklungsboards enthalten auch einen On-Board-Debugadapter zum direkten Anschluss an USB, so dass kein externer SWD- oder JTAG-Adapter notwendig ist. Manche erlauben auch, diesen Adapter abzubrechen und für eigene Entwicklungen weiterzuverwenden, somit ist nach dem Kauf eines Eval-Kits nicht nötig, einen weiteren Adapter später nachzukaufen.

Günstige Beispiele zum Einstieg

Ein einfacher JTAG-Adapter für den Parallelport ist der "Wiggler"-kompatible, den man auch einfach selbst bauen kann. Als Software lässt sich unter Windows und Linux OpenOCD (zusammen mit GDB) oder Crossworks ARM verwenden. Für USB gibt es ebenfalls OpenOCD-kompatible JTAG-Adapter.

Von NXP sind preiswerte Entwicklungskits (ca. 25€ für Evaluation-Board incl. USB-JTAG-/-SWD-Programer und Debugger) erhältlich z.B. Watterott. Siehe dazu auch die Dokumentation von NXP zu den LPCXpresso-Entwicklungskits (PDF), oder diese Beschreibung.

Von ST gibt es günstige MBED/Arduino kompatible Nucleo Entwicklungskits (ca. 12€) z.B. [5]. Der integrierte ST-Link Debugger kann mittels SWD und OpenOCD als Software auch andere Chip programmieren. Die etwas teuereren Discoveryboards, z.B. [6], haben mehr externe Bauteile on-board, während die Nucleo Board über Shields erweiterbar sind. Nur bei Nucleo Boards ist eine UART Schnittstelle als Standard über USB zu erreichen, bei Discovery Boards mit ST-Link V2-1 müssen Lötbrücken gesetzt werden.

Auch Infineon bietet Arduino-kompatible Boards+Shields mit dem XMC1100 Prozessor und angeflanschtem Debugger an (ab ca. 16€). Weiters gibt es günstige XMC4500 Kits, die auch Ethernet, SPI-Flash und SDCard-Slot Optionen bieten. Am unteren Ende gibt es ein XMC1100 Kit samt Debugger ab ca. 5€, dieses Board für den Schlüsselbund sozusagen nennt sich treffend "XMC 2 Go". Die Preise können je nach Distributor stark variieren. Siehe auch hier XMC-Starter-Kits. Des weiteren werden auch schon Kits in Verbindung mit Sensoren zum Evaluieren angeboten, wie das "3D 2 Go" Board mit einem XMC1100 Prozessor und dem neuen 3D-Magnetfeldsensor von Infineon, um ein Beispiel zu nennen: 3D-Sensorkit.

Von Silicon Labs gibt es Starter Kits mit integriertem J-Link (Debugger) ab ca. 25 € z.B. das EFM32 Tiny Gecko Starter Kit bei Mouser

Der J-Link-"Emulator" von Segger wird von vielen Softwarepaketen unterstützt und ist für den "nicht-kommerziellen" Einsatz von Studenten, Funkamateuren und Hobby-Bastler für ca. €50.- erhältlich (J-Link-Edu). Sein Umfang ist auf das Flashen des Speichers und das Debuggen beschränkt. Bonus: Neben den im Prozessor limitiert vorhandenen Hardware-Breakpoints (Anzahl ist MCU abhängig) sind zusätzliche Flash-Breakpoints möglich (müssen aber von der verwendeten Debug-IDE unterstüzt werden). Die sehr gut geplegte Debugger-Software unterstützt nahezu alle ARM Prozessoren. Die Trace-Option wie sie bei der PRO-Variante zur Verfügung steht, ist nicht vorhanden. Für den Preis bekommt man jedoch ein ausgewachsenes Werkzeug mit breiter Unterstützung und der Möglichkeit sowohl SWD als auch JTAG in einem Gerät vereint zu haben. Wenn man aber plant, ein oben genanntes Kit von ST, NXP, Infineon oder ähnlich zu kaufen kann man für ähnliche Kosten auch gleich ein CPU-Board dazubekommen - daher ist es sinnvoll, sich die Dokumentationen der Evalkits voher genau durchzusehen.

Der ULINK2 von Keil/ARM ist ebenfalls ein wirklich gutes Gerät. Leider ist er nicht ganz so günstig und seine Zusammenarbeit beschränkt sich auf die Arm/Keil IDE µVision. Er benötigt jedoch keine speziellen USB-Treiber sondern nutzt geschickt die Funktionalität der HID-Treiber des Betriebssystems. Das macht ihn sofort auf jedem Windows-Betriebssystem einsatzbereit.

Als Alternative zum Beschreiben des Flash über JTAG ist oft ein serieller Bootloader im Controller enthalten. Bei ST werden sie über einen speziellen Pin der MPU aktiviert und sind dank Kompression und das intelligente entfernen redundanter Information, bei der Übertragung genauso schnell wie JTAG/SWD Adapter.

CMSIS - ARM Cortex Software Libraries

Der ARM Cortex Microcontroller Software Interface Standard (CMSIS) ist ein herstellerunabhängiger Hardware Abstraction Layer für die Cortex-M-Prozessor -Serie. Dieser ermöglicht konsistente und einfache Software-Schnittstellen für den Prozessor und die Peripherie, und vereinfacht damit die Software-Wiederverwendung.

CMSIS besteht aus folgenden Komponenten:

  • CMSIS-CORE: Bietet eine Schnittstelle zum Cortex-M0, Cortex-M3, Cortex-M4, SC000 und SC300-Prozessorkern und Peripherie-Registern.
  • CMSIS-DSP: DSP-Bibliothek mit über 60 Funktionen in Festkomma-(fractional q7, q15, q31) und single precision floating-point (32-bit)-Implementierung
  • CMSIS-RTOS API: Standardisierte Programmierschnittstelle für Echtzeit-Betriebssysteme für Thread-Steuerung, Ressourcen-und Zeitmanagement. Implementierungen gibt es z.B. von Keil (RTX)
  • CMSIS-SVD: System View Beschreibung - XML-Dateien, die die Programmiereransicht des kompletten Mikrocontroller-Systems einschließlich Peripheriegeräte enthalten

Der Standard ist für Cortex-M-Mikrocontroller skalierbar: Von der kleinsten 4 KB MCU bis zu MCUs mit anspruchsvoller Kommunikations-Peripherie wie Ethernet oder USB. Die "Core Peripheral Funktionen" benötigt beispielsweise weniger als 1 KB-Code und weniger als 10 Bytes RAM.

Beispiele:

Mehr Informationen auf der ARM CMSIS Webseite.

Siehe auch

Weblinks

Literatur

  • ARM Systems Developer's Guide (2004) ISBN 1558608745 Im Buch blättern Programmbeispiele aus dem Buch, u.a. FFT, FIR/IIR-Filter, Division, Wurzel
  • ARM Assembly Language - an Introduction (2007) ISBN 1847536964 Im Buch blättern Verlagsseite "Book on demand"
  • ARM Rechnerarchitekturen für System-on-Chip-Design (2002) ISBN 3826608542
  • Co-Verification of Hardware and Software for Arm Soc Design (2004) ISBN 0750677309
  • ARM System-on-Chip Architecture (2000) ISBN 0201675196 Im Buch blättern
  • ARM Architecture Reference Manual ISBN 0201737191 Im Buch blättern
  • Messen, Steuern und Regeln mit ARM-Mikrocontrollern ISBN 3772340172 im Buch blättern
  • Programming Arm Microcontrollers: Using C and the Lpc2100 Family (2005? /ab 1. Dezember 2008) ISBN 0321263359
  • Arm Assembly: Fundamentals and Techniques (ab 1. März 2009) ISBN 1439806101
  • Reliable Embedded Systems: Using 8051 and ARM Microcontrollers (2007) ISBN 0321252918 600 Seiten mit CD Inhaltsverzeichnis
  • C und C++ für Embedded Systems (u.a. ARM Cortex-M3) mitp-Verlag 2008 ISBN 382665949X
  • The Definitive Guide to the Arm Cortex-M0 (Joseph Yiu) Newnes Verlag ISBN 0123854776
  • The Definitive Guide to the Arm Cortex-M3 (Joseph Yiu) Newnes Verlag ISBN 185617963X

Artikel aus der Kategorie ARM

<ncl style=compact maxdepth=2 headings=bullet headstart=2

     showcats=1 showarts=1>ARM</ncl>