Suchen

Multicore-Mikrocontroller für IoT-Geräte am Edge einsetzen

Autor / Redakteur: Rolf Horn * / Michael Eckstein

Mit der heute oft geforderten Funktionsfülle von IoT-Endgeräten sind viele Single-Core-Controller überfordert. Zeit für den Einsatz von Multicore-Mikrocontrollern. Wir zeigen, wie der Einstieg gelingt.

Firmen zum Thema

Flexibel konfigurierbar: 
Der STM32H7-Mikrocontroller soll 
Anwendern das Entwickeln von Endgeräten 
für das Internet of Things vereinfachen.
Flexibel konfigurierbar: 
Der STM32H7-Mikrocontroller soll 
Anwendern das Entwickeln von Endgeräten 
für das Internet of Things vereinfachen.
(Bild: STMicroelectronics)

Entwickler von Edge-Geräten für das Internet der Dinge (Internet of Things, IoT) müssen immer mehr Funktionen in ihre Produkte inte­grieren. Die Palette reicht von Kommunikations- und Abtastsensoren bis hin zur Ausführung von Inferenzberechnungen für maschinelles Lernen (ML). Gleichzeitig soll der Stromverbrauch der Geräte so gering wie möglich sein. Dies erfordert einen flexiblen architektonischen Ansatz für ein Kernelement ihres Designs – den Mikrocontroller. Da MCUs mit nur einem Prozessorkern mit der geforderten Funktionsvielfalt überfordert sind, kommen vermehrt Multicore-MCUs zum Einsatz. Diese vereinen mehrere, oft unterschiedliche Kerne auf einem Chip.

Einführung in Multicore-Mikrocontroller

Das wiederum fordert Entwickler heraus: Sie müssen die Unterschiede zwischen symmetrischen und asymmetrischen Mehrkernprozessoren verstehen, müssen Funktionen geschickt verteilen und die MCUs effizient programmieren. Dieser Artikel stellt das Konzept von Multicore-Mikrocontrollern auf Basis der STM32H7-Dual-Core-Baureihe von Halbleiterhersteller STMicroelectronics vor und erklärt, wie sich eine Balance zwischen Rechenleistung und Energieaufnahme finden lässt.

Bildergalerie

Der Artikel bespricht auch mehrere Anwendungsfälle, in denen Entwickler die Mehrkernverarbeitung nutzen und die Arbeitslast auf mehrere Kerne aufteilen können. Bei Multicore-Mikrocontroller gibt es überwiegend zwei Arten von Konfigurationen: die symmetrische und die asymmetrische Verarbeitung. Symmetrische Konfigurationen enthalten zwei oder mehr exakt gleiche Verarbeitungskerne. In MCUs kommen häufig Prozessoren von IP-Anbieter ARM zum Einsatz, etwa Cortex-M4. Asymmetrische Konfigurationen setzen auf unterschiedliche Kerne, zum Beispiel einen Cortex-M7-Prozessor und einen Cortex-M4-Prozessor oder einen Cortex-M4- und einen Cortex-M0+. Letztlich entscheidet der geplante Einsatzzweck über die Kombination.

Grundsätzlich sind Multicore-Mikrocon­trollern für IoT-Entwickler interessant, da sie ihre Anwendung in mehrere Ausführungsdomänen separieren können. Getrennte Ausführungsdomänen ermöglichen eine präzise Steuerung der Leistung, der Funktionen und des Energiebedarfs der Gesamtanwendung. Beispielsweise kann ein Kern verwendet werden, um mit einem Benutzer über ein hochauflösendes Display und ein Touchpanel zu interagieren, während der zweite Kern dazu dient, Echtzeitanforderungen des Systems zu verwalten, zum Beispiel die Steuerung eines Motors, von Relais und Abtastsensoren.

Die meisten Entwickler teilen ihre Anwendungen in die Blöcke Funktionsumfang und Echtzeit (feature rich/real-time) oder Echtzeit und Sicherheit (real time/security) auf. Es gibt natürlich noch andere Möglichkeiten, die Aufgaben zu verteilen, doch haben sich diese beiden Paradigmen etabliert.

Im ersten Paradigma verwaltet oft ein Kern die funktionsreichen Anwendungskomponenten, etwa die Anzeige, Inferenzberechnungen, Audiowiedergabe und Speicherzugriffe. Der zweite Kern behandelt dann Echtzeitfunktionen wie Motorsteuerung, Sensorik und Kommunikationsstapel (Bild 2).

Das zweite Paradigma trennt die Anwendung in Echtzeit und Sicherheitsfunktionen. Im ersten Kern kann die Anwendung Dinge wie die Anzeige, den Speicherzugriff und die Echtzeit-Audiowiedergabe handhaben. Der zweite Kern agiert ausschließlich als Sicherheitsprozessor. Als solcher übernimmt er das Speichern kritischer Daten wie Geräte- und Netzwerkschlüssel, die Verschlüsselung, den sicheren Bootloader und alle sonstigen Funktionen, die in die Kategorie sichere Software fallen (Bild 3).

