ARM

Wechseln zu: Navigation, Suche

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 NUR um die ARM Cortex-M Mikrocontroller, nicht jedoch um ARM Cortex-A Prozessoren, welche in Smartphones u.ä. eingesetzt werden.

Es gibt folgende Varianten des Cortex-M Mikrocontroller-Kerns, aufgeführt vom energieeffizientesten zum leistungsfähigsten.

ARM Cortex M0/M0+[Bearbeiten]

Als günstigste und energieeffizienteste Variante gibt es die Cortex-M0 Cores mit deutlich kleinerem Befehlssatz als z.B. Cortex-M3. Diese werden beispielsweise in folgenden Controllern eingesetzt:

Für die M0-Familie ist für den LPC1xxx bereits eine Code-Base und ein preisgünstiges Entwicklungskit vorhanden.

Inzwischen gibt es auch eine optimierte Version des Cortex-M0 - die Cortex-M0+ Cores. Diese können (optional) einige Features der Cortex-M3 Serie beinhalten, wie z.B eine MPU:

ARM Cortex M3[Bearbeiten]

Der erste Kern der Cortex M-Reihe war der Cortex-M3. Dieser ist vom Leistungsniveau her am ehesten mit seinem Vorgänger, dem ARM7TDMI vergleichbar.

Controllerfamilien dieser Klasse sind:

Für den LPC1xxx ist bereits eine Code-Base und ein preisgünstiges LPC1xxx_Entwicklungskit_LPCXpresso vorhanden.

ARM Cortex M4[Bearbeiten]

Als hoch performante Variante gibt es dann noch die Cortex-M4 Cores welche mit zusätzlichen DSP-Funktionen und teilweise einer FPU ausgestattet sind.

Diese werden beispielsweise in folgenden Controllern eingesetzt:

ARM7TDMI[Bearbeiten]

Der Vorgänger der Cortex-M-Cores ist der ARM7TDMI. Controllerfamilien dieser Klasse sind immer noch weit verbreitet:

Mehr Informationen zur ARM-Architektur finden sich in der Wikipedia, weiterführende Links in der Linksammlung.

Compiler & Software[Bearbeiten]

GCC[Bearbeiten]

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[Bearbeiten]

Kostenlose Entwicklungsumgebungen (überwiegend GCC-basiert):

  • 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'
  • CooCox IDE (Eclipse basierend)
  • 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.
  • emIDE Windows, komplette Visual Studio artige Entwicklungsumgebung (basierend auf Code::Blocks) mit GCC und Debugger (Unterstützung für Adapter von Segger)
  • 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 [5] 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 [6]. Demnächst soll noch die Unterstützung für die ARM und IAR Compiler hinzuzkommen. Hier gehts zum Download'
  • 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.

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

Compiler für sonstige Programmiersprachen[Bearbeiten]

Interpreter[Bearbeiten]

ARM/XSCALE/CORTEX Instruction Set Simulator[Bearbeiten]

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)[Bearbeiten]

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. 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 Energy Micro, 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. Viele Entwicklungsboards enthalten auch einen On-Board-Debugadapter zum direkten Anschluss an USB, so dass kein externer SWD- oder JTAG-Adapter notwendig ist.

Günstige Beispiele zum Einstieg[Bearbeiten]

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 Entwicklungskits (ca. 20€), mit integriertem ST-Link (Debugger). Zum Beispiel das STM32F4 Discovery Board.

Von Energymicro gibt es Starter Kits mit integriertem J-Link (Debugger) ab ca. 50 € 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 dabei auf das Flashen des Speichers und das Debuggen beschränkt. Die Trace-Option wie sie bei der PRO-Variante zur Verfügung steht, ist nicht vorhanden. Für den Preis (05/2013) 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.

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[Bearbeiten]

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. Der Speicherbedarf für die Core Peripheral Funktionen bedarf weniger als 1 KB-Code und weniger als 10 Bytes RAM.

Beispiele:

Mehr Informationen auf der ARM CMSIS Webseite.

Siehe auch[Bearbeiten]

Weblinks[Bearbeiten]

Literatur[Bearbeiten]

Artikel aus der Kategorie ARM[Bearbeiten]

ARM • ARM Bitbanding • ARM GCC • ARM GCC toolchain for Linux and Mac OS X • ARM MP3/AAC Player • ARM Selektor • ARM-DevCpp • ARM-elf-GCC-Tutorial • ARM-Simulation • AT91-TWI • AT91SAM • AT91SAM7S mit OpenOCD programmieren • AT91SAM9260 • CentiPad • Cortex-A • Cortex-M3 • DDS-Signalgenerator per USB • DMA • EFM32 • Einstieg in die ARM Entwicklung • EKG mit XMC µC • Entwicklung eines Steuergeräts zur automatischen Antennenabstimmung • Infineon XMC • Infineon XMC 2Go • JTAG • Lichtwecker • LPC1xxx • LPC1xxx für Umsteiger • LPC2000 • STM32 • STM32 - Einstieg mit Em::Blocks • STM32 CooCox Installation • STM32 für Einsteiger • TNKernel • UPlay Basic Interpreter per XMC2Go • UsbDisplay • Using arm-elf-run • XMC4500 • XMC: PWM (LED und Servo), UART (DMX und Debug) (Tutorial für Keil uVision 5)

P89626 • Raspberry Pi • Cortex M3 OCM3U • Dockstar • Dockstar Extension Board • DockstarDebianSqueeze • Entwicklungsboard mit AT91SAM7Sxxx - selbstgemacht • GoFlexHome • GoFlexNet • LPC2000-Boards von Olimex • Micro2440 • Mini2440 • MP2103-Stick: Ein Mini-Mikrocontroller-Board mit USB und bis zu 4MB Datenspeicher • MP32F103-Stick: Ein Mini-Mikrocontroller-Board mit USB und bis zu 4MB Datenspeicher • Olimex AT91SAM7X256-Board SAM7-EX256 • Olimex EP9302-Board CS-E9302 • P89626 • P89636

POV-Globe mit XMC2Go • Bluetooth Maschinensteuerung mit XMC2GO und Android-App • DDS-Signalgenerator per USB • EKG mit XMC µC • Infineon XMC • Infineon XMC 2Go • Lichtwecker • UPlay Basic Interpreter per XMC2Go • XMC4500 • XMC: PWM (LED und Servo), UART (DMX und Debug) (Tutorial für Keil uVision 5)

Codebase für LPC1xxx • Installationsanleitung C-Entwicklungsumgebung für LPC1xxx von Code Red • LPC1xxx • LPC1xxx Entwicklungskit LPCXpresso • LPC1xxx für Umsteiger

STM32 Eclipse Installation • Prog bsp timer 1 timer2 • STM32 • STM32 - Einstieg mit Em::Blocks • STM32 BLDC Control with HALL Sensor • STM32 CooCox Installation • STM32 F3 Discovery unter Linux • STM32 für Einsteiger • STM32 LEDBlinken AtollicTrueStudio • STM32 USB-FS-Device Lib • STM32F10x Standard Peripherals Library • STM32F4-Discovery