Warum und wie man Multicore-Mikrocontroller für IoT-Geräte am Netzwerkrand verwendet

Von Jacob Beningo

Zur Verfügung gestellt von Nordamerikanische Fachredakteure von DigiKey

Entwickler von Geräten für das Internet der Dinge (Internet of Things, IoT) am Rande werden aufgefordert, eine immer vielfältigere und verarbeitungsintensivere Palette von Funktionen einzubinden, von Kommunikations- und Abtastsensoren bis hin zur Ausführung von Inferenzen des maschinellen Lernens (ML). Gleichzeitig werden die Entwickler aufgefordert, den Stromverbrauch beizubehalten oder zu reduzieren. Benötigt wird ein flexiblerer architektonischer Ansatz für ein Kernelement ihres Designs - den Mikrocontroller - der es Entwicklern ermöglicht, Funktionen hinzuzufügen und gleichzeitig ein optimales Gleichgewicht von Leistung, Funktionalität und Stromverbrauch zu erreichen.

Dieser Architekturansatz kommt in Form von Multicore-Mikrocontrollern zum Einsatz. Diese verfügen, wie der Name schon sagt, über mehrere Verarbeitungskerne, die in ein einziges Paket eingebaut sind. Das Problem wird jedoch nicht dadurch gelöst, dass man einfach mehr Kerne auf das Problem wirft. Entwickler müssen die Unterschiede zwischen symmetrischen und asymmetrischen Mehrkernprozessoren verstehen, wie man an die funktionale Partitionierung herangeht und wie man sie effektiv programmiert.

In diesem Artikel wird das Konzept der Multicore-Mikrocontroller vorgestellt, bevor erörtert wird, wie Entwickler Multicore-Mikrocontroller einsetzen können, um Leistungs- und Energiebeschränkungen auszugleichen. Als Beispiel werden mehrere Multicore-Mikrocontroller der STMicroelectronics' STM32H7-Reihe vorgestellt. Der Artikel wird auch mehrere Anwendungsfälle untersuchen, in denen Entwickler die Mehrkernverarbeitung nutzen und die Arbeitslast auf mehrere Kerne aufteilen können.

Einführung in Multicore-Mikrocontroller

Wie bereits erwähnt, haben Multicore-Mikrocontroller mehr als einen Verarbeitungskern. Es gibt zwei Arten von Konfigurationen, die häufig verwendet werden, symmetrische und asymmetrische Verarbeitung. Symmetrische Kernkonfigurationen enthalten zwei oder mehr exakt gleiche Verarbeitungskerne. Zum Beispiel könnten sie beide Arm® Cortex®-M4-Prozessoren sein. Asymmetrische Kerne hingegen können einen Arm Cortex-M7-Prozessor und einen Arm Cortex-M4-Prozessor enthalten. Sie könnten auch einen Arm-Cortex-M4- und einen Arm-Cortex-M0+-Prozessor enthalten. Die Kombinationen sind vielfältig und hängen von den Anwendungs- und Konstruktionsanforderungen ab.

IoT-Entwickler sind an Multicore-Mikrocontrollern interessiert, da sie es ihnen ermöglichen, ihre Anwendung in mehrere Ausführungsdomänen zu trennen. Getrennte Ausführungsdomänen ermöglichen eine präzise Steuerung der Leistung, der Funktionen und des Energiebedarfs der Anwendung. 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, die Echtzeitanforderungen des Systems zu verwalten, wie z.B. die Steuerung eines Motors, von Relais und Abtastsensoren.

Es gibt viele Möglichkeiten, wie ein Entwickler seine Anwendung partitionieren kann, aber die beiden größten Paradigmen sind die Trennung der Anwendung:

  • Funktionsreich/Echtzeit
  • Echtzeit/Sicherheit

Im ersten Paradigma, „Funktionsreich/Echtzeit“, entspricht das System genau dem im obigen Absatz beschriebenen. Die funktionsreichen Anwendungskomponenten, wie z.B. die Anzeige, ML-Schlüsse, Audiowiedergabe und Speicherplatz, werden alle von einem Kern verwaltet. Der zweite Kern behandelt dann Echtzeitfunktionen wie Motorsteuerung, Sensorik und Kommunikationsstapel (Abbildung 1).