Auswählen einer passenden Entwicklungsplatine

Obwohl Multicore-Mikrocontroller immer beliebter werden, zählen sie noch nicht zum Mainstream. Entwickler müssen zunächst entscheiden, welche MCU am besten für ihr Projekt geeignet ist. Dabei helfen Entwicklungsplatinen, die praktisch alle Chiphersteller für ihre Controller anbieten. Diese sollten LCD-Display zur Untersuchung funktionsreicher Anwendungen besitzen, Ein- und Ausgänge zum Anschluss von Erweiterungen haben, günstig sein und von einem breiten Ökosystem unterstützt werden, zu dem Beispielcode, Gemeinschaftsforen und Zugang zu sachkundigen Applikationsingenieuren (FAE) zählen.

Bild 4: Das STM32H745I-DISCO-Board integriert eine breite Palette von On-Board-Sensoren und Speicherfunktionen, die es Entwicklern ermöglichen, die Dual-Core-Mikrocontroller mit 480 MHz und 240 MHz zu testen.
Bild 4: Das STM32H745I-DISCO-Board integriert eine breite Palette von On-Board-Sensoren und Speicherfunktionen, die es Entwicklern ermöglichen, die Dual-Core-Mikrocontroller mit 480 MHz und 240 MHz zu testen.
(Bild: STMicroelectronics)

Sehen wir uns einige Beispiele von STMicroelectronics an, beginnend mit dem STM32H745I-DISCO (Bild 4). Dieses Board basiert auf der Dual-Core-MCU STM32 H745ZIT6 mit einem Cortex-M7-Kern, der mit 480 MHz läuft, und einem Cortex-M4-Prozessor, der mit 240 MHz taktet. Dieser Teil enthält eine Gleitkommaeinheit mit doppelter Genauigkeit und einen L1-Cache mit 16 KByte Daten und 16 KByte Befehlscache. Das Evaluierungsboard ist besonders interessant, denn es hat einen SAI-Audio-Codec, ein mikromechanisches MEMS-Mikrofon, integrierten Quad-SPI-Flash, 4 GByte eMMC-Speicher, einen Steckplatz für eine Tochterplatine sowie Anschlüsse für Ethernet und Audio.

Bild 5: Die Baugruppe STM32H757I-EVAL bietet Entwicklern viel Erweiterungsplatz, einfachen Zugang zu Peripheriegeräten und einen LCD-Bildschirm für den Einstieg in Multicore-Anwendungen.
Bild 5: Die Baugruppe STM32H757I-EVAL bietet Entwicklern viel Erweiterungsplatz, einfachen Zugang zu Peripheriegeräten und einen LCD-Bildschirm für den Einstieg in Multicore-Anwendungen.
(Bild: STMicroelectronics)

Für Entwickler, die nach einer Entwicklungsplatine mit zusätzlichen Fähigkeiten und weit mehr Erweiterungs-E/A suchen, könnte STM32H757I-EVAL besser geeignet sein (Bild 5). Das STM32H757I-EVAL verfügt über zusätzliche Funktionen, etwa 8 M x 32-Bit-SRAM, 1-GBit-Zwei-Quadranten-SPI-NOR-Flash, eingebettete Trace-Makrozelle (ETM) zur Befehlsverfolgung, Potentiometer, LED und diverse Taster und Knöpfe (Manipulation, Joystick, Aufwachen). Diese zusätzlichen Fähigkeiten, insbesondere die E/A-Erweiterung, können für Entwickler, die den Einstieg in die Entwicklung suchen, äußerst nützlich sein.

So starten Sie die erste Multicore-Anwendung

Unabhängig vom ausgewählten Board benötigen Entwickler zwei Hauptwerkzeuge. Einerseits STM32CubeIDE, eine freie inte­grierte Entwicklungsumgebung (IDE), mit der Entwickler ihren Anwendungscode kompilieren und auf das Entwicklungsboard laden können. STM32CubeIDE bietet auch die notwendigen Ressourcen, um eine Anwendung schrittweise auszuführen und zu debuggen. Es ist für die wichtigsten Betriebssysteme einschließlich Windows, Linux und MacOS verfügbar.

Bild 6: Der STM32Cube_FW_H7 bietet mehrere Beispiele, die den Einstieg in die Multicore-Verarbeitung 
mit OpenAMP demonstrieren und zeigen, wie ein Betriebssystem mit Mehrkernprozessoren konfiguriert 
werden kann.
Bild 6: Der STM32Cube_FW_H7 bietet mehrere Beispiele, die den Einstieg in die Multicore-Verarbeitung 
mit OpenAMP demonstrieren und zeigen, wie ein Betriebssystem mit Mehrkernprozessoren konfiguriert 
werden kann.
(Bild: Beningo Embedded Group)

