# EFM32

EFM32 ist eine Mikrocontrollerfamilie, die von der Firma Silicon Laboratories angeboten wird. Die EFM32 sind 32-Bit-Mikrocontroller verschiedener Unterfamilien, die auf der Arm Cortex-M3-Architektur basieren. Speziellen Fokus hat man bei der Entwicklung auf den Energieverbrauch gelegt. Dies hat auch die Namensgebung beeinflusst: EFM steht für englisch Energy Friendly Microcontrollers.

## Geschichte

Die EFM32 Mikrocontrollerfamilie wurde ursprünglich von der Firma Energy Micro entwickelt. Mitte 2013 wurden Energy Micro von Silicon Laboratories übernommen. In folgender Tabelle sind die einzelnen Meilensteine aufgelistet.
| Datum | Ankündigung |
| April 2008 | Energy Micro kündigt an, dass sie Arm Cortex-M3 Core lizenziert haben. |
| Oktober 2009 | Ankündigung der EFM32-Gecko-MCU-Familie |
| Dezember 2009 | Entwicklungskit für EFM32-Gecko-MCU-Familie |
| Februar 2010 | EFM32 Tiny-Gecko-MCU-Familie |
| Juli 2010 | EFM32 Giant-Gecko-MCU-Familie |
| November 2010 | Ankündigung der Entwicklungsumgebung Simplicity Studio |
| September 2011 | EFM32 Leopard-Gecko-MCU-Familie |
| April 2013 | EFM32 Wonder-Gecko-MCU-Familie |
| Juni 2013 | Silicon Laboratories kündigt Übernahme von Energy Micro an |
| Oktober 2013 | EFM32 Zero-Gecko-MCU-Familie |
| Juni 2014 | Simplicity Studio V2 |
| Februar 2015 | Simplicity Studio V3 |
| Mai 2015 | EFM32 Happy-Gecko-MCU-Familie |
| Dezember 2015 | EFM32 Pearl-and-Jade-Gecko-MCU-Familie |

## Prozessor-Architektur

Die EFM32-Mikrocontroller-Familie ist in verschiedene Unterfamilien eingeteilt, welche auf der Arm Cortex-M-Architektur basieren. Die nachfolgende Tabelle gibt einen Überblick der Prozessoren und EFM32-Familien.
| Arm Cortex-M-Version | EFM32-Familie |
| Arm Cortex-M0+ | EFM32 Zero Gecko (EFM32ZG), EFM32 Happy Gecko (EFM32HG) |
| Arm Cortex-M3 | EFM32 Tiny Gecko (EFM32TG), EFM32 Gecko (EFM32G), EFM32 Leopard Gecko (EFM32LG), EFM32 Giant Gecko (EFM32GG), EFM32 Jade Gecko (EFM32JG) |
| Arm Cortex-M4F | EFM32 Wonder Gecko (EFM32WG), EFM32 Pearl Gecko (EFM32PG) |

## Interne Peripherie

Die EFM32-Mikrocontroller besitzen je nach Typ unterschiedliche interne Peripherieeinheiten. Üblich sind unter anderen GPIO, Analog-Digital-Umsetzer, Digital-Analog-Umsetzer, Timer, Watchdog, UART, serielle synchrone Schnittstellen wie I²C- und Serial Peripheral Interface (SPI) und eine Echtzeituhr (RTC). Manche dieser Peripherieeinheiten können autonom ohne Interaktion mit dem Mikrocontrollerkern verwendet werden, was unter anderem die Leistungsaufnahme reduziert.

### GPIO

Die Ein- bzw. Ausgabe von digitalen Informationen ist bei einem Mikrocontroller eine grundlegende Aufgabe (EVA-Prinzip). In der Regel sind bei Mikrocontrollern die digitalen Ein- und Ausgänge gemultiplext. Das heißt, dass verschiedene Funktionen an ein und denselben Pin herausgeführt sind und die letztendlich verfügbare Funktion über Kontroll-Register selektiert werden kann. Auf diese Weise werden verschiedene digitale I/O-Funktionen, aber auch Modul-Funktionen (wie beispielsweise UART-Signale, I2C-Signale, SPI-Signale, PWM-Signale, …) an den Pins des MCU-Gehäuses verfügbar gemacht. Durch diese Flexibilität lässt sich derselbe Mikrocontroller in verschiedensten Applikationen verwenden und dessen Pinning entsprechend flexibel der Applikation anpassen.
Bei der EFM32-Familie können zudem noch der Betriebsmodus des I/Os (tristate, push-pull, open-drain, pull-up resistor, pull-down resistor), die Treiberfähigkeit der digitalen Ausgänge sowie das Interrupt-Verhalten eingestellt werden. Außerdem kann die digitale Funktionalität komplett deaktiviert werden, so dass der Pin als analoger Ein- oder Ausgang genutzt werden kann.

### Analog-Digital-Umsetzer

Um die Mikrocontroller in Sensor-Applikationen einsetzen zu können, sind in vielen Chips auch entsprechende analoge Peripherie-Module enthalten. Ein wichtiges Modul ist hier der Analog-Digital-Umsetzer (englisch Analog to Digital Converter, ADC). Bei einigen EFM32-Mikrocontrollern ist deswegen ein Analog-Digital-Umsetzer integriert. Die Auflösung des Wandlers ist beim EFM32 programmierbar – es kann eine Auflösung von 6 bit, 8 bit oder 12 bit gewählt werden. Zudem besteht die Möglichkeit, durch Hardware unterstützte Überabtastung die Auflösung noch zu verbessern. Durch entsprechende Wahl der Auflösung kann die Wandlungszeit optimiert und so die mittlere Stromaufnahme der Applikation angepasst werden. Bei vielen Mikrocontrollern wird die für den Analog-Digital-Umsetzer verwendete Referenzspannung separat im Datenblatt spezifiziert. Nicht so beim EFM32 – hier ist der Einfluss der integrierten Referenz bereits in der Analog-Digital-Umsetzer-Spezifikation enthalten.

## Programmierung

Der Software-Programmierer hat bei der EFM32-Mikrocontroller-Familie die Möglichkeit, entweder in Assembler oder in C zu programmieren. Heutzutage geschieht die Software-Entwicklung allerdings fast nur noch in C. Eine unvollständige Liste von C-Compiler-Entwicklungsumgebungen ist in folgender Tabelle gelistet.
Liste der verfügbaren C-Compiler (unvollständige Auswahl) :
| IDE Name | Hersteller |
| Simplicity Studio | Silicon Labs |
| MDK-ARM Microcontroller Development Kit | Keil |
| IAR Embedded Workbench | IAR Systems |
| TrueSTUDIO for ARM | Atollic |
| Crossworks for ARM | Rowley Associates |