Diagramm des Feature Rich/Echtzeit-ParadigmasAbbildung 1: Ein Paradigma für das Anwendungsdesign mit Multicore-Mikrocontrollern besteht darin, die funktionsreichen Anwendungskomponenten in einem Kern und die Echtzeitkomponenten im zweiten Kern zu platzieren. (Bildquelle: STMicroelectronics)

Das zweite Paradigma trennt die Anwendung in Echtzeit und sichere Funktionalität. Im ersten Kern kann die Anwendung Dinge wie die Anzeige, den Speicherzugriff und die Echtzeit-Audiowiedergabe handhaben. Der zweite Kern hingegen kann nichts anderes tun, als als Sicherheitsprozessor zu fungieren. Als solcher würde der zweite Kern die Speicherung kritischer Daten wie Geräte- und Netzwerkschlüssel, die Verschlüsselung, den sicheren Bootloader und alle anderen Funktionen handhaben, die unter die Kategorie sichere Software fallen (Abbildung 2).

Schema der Platzierung der Echtzeit-Anwendungskomponenten in einem KernAbbildung 2: Ein weiteres Paradigma für das Anwendungsdesign mit Multicore-Mikrocontrollern besteht darin, die Echtzeit-Anwendungskomponenten in einem Kern und alle Sicherheitskomponenten in einem zweiten Kern unterzubringen. (Bildquelle: STMicroelectronics)

Es gibt noch andere mögliche Wege, den Anwendungsraum eines Multicore-Mikrocontrollers zu analysieren, aber diese beiden Paradigmen scheinen bei IoT-Entwicklern am beliebtesten zu sein.

Auswählen einer Multicore-Mikrocontroller-Entwicklungsplatine

Obwohl Multicore-Mikrocontroller immer beliebter werden, sind sie immer noch nicht ganz Mainstream, und die Auswahl eines solchen Controllers kann schwierig sein. Für einen Entwickler, der mit Multicore-Mikrocontrollern arbeiten möchte, ist es am besten, eine Entwicklungsplatine auszuwählen, die die folgenden Eigenschaften aufweist:

  • Enthält ein LCD-Display zur Untersuchung funktionsreicher Anwendungen
  • Erweiterungs-E/A
  • Ist preiswert
  • hat ein bewährtes Ökosystem hinter sich, einschließlich Beispielcode, Gemeinschaftsforen und Zugang zu sachkundigen FAEs

Sehen wir uns einige Beispiele von STMicroelectronics an, beginnend mit dem STM32H745I-DISCO (Abbildung 3). Dieses Board basiert auf dem STM32H745ZIT6 Dual-Core-Mikrocontroller, der aus einem Arm Cortex-M7-Kern, der mit 480 Megahertz (MHz) läuft, und einem zweiten Arm Cortex-M4-Prozessor, der mit 240 MHz läuft, besteht. Der Teil enthält eine Gleitkommaeinheit mit doppelter Genauigkeit und einen L1-Cache mit 16 Kilobyte (KByte) Daten und 16 KByte Befehlscache. Das Discovery Board ist besonders interessant, weil es zusätzliche Funktionen enthält, wie z.B:

  • Ein SAI-Audio-Codec
  • Ein MEMS-Mikrofon (MikroElektroMechanisches System)
  • Eingebauter QUAD SPI-Flash
  • 4 Gigabyte (Gbyte) eMMC
  • Erweiterung der Tochterplatine
  • Ethernet
  • Kopfhörer für Audio und Kopfhörer

Das Entwicklungsboard hat viele eingebaute Funktionen, die es extrem einfach machen, mit Multicore-Mikrocontrollern zu experimentieren und eine Anwendung wirklich zu skalieren.

Bild des STMicroelectronics STM32H745I-DISCO-Boards<Abbildung 3: 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. (Bildquelle: STMicroelectronics)