Andererseits das Firm­ware-Paket STM32H7. Dazu gehören Beispiele für die STM32H7-Entwicklungsboards für Multicore-Verarbeitung, Verwendung von FreeRTOS, Peripherie-Treiber und FatFS (Dateisystem). Sinnvoll ist es, sich das Firmware-Anwendungspaket herunterzuladen und sich mit den Beispielen vertraut zu machen, die von der gewählten Entwicklungsplatine unterstützt werden. Insbesondere gibt es zwei Ordner, auf die Entwickler achten sollten. Der erste ist der Anwendungsordner mit Beispielen, die zeigen, wie OpenAMP verwendet wird (Bild 6). Diese Beispiele zeigen, wie man Daten zwischen den Mikrocontroller-Kernen überträgt, wobei ein Kern Daten an den anderen Kern sendet, der sie dann wieder an den ersten Kern zurück überträgt. Beide Beispiele führen dies auf unterschiedliche Weise durch: einmal ohne Betriebssystem, einmal mit FreeRTOS.

Kerne mit oder ohne RTOS konfigurieren

Der zweite Satz von Beispielen zeigt, wie beide Kerne mit und ohne RTOS konfiguriert werden können (Bild 6). Einmal wird Free RTOS auf jedem Kern ausgeführt, während im anderen RTOS nur auf einem Kern läuft. Andere Beispiele im Firmware-Paket zeigen weiterreichende Funktionen. Das Laden eines Beispielprojekts führt dazu, dass ein Entwickler ein Projektlayout sieht, das dem in Bild 7 gezeigten ähnelt.

Bild 7: Ein Beispiel für ein OpenAMP-Ping-Pong-Projekt demonstriert Entwicklern, wie ein Kommunikationskanal zwischen den beiden CPU-Kernen erstellt wird.
Bild 7: Ein Beispiel für ein OpenAMP-Ping-Pong-Projekt demonstriert Entwicklern, wie ein Kommunikationskanal zwischen den beiden CPU-Kernen erstellt wird.
(Bild: Beningo Embedded Group)

Wie veranschaulicht, ist das Projekt für jeden Kern in Anwendungscodes unterteilt. Wenn der Anwendungscode auf mehrere Kerne aufgeteilt ist, kann die Build-Konfiguration so eingerichtet werden, dass ein Entwickler jeweils nur mit einem Kern zur gleichen Zeit arbeitet. Die mit dem Paket mitgelieferte Datei readme.txt enthält eine detaillierte Beschreibung der Funktionsweise. Dies hilft, den Quellcode zu untersuchen, um zu verstehen, wie die Inter-Prozessor-Kommunikation (IPC) tatsächlich erfolgt.

Tipps und Tricks für die Arbeit mit Multicore-Mikrocontrollern

Der Einstieg in die Entwicklung eigener Projekte mit Multicore-Mikrocontrollern ist nicht schwierig. Entwickler müssen allerdings einige zusätzliche Überlegungen zu ihrem geplanten Design anstellen. Dabei können folgende Tipps helfen:

  • Es ist möglich, Domänen auf einem einzigen Prozessor zu mischen. Dies kann aber die Leistung beeinträchtigen, wenn nicht sorgfältig vorgegangen wird. Überlegen Sie daher bereits im Vorfeld, welche Applikationsteile auf welchem Kern laufen sollen.
  • Nehmen Sie sich die Zeit, um die in das OpenAMP-Framework eingebauten Funktionen zu untersuchen und zu evaluieren, wie die geplante Anwendung diese Funktionen nutzen kann.
  • Laden Sie die Anwendungsbeispiele für die STM32H7-Prozessoren herunter und führen Sie die Multicore-Anwendungsbeispiele für das ausgewählte Entwicklungsboard aus. Das H747 enthält zwei: eine für FreeRTOS und eine für OpenAMP.
  • Wenn Sie eine Anwendung debuggen, vergessen Sie nicht, dass jetzt zwei Cores laufen! Stellen Sie sicher, dass Sie den richtigen Thread innerhalb der Debug-Umgebung auswählen, um seinen Aufrufverlauf zu untersuchen.
  • Nutzen Sie interne Hardwareressourcen, z. B. eine Hardwaresemaphore, um die Anwendungsausführung auf den Cores zu synchronisieren.

Diesen Beitrag lesen Sie auch in der Fachzeitschrift ELEKTRONIKPRAXIS Ausgabe 21/2020 (Download PDF)

Kernfunktionen besser auf die Anwendung abstimmen

Mit Multicore-MCUs können Entwickler von IoT-Edge-Geräten Funktionalität, Leistung und Stromverbrauch besser auf die Anforderungen der Anwendung abstimmen. Die Bausteine ermöglichen es Schaltungsdesignern, ihre Anwendung in Funktionsbereiche wie Feature Rich/Echtzeit- oder Echtzeit/Sicherheitsverarbeitung aufzutrennen. Entwickler können beispielsweise einen Kern deaktivieren und so Energie sparen, wenn eine Verarbeitungsdomäne nicht mehr benötigt wird. Oder sie schalten ihn gezielt ein, um die Anwendungsleistung zu verbessern. So können die Geräte flexibel auf geänderte Rahmenbedingungen reagieren.

* Rolf Horn ist Applications Engineer bei Digi-Key Electronics

(ID:46917206)