Für Entwickler, die nach einer Entwicklungsplatine mit zusätzlichen Fähigkeiten und weit mehr Erweiterungs-E/A suchen, könnte die STM32H757I-EVAL besser geeignet sein (Abbildung 4). Das STM32H757I-EVAL verfügt über zusätzliche Funktionen über das Evaluation Board, wie z.B:

  • 8 M x 32-Bit-SRAM
  • 1-Gbit-Zweifach-Quadranten-SPI-NOR-Flash
  • Eingebettete Trace-Makrozelle (ETM) zur Befehlsverfolgung
  • Potentiometer
  • LED
  • 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.

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

Nachdem wir uns mehrere Entwicklungsboards angesehen haben, besteht der nächste Schritt darin, einige Empfehlungen für den Einstieg in eine Multicore-Mikrocontroller-Anwendung zu skizzieren.

So starten Sie die erste Multicore-Anwendung

Unabhängig davon, welches der beiden STM32H7-Entwicklungs-Boards ausgewählt wird, gibt es zwei Hauptwerkzeuge, die für den Einstieg benötigt werden. Die erste ist STMicroelectronics' STM32CubeIDE, eine freie integrierte Entwicklungsumgebung (IDE), mit der Entwickler ihren Anwendungscode kompilieren und auf dem Entwicklungsboard bereitstellen können. STM32CubeIDE bietet auch die notwendigen Ressourcen, um eine Anwendung schrittweise zu durchlaufen und zu debuggen, und ist für die wichtigsten Betriebssysteme einschließlich Windows, Linux und MacOS verfügbar.

Das zweite Werkzeug ist das Firmware-Paket STMicroelectronics' STM32H7. Dazu gehören Beispiele für die STM32H7-Entwicklungsboards für:

  • Multicore-Verarbeitung
  • Verwendung von FreeRTOS
  • Peripherie-Treiber
  • FatFS (Dateisystem)

Entwickler werden das Firmware-Anwendungspaket herunterladen und sich mit den Beispielen vertraut machen wollen, 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 zwei Beispielen, die zeigen, wie OpenAMP verwendet wird (Abbildung 5). Diese Beispiele zeigen, wie man Daten zwischen den Mikrocontroller-Kernen hin und her ü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. Eines funktioniert ohne Betriebssystem, während das andere mit FreeRTOS arbeitet. 

Bild des OpenAMP STM32Cube_FW_H7<Abbildung 5: Der STM32Cube_FW_H7 bietet mehrere Beispiele, die den Einstieg in die Multicore-Verarbeitung mit OpenAMP demonstrieren. (Bildquelle: Beningo Embedded Group)

Der zweite Satz von Beispielen zeigt, wie beide Kerne mit und ohne RTOS konfiguriert werden können (Abbildung 6). Ein Beispiel zeigt, wie FreeRTOS auf jedem Kern ausgeführt wird, während das andere Beispiel zeigt, wie ein RTOS auf einem Kern verwendet wird während der zweite Kern ohne RTOS arbeitet. Es gibt mehrere andere Beispiele im gesamten Firmware-Paket, die andere Fähigkeiten demonstrieren, aber diese sind eine gute Wahl, um anzufangen.

Das Bild von STM32Cube_FW_H7 enthält mehrere Beispiele<Abbildung 6: Der STM32Cube_FW_H7 enthält mehrere Beispiele, die zeigen, wie ein Betriebssystem mit Mehrkernprozessoren konfiguriert werden kann. (Bildquelle: Beningo Embedded Group)

Das Laden eines Beispielprojekts führt dazu, dass ein Entwickler ein Projektlayout sieht, das dem in Abbildung 7 gezeigten ähnelt. Wie veranschaulicht, ist das Projekt für jeden Kern in Anwendungscodes unterteilt. Die Buildkonfiguration kann auch so eingerichtet werden, dass ein Entwickler jeweils nur mit einem Kern zur gleichen Zeit arbeitet. Dies ist in Abbildung 7 anhand der grau unterlegten Dateien zu erkennen.

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

Eine vollständige Beschreibung des Beispielcodes würde den Rahmen dieses Artikels sprengen, aber der Leser kann die Datei readme.txt, die mit einem der Beispiele verknüpft ist, untersuchen, um eine detaillierte Beschreibung der Funktionsweise zu erhalten, und dann den Quellcode untersuchen, um zu sehen, wie die Inter-Prozessor-Kommunikation (IPC) tatsächlich durchgeführt wird.

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

Der Einstieg in die Arbeit mit Multicore-Mikrocontrollern ist nicht schwierig, aber es erfordert, dass Entwickler beginnen, über das Design ihrer Anwendung etwas anders nachzudenken. Hier sind einige "Tipps und Tricks" für den Einstieg in die Arbeit mit Multicore-Mikrocontrollern:

  • Prüfen Sie die Anwendung sorgfältig, um festzustellen, welche Domänentrennung in der Anwendung am sinnvollsten ist. Es ist möglich, Domänen auf einem einzigen Prozessor zu mischen, aber die Leistung kann beeinträchtigt werden, wenn nicht sorgfältig vorgegangen wird.
  • Nehmen Sie sich die Zeit, um die in das OpenAMP-Framework eingebauten Funktionen zu untersuchen und zu untersuchen, wie diese Funktionen von der Anwendung genutzt werden können.
  • 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.
  • Nutzung interner Hardwareressourcen, z. B. einer Hardwaresemaphore, um die Anwendungsausführung auf den Cores zu synchronisieren.

Entwickler, die mit einem gut unterstützten Entwicklungsboard beginnen und dann diese "Tipps und Tricks" befolgen, werden feststellen, dass sie eine Menge Zeit und Ärger sparen, wenn sie zum ersten Mal mit Multicore-Mikrocontrollern arbeiten.

Fazit

Für Entwickler von IoT-Systemen am Netzwerkrand bieten Multicore-Mikrocontroller die Möglichkeit, Funktionalität, Leistung und Stromverbrauch besser auf die Anforderungen der Anwendung abzustimmen und auszubalancieren. Solche Mikrocontroller ermöglichen es einem Entwickler, seine Anwendung in Domänen wie „Funktionsreich/Echtzeit“ oder „Echtzeit/Sicherheit“ zu partitionieren. Diese Fähigkeit, eine Anwendung in verschiedene Domänen zu trennen, ermöglicht es einem Entwickler, einen Kern zu deaktivieren, um Energie zu sparen, wenn die Verarbeitungsdomäne nicht mehr benötigt wird, oder ihn einzuschalten, um die Anwendungsleistung zu verbessern.

Wie gezeigt, gibt es mehrere verschiedene Entwicklungs-Boards, mit denen man mit der Erforschung des Anwendungsdesigns von Multicore-Mikrocontroller-Anwendungen beginnen und die volle Kontrolle über deren Leistungs- und Energieprofil übernehmen kann.

DigiKey logo

Haftungsausschluss: Die Meinungen, Überzeugungen und Standpunkte der verschiedenen Autoren und/oder Forumsteilnehmer dieser Website spiegeln nicht notwendigerweise die Meinungen, Überzeugungen und Standpunkte der DigiKey oder offiziellen Politik der DigiKey wider.

Über den Autor

Image of Jacob Beningo

Jacob Beningo

Jacob Beningo ist ein Berater für eingebettete Software, der derzeit mit Kunden in mehr als einem Dutzend Ländern zusammenarbeitet, um ihr Unternehmen durch die Verbesserung von Produktqualität, Kosten und Markteinführungszeit dramatisch zu transformieren. Er hat mehr als 200 Artikel über Entwicklungstechniken für eingebettete Software veröffentlicht, ist ein gefragter Redner und technischer Trainer und verfügt über drei Abschlüsse, darunter einen Masters of Engineering der University of Michigan. Bei Interesse können Sie ihn unter jacob@beningo.com kontaktieren oder besuchen Sie seine Website www.beningo.com und melden Sie sich für seinen monatlichen Embedded Bytes Newsletter an.

Über den Verlag

Nordamerikanische Fachredakteure von DigiKey