BA Geuchen Machbarkeitsstudie Zu Der Mikroprozessor-Plattform STM32MP1
BA Geuchen Machbarkeitsstudie Zu Der Mikroprozessor-Plattform STM32MP1
Machbarkeitsstudie zu der
Mikroprozessor-Plattform
STM32MP1
Abgabedatum: 13.02.2020
Eidesstattliche Erklärung
Ich versichere, die von mir vorgelegte Arbeit selbstständig verfasst zu haben. Alle
Stellen, die wörtlich oder sinngemäß aus veröffentlichten oder nicht veröffentlichten
Arbeiten anderer entnommen sind, habe ich als entnommen kenntlich gemacht. Sämt-
liche Quellen und Hilfsmittel, die ich für die Arbeit benutzt habe, sind angegeben.
Die Arbeit hat mit gleichem Inhalt bzw. in wesentlichen Teilen noch keiner anderen
Prüfungsbehörde vorgelegen.
Ein großes Dankeschön gilt all jenen Personen, die mich bei der Bearbeitung dieser
Bachelorarbeit unterstützt und motiviert haben. Ganz besonders danken möchte ich
Herrn Prof. Dr.-Ing. Arno Bergmann und Herrn Dipl.-Math. Kai Morwinski, für Ihre
fachliche sowie persönliche Unterstützung.
Des Weiteren möchte ich der Smart Mechatronics GmbH danken, die mir ermöglicht
hat, dieses interessante Thema zu bearbeiten.
Inhaltsverzeichnis
Inhaltsverzeichnis ii
Abkürzungsverzeichnis iii
Symbolverzeichnis vii
1 Einleitung 1
1.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2 Grundlagen 3
2.1 Machbarkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2 Die Mikroprozessor-Plattform STM32MP1 . . . . . . . . . . . . . . 4
2.3 Mikrocontroller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.4 Mikroprozessor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.5 Das Embedded Betriebssystem OpenSTLinux . . . . . . . . . . . . . 7
2.6 Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.7 U-Boot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.8 Devicetree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.9 Verzeichnisstruktur von Linux/OpenSTLinux . . . . . . . . . . . . . 10
2.10 Definition Embedded Systems . . . . . . . . . . . . . . . . . . . . . . 12
2.11 Harvard-Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.12 Interprozessor-Kommunikation . . . . . . . . . . . . . . . . . . . . . 16
2.13 Das Framework OpenAMP für Asynchronous Multiprocessing . . . . 18
2.14 Pin-Konfiguration mit STM32CubeMX . . . . . . . . . . . . . . . . 18
2.15 Robot Operating System . . . . . . . . . . . . . . . . . . . . . . . . 20
3 Systemkonzipierung 21
3.1 Anforderungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2 Umfeldmodell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
i
Inhaltsverzeichnis
3.3 Kommunikationsschnittstellen . . . . . . . . . . . . . . . . . . . . . 24
4 Software Implementierung 25
4.1 Auswahl und Installation der Linux-Distribution . . . . . . . . . . . . 25
4.2 Konfiguration des Cortex-M4 Prozessors . . . . . . . . . . . . . . . . 26
4.3 Hardware Semaphore . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.4 Interprozessor Kommunikation . . . . . . . . . . . . . . . . . . . . . 37
4.5 Cortex-A7 Executable . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.6 Cortex-M4 Firmware . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.7 Autoload und Autostart der Firmware auf dem Cortex-M4 Prozessor . 47
4.8 Flash-Vorgang per WLAN . . . . . . . . . . . . . . . . . . . . . . . 50
4.9 Robot Operating System . . . . . . . . . . . . . . . . . . . . . . . . 51
5 Verifikation 61
Abbildungsverzeichnis II
Tabellenverzeichnis III
Literatur IV
A Anhang XI
A.1 Inhalt Daten-CD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XI
ii
Abkürzungsverzeichnis
API Application-Programming-Interface
CoPro Coprocessor
COM Communication
DA Datenspeicher
DC Duty Cycle
DT Devicetree
FR Forward/Reverse
iii
Inhaltsverzeichnis
Fw Firmware
OTG On-The-Go
iv
Inhaltsverzeichnis
PC Personal Computer
PM Prozessmanagement
PR Programmspeicher
PWM Pulsweitenmodulation
STM STMicroelectronics
SYS System
TA Trusted Application
v
Inhaltsverzeichnis
TTY Teletype
vi
Symbolverzeichnis
vii
1 Einleitung
Wir erleben derzeit ein explosionsartiges Wachstum bei der Entwicklung und dem Ein-
satz von eingebetteten Systemen und persönlichen mobilen Computersystemen, die
eine zunehmende Unterstützung mehrerer Standards erfordern. [1, 2]
1
1 Einleitung
1.1 Motivation
Eingebettete Systeme werden heute in der industriellen Steuerung, in der Luft- und
Raumfahrt, der Automobilindustrie, der Netzwerkkommunikation, dem Gesundheits-
wesen und der Unterhaltungselektronik eingesetzt. [7]
Dabei müssen eingebettete Systeme eine Vielzahl von Anforderungen erfüllen. [3]
Die Mikroprozessor-Plattform „STM32MP1“ vereint die Eigenschaften eines Embed-
ded Linux Betriebssystems mit der eines Echtzeitfähigen Systems. [8]
Embedded Linux ist ein Kern-basiertes, voll speichergeschütztes, Multitasking-fähiges
Multiprozess-Betriebssystem, das unterschiedliche Computer-Hardware (X86, Alpha,
Sparc, MIPS, PPC, ARM, NEC, MOTOROLA usw.) unterstützt. Der Linux Quellcode
des Betriebssystems ist frei zugänglich und kann auf die eigenen Bedürfnisse und das
eigene System angepasst werden. Ein wirtschaftlicher Vorteil von Embedded-Linux ist
die Vielzahl von frei verfügbaren Anwendungen. [7]
2
2 Grundlagen
2.1 Machbarkeit
Begriffsklärung: Machbarkeit
Als Machbarkeitsstudie wird die Überprüfung der Durchführbarkeit eines Lösungsan-
satzes für ein Projekt bezeichnet. Machbarkeitsstudien werden gerade dann erhoben,
wenn es Zweifel an der Durchführbarkeit eines Projektes gibt. [9]
Der Projektmanagementprozess der DIN 69901-2:2009-01 [10, S. 24] enthält den Pro-
zess D.8.3 namens „(Mindeststandard) Machbarkeit bewerten“.
Für diesen Prozess ist entscheidend, dass es einen Vorgängerprozess gibt. In dem Vor-
gängerprozess wird der Vertragsinhalt mit dem Kunden festgelegt [10]. Der Kunde ist
die „Smart Mechatronics GmbH“. Der Vertragsinhalt wird im Kapitel 3 beschrieben.
Machbarkeit bewerten
Prozessbeschreibung
Um die Machbarkeit zu prüfen, werden alle gesammelten Informationen ausgewer-
tet und mit den Projektzielen verglichen. Dabei ist entscheidend, ob die Projektziele
mit den zur Verfügung stehenden Mitteln in der vorgegebenen Zeit umgesetzt werden
können. [10]
In der DIN 69901-2:2009-01 [10] ist festgehalten, welche Inputs, welche Prozessma-
nagement (PM)-Methoden und welche Outputs die Machbarkeit bewerten.
3
2 Grundlagen
• Input:
Der Input ist bei diesem Projekt das Projektziel und das Projektumfeld.
• Prozessmanagement-Methode:
Als PM-Methode wird die Strengths Waknesses Opportunities Threats (SWOT)
aufgelistet.
• Output:
Der Output ist die Bewertung der Machbarkeit.
2.3 Mikrocontroller
4
2 Grundlagen
Flash Data
patch watchpoints
Bus matrix
Code SRAM and
interface peripheral interface
5
2 Grundlagen
2.4 Mikroprozessor
6
2 Grundlagen
CPU
Auf der Central Processing Unit (CPU) der MPU (dual Cortex-A7) kann ein Em-
bedded Betriebssystem ausführt werden. Der Hersteller STMicroelectronics bietet für
die Nuzung der MPU das auf die Plattform zugeschnittene Embedded Betriebssystem
OpenSTLinux. [14]
Als Embedded Betriebssysteme werden solche bezeichnet, die speziell auf die Res-
sourcen der System-Hardware angepasst wurden [5]. Auf vielen Minicomputern wie
dem Raspberry Pi [15], dem BeagleBone Black [16] und dem Cubietruck [17] wird
Embedded Linux [18] bevorzugt eingesetzt[5]. Der Quelltext von Embedded Linux
ist frei verfügbar, was begründet, warum dieses Embedded Betriebssystem bevorzugt
eingesetzt wird [5]. Es gibt aber noch eine große Anzahl von anderen Embedded Be-
triebssystemen, wie zum Beispiel Windows CE [19], Emdedix [20], eCos [21] oder
VxWorks [22], wovon Emdedix, eCos und VxWorks zu den sogenannten echtzeitfä-
higen Betriebssystemen (Real Time Operating System (RTOS)) gehören. Embedded
Linux gehört nicht zu den echtzeitfähigen Betriebssystemen. [5]
Da das auf dem Mikroprozessor laufende Betriebssystem kein echtzeitfähiges Be-
triebssystem ist, können Aufgaben, die Echtzeit benötigen, auf das echtzeitfähige Bare-
7
2 Grundlagen
2.6 Linux
Linux ist ein sehr komplexes Betriebssystem. Um die Komplexität zu überblicken, wird
der Kernel (Betriebssystemkern) in Layer (Schichten) unterteilt [5]. Diese Layer ent-
halten wiederum viele verschiedene Programme. Der schematische Aufbau des Linux-
Systems ist in Abbildung 2.3 zu sehen [5].
GNU C Library
z.B. open, sbrk, exec, fopen, ...
Hardware
Mainboard, CPU, Speicher, Festplatten, Grafikkarten, etc.
8
2 Grundlagen
2.7 U-Boot
Das Universal Boot Loader (U-Boot) steht für The Universal Bootloader. U-Boot ist
ein Bootloader für eingebettete Boards. Die Entwicklung von U-Boot ist eng mit der
Entwicklung von Linux verbunden. Teile des U-Boot-Quellcodes stammen aus dem
Linux-Devicetree (DT). Bei der Entwicklung des U-Boot wurde darauf geachtet, dass
insbesondere das Booten von Linux-Images möglich ist. [24]
U-Boot lädt und prüft die Images von Kernel DT und RAM-disk, darauffolgend über-
gibt U-Boot die Kontrolle an den Linux-Kernel oder die Zielanwendung. [23]
2.8 Devicetree
Der DT ist ein Konstrukt zur Beschreibung der Systemhardware [25]. Ein DT hat eine
Baumdatenstruktur mit Knoten. Diese Knoten beschreiben die in dem System ent-
haltenen Geräte. Jeder Knoten hat Eigenschafts-/Wertpaare, die die Eigenschaften der
dargestellten Geräte beschreiben. Jeder Knoten hat einen übergeordneten Knoten mit
Ausnahme des Wurzelknotens, der keinen übergeordneten Knoten hat. Ein Bootpro-
gramm lädt den DT in den Speicher des Client-Programms und übergibt einen Zeiger
auf den DT an den Client [25]. Das Beispiel eines DT ist in Abbildung 2.4 dargestellt.
9
2 Grundlagen
Die Abbildung 2.5 zeigt die Struktur des Wurzelverzeichnis der OpenSTLinux Distri-
bution.
• /bin
In dem Verzeichnis /bin befinden sich alle Dienstprogramme. Diese stehen allen
Benutzern in der Shell (Terminal) zur Verfügung. [5]
• /boot
In dem Verzeichnis /boot befinden sich alle Dateien, die zum Booten des Systems
zwingend erforderlich sind. [5]
Zum Beispiel das Linux-Image und die Device Tree Blobs. [26]
• /dev
In dem Verzeichnis /dev befinden sich Gerätedateien. Geräte werden in Linux
wie Dateien behandelt. [5]
• /etc
In dem Verzeichnis /etc sind Dateien enthalten, die zur Konfiguration von Pro-
grammen dienen. [5]
• /home
In dem Verzeichnis /home wird für jeden User ein privater Bereich angelegt. [5]
• /lib
In dem Verzeichnis /lib sind wichtige Funktionsbibilioteken. [5]
• /lost+found
In dem Verzeichnis /lost+found werden Dateien vom System gespeichert, die aus
einem beliebigen Grund corrupt (beschädigt) sind. Können diese Daten von dem
System nicht mehr repariert werden oder lassen diese sich nicht mehr zuordnen,
werden sie vom System in das Verzeichnis /lost+found geschrieben. [5]
10
2 Grundlagen
• /mnt
In dem Verzeichnis /mnt werden Beschreibungen gespeichert, an welcher Stelle
temporär genutzte Geräte oder Festplattenpartitionen im Dateisystem (mount)
eingehängt
wurden. [5]
• /opt
In dem Verzeichnis /opt werden zusätzliche Programme gespeichert, die nicht
zwingend für Linux erforderlich sind. [5]
• /proc
Das Verzeichnis /proc wird als Schnittstelle zum Kernel genutzt. Jeder Prozess
hat über dieses Verzeichnis die Möglichkeit, mit dem Kernel zu kommunizieren.
[5]
• /run
In dem Verzeichnis /run werden Daten gespeichert, die für den Betrieb des
Linux-Systems erforderlich sind. [5]
• /sbin
Das Verzeichnis /sbin stellt Programme zur Verfügung, die nur vom Syste-
madministrator ausgeführt werden können (user: root). [5]
• /sys
Das Verzeichnis /sys ist ein virtuelles Verzeichnis, das dazu dient, eine Schnitt-
stelle zwischen System und Kernel herzustellen. [5]
• /tmp
Das Verzeichnis /tmp speichert temporäre Daten. Es wird beim Neustarten des
Linux-Systems geleert. [5]
• /usr
Das Verzeichnis /usr wird für Unix System Resources verwendet. [5]
• /var
Das Verzeichnis /var beinhaltet Daten, die sich häufig ändern. Zum Beispiel Log-
Dateien, die den Zustand des Systems dokumentieren. [5]
• /vendor
Das Verzeichnis /vendor hat Ähnlichkeiten mit dem /lib Verzeichnis, mit dem
Unterschied, dass in /vendor Third-Party-Framework-Bibliotheken gespeichert
sind. [5]
11
2 Grundlagen
Da viele eingebettete Systeme direkte Einwirkung auf die Umwelt haben, müssen diese
Systeme folgende Anforderungen erfüllen [3].
Anforderungen [3]:
1. Zuverlässigkeit: Zuverlässigkeit ist die Wahrscheinlichkeit, dass ein System
nicht ausfallen wird. [3]
2. Wartbarkeit: Die Wartbarkeit ist die Wahrscheinlichkeit, dass ein ausgefallenes
System innerhalb eines bestimmten Zeitrahmens repariert werden kann. [3]
3. Verfügbarkeit: Verfügbarkeit ist die Wahrscheinlichkeit, dass das System verfüg-
bar ist. [3]
Die Zuverlässigkeit und die Wartbarkeit müssen hoch sein, damit eine
hohe Verfügbarkeit erreicht wird.
4. Sicherheit: Dieser Begriff beschreibt die Eigenschaft, dass ein ausgefallenes Sys-
tem keinen Schaden anrichtet. [3]
5. Security: Dieser Begriff beschreibt die Eigenschaft, dass vertraulichen Daten ei-
ne sichere und zuverlässige Kommunikation gewährleistet wird. [3]
12
2 Grundlagen
zugefügt wird oder dass das System gravierende Datenverluste erleidet [3]. Eine Zeit-
beschränkung wird dann als hart bezeichnet, wenn es zu einer Katastrophe kommen
kann, wenn diese Zeitbeschränkung nicht eingehalten wird [27]. Alle anderen Zeitbe-
schränkungen werden als weich bezeichnet.
Eingebettete Systeme werden als Hybridsystem bezeichnet, wenn das System analoge
und digitale Komponenten enthält [3]. In analogen Komponenten herrschen kontinu-
ierliche Signalwerte in kontinuierlicher Zeit. In digitalen Komponenten herrscht zu
diskreter Zeit ein diskreter Signalwert. [3]
Für gewöhnlich sind eingebettete Systeme reaktive Systeme. Sie können wie folgt de-
finiert werden:
Ein reaktives System ist ein System, das in ständiger Interaktion mit seiner Umgebung
ist und einen von dieser Umgebung bestimmten Schritt ausführt. [28]
2.11 Harvard-Architektur
13
2 Grundlagen
für die Steuerung des Prozessors. Das Steuerwerk ist für die Programmablaufsteue-
rung zuständig. Es wird auch Leitwerk genannt. Das Steuerwerk steuert das ganze
Mikroprozessor-System mit Steuersignalen. Die Verbindungsleitungen sorgen für die
Vernetzung der einzelnen Komponenten. [12]
Steuerwerk Operationswerk
Eingabe-Einheit Ausgabe-Einheit
Speicher
Die Erweiterung des Rechenmodells nach „Von Neumann“ wird „Von Neumann Struk-
tur“ genannt (Abbildung 2.7). Die Verbindungen der Einzelkomponenten werden in
Bussystemen gebündelt. Dabei werden Daten-, Adress- und Steuerbus getrennt. Der
Prozessor adressiert über den Adressbus Speicherplatz auf dem Hauptspeicher und
den Ein- und Ausgabeeinheiten, auf die zugegriffen werden soll. Der Datenbus wird
für die Datenübertragung vom und zum Speicher oder von und zu den Ein- und Aus-
gabeeinheiten verwendet. Der Steuerbus dient dem Übertragen von Steuersignalen, die
den Programmablauf steuern. [12]
Adressbus
Ein-,
CPU Speicher Ausgabe-
Einheit
Datenbus
Steuerbus
14
2 Grundlagen
Für die Bearbeitung eines Befehles sind mehrere streng sequenzielle ablaufende
Schritte notwendig [12]:
Daten und Programmcode werden aus dem gleichen Speicher über den Datenbus trans-
portiert. Die Inhalte von jeder Speicherzelle sind als Befehl, Daten oder Adressen
interpretierbar. Die „Von-Neumann-Architektur“ hat den Nachteil, dass es zu einem
Engpass auf dem Datenbus kommt [12]. Dort werden Befehle und Daten von und
zum Arbeitsspeicher nacheinander gesendet. Dieser Engpass wird als „Von-Neumann-
Flaschenhals“ bezeichnet. [12]
15
2 Grundlagen
APR
ADA
Ein-,
Speicher
CPU Ausgabe-
DA/PR
Einheit
DDA
DPR
Steuerbus
A = Adressbus PR = Programmspeicher
D = Datenbus DA = Datenspeicher
Bei der Harvard-Struktur existieren getrennte Speicher für Programme und Daten [12].
Der Adressbus des Programmspeichers (APR) dient dazu, Programmspeicher (PR)
zu adressieren. Der Adressbus des Datenspeichers (ADA) ist dafür da, Datenspei-
cher (DA) zu adressieren. Der Datenbus des Datenspeichers (DDA) verbindet die CPU
mit dem DA. Der Datenbus des Programmspeichers (DPR) verbindet die CPU mit dem
PR. Der Steuerbus bleibt so, wie er schon bei der „Von-Neumann-Struktur“ war. Das
Trennen der Adressbusse ist eine notwendige Voraussetzung, damit Daten und Pro-
grammcode zeitlich getrennt voneinander bearbeitet werden können [12].
2.12 Interprozessor-Kommunikation
Die Kommunikation zwischen den Prozessoren basiert auf dem Remote Processor
Messaging (RPMsg)-Framework und den Mailbox-Mechanismen [29].
16
2 Grundlagen
Cortex-A7 Cortex-M4
application application
rpmsg client
MCU SRAM
rpmsg RX & TX Vrings OpenAMP
rproc_core Buffers
Legende
3rd Party Hardware
ST Community Interface
17
2 Grundlagen
Bei verteilten Systemen mit mehreren Prozessoren treten Schwierigkeiten, wie die
Verteilung des Speichers, das Festlegen eines Shared-Memorys zum Austausch von
Informationen zwischen den Prozessoren, die Verteilung von System-Ressourcen, die
Verteilung und das Managen von Interruptroutinen, so wie viele andere Probleme auf
[31]. Um diesen Problemen entgegenwirken zu können, wird auf das Open Source
Framework OpenAMP [32] zurückgegriffen.
OpenAMP ist eine Entwicklung der Multicore Association (MCA) [33] mit dem
Ziel, die Interaktion von Betriebssystemen innerhalb eines breiten Spektrums komple-
xer homogener und heterogener Architekturen und asymmetrische Multiprocessing-
Anwendungen zu ermöglichen, um die durch die Multicore-Konfiguration gebotene
Parallelität zu nutzen. Diese MCA-Arbeitsgruppe konzentriert sich auf die Standar-
disierung der Application-Programming-Interface (API)s, die Bereitstellung einer de-
taillierten Dokumentation für die Spezifikation und die Erweiterung der Funktionalität
von OpenAMP. [33]
18
2 Grundlagen
STM32Cube- STM32Cube-
Drivers Middleware
19
2 Grundlagen
Das Robot Operating System (ROS) ist ein System, das Entwicklern von Roboteran-
wendungen Bibliotheken und Werkzeuge zur Verfügung stellt. ROS beinhaltet Visua-
lisierungen, Bibliotheken, Hardware Abstraktion, Gerätetreiber, Nachrichtenvermitt-
lung, Paketverwaltung und andere Komponenten. [35]
Im Kontext dieser Bachelorarbeit wird ROS für die Kommunikation und Parameter-
Übergabe im lokalen Netzwerk genutzt. Ein ROS-Netzwerk ist so organisiert, dass ein
Master mit n Knoten verbunden ist (Abbildung 2.11). Die Knoten veröffentlichen und
abonnieren Topics. Daten können durch vordefinierte und selbst erstellte Nachrichten-
typen übertragen werden. [36]
Registrierung Registrierung
ROS-Master
Registrierung
Topic 1 Topic 2
/top1 /top2
Beispiel1.msg Beispiel2.msg
Veröffentlichung Veröffentlichung
Abonnement Abonnement
20
3 Systemkonzipierung
PWM-Links
PWM-Rechts
FR-Rechts
FR-Links
21
3 Systemkonzipierung
3.1 Anforderungen
Die Anforderungen, die an die BumbleBee-Firmware gestellt werden, werden aus dem
Projektauftrag Punkt A.1.1 und dem aus dem Projektauftrag entstandenem Lastenheft
Punkt A.1.2 abgeleitet. Im Folgenden werden diese Anforderungen zusammengefasst
[37, 38]. Das Festlegen von Vertragsinhalten ist nach DIN 69901-2:2009-01 [10, S. 24],
wie in Kapitel 2.1 beschrieben, der Prozess, der vor dem Prozess D.8.3 der »(Mindest-
standard) „Machbarkeit bewerten“ stattfinden muss.
22
3 Systemkonzipierung
3.2 Umfeldmodell
Das Umfeldmodell wird nach [39, S. 91f.] erstellt. Das Umfeldmodell (Abbildung 3.2)
zeigt, welche Kommunikationsschnittstellen implementiert werden.
Bumblebee
STM32MP157C-DK2
Cortex M4 Cortex A7
Motor Controller
PCB-Motoren
Umgebung Räder
Host Computer
Bediener
(Wlan Client)
Legende
Systemelement Umfeldelement Informationsfluss Energiefluss
23
3 Systemkonzipierung
3.3 Kommunikationsschnittstellen
24
4 Software Implementierung
Das folgende Kapitel beschreibt die Umsetzung der in Kapitel 3 aufgestellten Anfor-
derungen. Eine Gesamtdokumentation des Codes wurde mit Doxygen [40] erstellt und
befindet sich unter Punkt A.1.4.
25
4 Software Implementierung
Kriterien: 1 2 3 4
Starter Package
Developer Package
Distribution Package
Tabelle 4.1: Kriterien für die Auswahl des embedded Software Package
Durch das Aufstellen und das Begutachten der Kriterien wird das Developer Package
ausgewählt. Die Installation des Developer Package ist in dem Dokument „Installation
der Software Packages“ Punkt A.1.3, beschrieben.
Für die Cortex-M4-seitige Konfiguration der MPU wird das Tool STM32CubeMX
verwendet. Das STM32MP157C-DK2 Board ist im Vergleich zu den Mikrocon-
trollern der Serie STM32F4 aufwendiger zu konfigurieren. Das liegt daran, dass
die STM32MP157C-DK2 zwei Recheneinheiten besitzt, die sich den Zugriff auf
Peripherien teilen. Aus diesem Grund müssen zusätzliche „System Core“ und
„Middleware“ Einstellungen getroffen werden, die bei der Konfiguration eines
STM32 Mikrocontrollers mit einer Recheneinheit nicht gemacht werden müssten. Die
„System Core“ Einstellungen beinhalten die Unterpunkte Double Data Rate (DDR),
Direct Memory Access (DMA), Generic Interrupt Controller (GIC), GPIO, Hardware
Semaphore (HSEM), Inter-Processor Communication Controller (IPCC), Independent
Watchdog (IWDG)1, IWDG2, Memory Access Controller (MDMA), Nested Vectored
Interrupt Controller (NVIC), Reset and Clock Controller (RCC), System (SYS), Sys-
tem Window Watchdog (WWDG)1. Die Einstellung „Middleware“ beinhaltet die Un-
terpunkte Free Real-Time Operating System (FreeRTOS) und OpenAMP. Um nicht
die gesamte Konfiguration der MPU händisch einstellen zu müssen, wird eine von
STM32CubeMX mitgelieferte Standard-Konfiguration als Grundlage der Parametrie-
rung verwendet.
26
4 Software Implementierung
Die Ansteuerung des BumbleBees, erfordert wie in Tabelle 4.2 zusehen ist, vier Ein-
gänge. Die Platine des BumbleBees hat zwei Motorcontroller, die jeweils einen Puls-
weitenmodulation (PWM)-Eingang und einen Forward/Reverse (FR)-Eingang besit-
zen. Der Duty Cycle (DC) der PWM gibt die Geschwindigkeit der Motoren vor. Der
FR-Eingang bestimmt die Drehrichtung der Motoren [44, 6].
27
4 Software Implementierung
Für den geordneten Zugriff des Cortex-M4 auf gemeinsame Ressourcen, wird HSEM
aktiviert. Dies wird, wie in Abbildung 4.2 zu sehen, unter dem Unterpunkt HSEM
eingestellt.
28
4 Software Implementierung
Für die IPC muss, wie in Abbildung 4.3 zu sehen, der Unterpunkt IPCC
konfiguriert werden. Die Interrupts „IPCC RX1 occupied interrupt“ und
„IPCC TX1 free interrupt“ werden angewählt, um die Nachrichten der IPC über
die Interrupt-Routinen senden und empfangen zu können.
29
4 Software Implementierung
30
4 Software Implementierung
fProzessortakt
ftimetick =
Prescaler + 1
Die Frequenz ftimetick ist die Frequenz, mit der der Timer das Zählregister inkre-
mentiert. Der Timer inkrementiert so lange, bis der Wert des Zählregisters den Wert
der Counter Period überschritten hat. Um ftimetick zu errechnen, wird geprüft ob ein
Prescaler erforderlich ist. Dafür muss bekannt sein, wie groß der maximale Wert der
Counter Period ist. Als PWM-Timer wird der Timer 1 ausgewählt, da dieser Timer
zwei GPIO-Pin-Ausgänge auf dem Anschluss „CN13:Arduino“ (Arduino Connector)
hat. Timer 1 ist ein 16 bit Timer [8]. Der maximale Wert der Counter Period eines
16 bit Timer beträgt 65535.
Mit dem maximalen Counter Period Wert und dem fProzessortakt wird errechnet, ob ein
Prescaler erforderlich ist.
fProzessortakt
fmin. (mit max. Counter Period Wert) =
Counter Periodmax. + 1
fPW M min. (mit max. Counter Period Wert) = 3,187 224 274 kHz
Da die Freuenz fPW M min. (mit max. Counter Period Wert) kleiner ist als die ausgewählte Fre-
quenz fPW Mausgewählt , wird als Prescaler 0 verwendet.
fPW M min. (mit max. Counter Period Wert) < fPW Mausgewählt
Um die Auswahl des Prescaler deutlich zu machen, wird diese nochmals im Zeit-
bereich dargestellt. Das bedeutet, dass die ausgewählte Periodendauer TPW Mausgewählt
kleiner ist als die mit einem Prescaler von 0 maximal mögliche Periodendauer
TPW M max. (mit max. Counter Period Wert) .
TPW M max. (mit max. Counter Period Wert) > TPW Mausgewählt
Mit dem ausgewählten Prescaler von 0 und der Frequenz des Prozessortaktes
fProzessortakt wird die Frequenz ftimetick errechnet.
31
4 Software Implementierung
fProzessortakt
ftimetick = = fProzessortakt = 208,877 93 MHz
Prescaler + 1
Der Counter Period Wert wird ermittelt.
ftimetick
Counter Period = − 1 = 3631, 659652 ≈ 3632
fPW Mausgewählt
Die Tabelle 4.3 zeigt die Pinbelegung zwischen der MPU und der Platine des
BumbleBees.
32
4 Software Implementierung
In den Projekt Manager Einstellungen wird unter Project die „Toolchain /IDE“ ausge-
wählt. Dies ist in Abbildung 4.6 zu erkennen [34].
33
4 Software Implementierung
Unter „Code Generator“ wird der Haken „Keep User Code when re-generating“ gesetzt
[34].
Das generierte Projekt wird durch das Klicken auf „Open Project“ geöffnet (Abbil-
dung 4.9) [34].
34
4 Software Implementierung
Bei der MPU sind die Cortex-A7 Prozessoren und der Cortex-M4 Pro-
zessor mit der „MLAHB: ARM 32 bit multi-AHB bus matrix (209 MHz)“
verbunden (Abbildung 4.10). Die Cortex A-7 Prozessoren sind über den
„AXIM: ARN 64 bit AXI interconnect 266 MHz“ asynchron mit dem MLAHB
verbunden. Der Cortex-M4 Prozessor ist über den D-Bus, den I-Bus und den S-Bus
mit dem MLAHB verbunden (Abbildung 4.10). Um vom Cortex-M4 Prozessor
während der Laufzeit der Cortex-A7 Prozessoren einen GPIO Pin zu schalten, ist
es wichtig, dass beide Prozessoren nicht gleichzeitig auf einen GPIO-Pin zugreifen
können. [4]
Für den Zugriff auf die GPIO-Ports werden aus diesem Grund HSEM genutzt.
HSEM können in Computersystemen mit mindestens zwei Prozessoren, die über Bus-
se Zugriff auf gemeinsame Ressourcen haben, eingesetzt werden, um ein gleich-
zeitiges Zugreifen auf eine Speicherstelle zu verhindern [45]. Die HSEM wer-
den durch die Funktionen Periph_Lock und Periph_Unlock aufgerufen. Durch
die Funktion Periph_Lock, der der Pointer auf das Makro des GPIO-Ports und
35
4 Software Implementierung
die Timeout Zeit in ms übergeben wird, wird der Zugriff für die Cortex-A7
Prozessoren gesperrt. Ist der GPIO-Port gesperrt, kann der Cortex-M4 Prozes-
sor auf den GPIO-Port zugreifen. Die Funktion Periph_Lock sperrt den GPIO-
Port mit der Funktion HAL_HSEM_FastTake. HAL_HSEM_FastTake wird der
HSEM Index des GPIO-Ports übergeben. Wenn die Funktion HAL_HSEM_FastTake
den GPIO-Port vor dem Ablauf der Timeout Zeit sperren kann, gibt die Funk-
tion Periph_Lock das Makro LOCK_RESOURCE_STATUS_OK zurück. Wenn
die Funktion HAL_HSEM_FastTake den GPIO-Port nicht vor dem Ablauf
der Timeout Zeit sperren kann, gibt die Funktion Periph_Lock das Makro
LOCK_RESOURCE_STATUS_Timeout zurück. Tritt ein Fehler bei dem Aufruf der
Funktion HAL_HSEM_FastTake auf, dann gibt die Funktion Periph_Lock das Ma-
kro LOCK_RESOURCE_STATUS_ERROR zurück. Die Funktion Periph_Lock wird
durch das Makro PERIPH_LOCK aufgerufen. Dem Makro PERIPH_LOCK wird der
GPIO-Port übergeben. Das Makro PERIPH_LOCK übergibt den GPIO-Port und eine
konstante Timeout Zeit von 100 ms. Die Funktion Periph_Unlock entsperrt den von
Periph_Lock gesperrten GPIO-Port. Der Funktion Periph_Unlock wird der Pointer auf
das Makro des GPIO-Ports übergeben. In der Funktion Periph_Unlock wird durch den
Aufruf der Funktion HAL_HSEM_Release die Sperrung des GPIO-Ports wieder auf-
gehoben. Die Funktion Periph_Unlock wird durch das Makro PERIPH_UNLOCK auf-
gerufen. Dem Makro PERIPH_UNLOCK wird der GPIO-Port übergeben. Das Makro
PERIPH_UNLOCK übergibt den GPIO-Port an die Funktion Periph_Unlock. Soll an
einer beliebigen Stelle im Programm ein GPIO-Pin geschaltet werden, ist dies mit dem
zusätzlichen Aufrufen der Makros PERIPH_LOCK und PERIPH_UNLOCK möglich.
Bevor der GPIO-Pin geschaltet wird, wird das Makro PERIPH_LOCK aufgerufen. Der
GPIO-Port wird für den Zugriff der Cortex-A7 Prozessoren gesperrt. Ist der Zugriff
für die Cortex-A7 Prozessoren gesperrt, kann der Cortex-M4 Prozessor die GPIO-Pins
des gesperrten GPIO-Ports schalten. Der GPIO-Pin wird durch den Aufruf der Funkti-
on HAL_GPIO_WritePin geschaltet. Der Funktion HAL_GPIO_WritePin werden das
Makro des GPIO-Ports, das Makro des GPIO-Pins und der Pin Status übergeben. An-
schließend wird das Makro PERIPH_UNLOCK aufgerufen, das den GPIO-Port ent-
sperrt. [46]
36
4 Software Implementierung
Um einen Datentransfer zwischen dem Cortex-M4 Prozessor und den Cortex-A7 Pro-
zessoren zu ermöglichen, gibt es einen geteilten Speicher. Abbildung 4.11 zeigt die
Anordnung der Prozessoren und der Speicher. Rot eingerahmt sind die Dual Cortex-
A7 CPU, der Cortex-M4 Prozessor und die Speicherbereiche SRAM1, SRAM2,
SRAM3 und SRAM4. Die Speicherbereiche SRAM1- 4 sind zwei 128 k Byte und zwei
64 k Byte große statische RAMs. SRAM1- 4 wird vom Cortex-M4 für das Ausführen
von Code, Datenverwaltung und Datenspeicherung für den Austausch mit den Cortex-
A7 Prozessoren genutzt [8].
37
4 Software Implementierung
Channel 1
A7 M4
Master Slave
Channel 2
38
4 Software Implementierung
# Terminaleinstellungen ändern
39
4 Software Implementierung
verschiedene Protokolle verglichen: „MQTT“ [50], Apache Kafka“ [51] und „Protocol
Buffers“ [52].
Für den Vergleich der Protokolle wurden zwei Kriterien aufgestellt:
• Kriterium 1: Das Protokoll muss in C implementierbar sein.
• Kriterium 2: Die Nutzung des Protokolles muss benutzerfreundlich sein.
Um zu testen, ob die Nutzung das Protokolles benutzerfreundlich ist, wurde versucht
ein einfaches Beispielprotokoll zu finden und dieses innerhalb von 2 h auf dem Host-
Computer zu implementieren.
Kriterien: 1 2
MQTT
Apache Kafka
Protocol Buffers
Tabelle 4.4: Kriterien zu der Auswahl des embedded Software Package
1 0000 0001
40
4 Software Implementierung
Zuerst entfallen alle msbs, da diese nur anzeigen, ob das Ende der Zahl erreicht ist.
Dann werden die Gruppen von 7 Bits getauscht, da die Variants Zahlen mit der nied-
rigsten Gruppe zuerst gespeichert wurde.
Nanopb
Nanopb [55] bezeichnet die C Implementierung für einen Encoder und einen Decoder
des Protokollformates Protobuf.
Das Protokoll, das erzeugt werden soll, wird zu Anfang in einer *.proto Datei de-
finiert. Aus dieser *.proto Datei werden mit dem Protobuf-Compiler („protoc -o“)
*.pb Dateien. Die *.pb Dateien sind „File Descriptor Sets“. Das Python-Script „na-
41
4 Software Implementierung
nopb_generator.py“ erzeugt auf der Basis der „File Descriptor Sets“ C-Code. Aus je-
dem „File Descriptor Sets“ wird eine Header- und eine Quellcodedatei erzeugt [53].
In Abbildung 4.14 ist zu erkennen, dass sechs Nachrichten definiert wurden. Die Nach-
richten werden jeweils in Structs übersetzt. Die ersten fünf Nachrichten sind Steuerbe-
fehle. Die sechste Nachricht enthält die ersten fünf Nachrichten. Das aus der *.proto
Datei generierte Protokoll hat die in Abbildung 4.14 abgebildete Struktur.
int32_t bool
_Stm32mp1Message
42
4 Software Implementierung
Cortex-A7 seitig wird die Funktion encode aus der Funktion convert_ros_to_protobuf
aufgerufen (Abbildung 4.15).
Abbildung 4.15: Verschlüsseln der Protobuf Nachricht auf der Seite des Cortex-A7
Cortex-M4 seitig wird die Funktion encode nach dem Interrupt IPCC_RX1 aus der
Funktion virtUartReceiveTransmit aufgerufen.
Abbildung 4.16: Entschlüsseln der Protobuf Nachricht auf der Seite des Cortex-M4
Die Hauptaufgabe des Cortex-A7 Executable ist es, die ROS-Bus-Nachrichten an den
Coprozessor zu senden.
Das Executable des Cortex-A7 startet den Coprozessor (Cortex-M4) und initialisiert
zwei Threads Abbildung 4.17. Das Starten des Coprozessors ist unter Abschnitt 4.7
beschrieben. Der Thread thread_copro dient dazu, IPCC-Nachrichten zu empfangen.
Der Thread thread_ROS dient dazu, ROS-Bus-Nachrichten zu empfangen. Wird von
43
4 Software Implementierung
dem ROS Thread eine Nachricht empfangen, wird eine Flag gesetzt, die in der Funk-
tion ros_Handler bearbeitet wird (Abbildung 4.18).
In Abbildung 4.18 ist die Main while-Schleife des Cortex-A7 Executable abge-
bildet. Zusehen ist, dass, wenn die rosFlag gesetzt wurde, die Funktionen con-
vert_ros_to_protobuff(), encode(), copro_send_nanopb(), copro_writeTtyRpmsg(),
und write() ausgeführt werden. Anschließend wird das rosFlag wieder auf 0 gesetzt.
Die Funktion write() schreibt den vorher kodierten Byte-Stream in den Teletype (TTY)
Kanal ttyRPMSG0 (vgl. Abschnitt 4.4).
44
4 Software Implementierung
45
4 Software Implementierung
Die Firmware auf dem Cortex-M4 führt eine while-Schleife aus (Abbildung 4.19). In
der while-Schleife wird in der Funktion controllIrFlag die Interrupt-Flag des IPCC-
Interrupt IPCC_RX1_IRQHandler abgefragt. Wird die Flag von dem IPCC-Interrupt
gesetzt, wird die Funktion virtUartReceiveTransmit aufgerufen (Abbildung 4.20).
46
4 Software Implementierung
2.
4.
3.
1.
remote proc:
Lädt die Firmware in den Speicher des Remote-Prozessors, parst den Firmware Res-
source table, steuert die Ausführung des Remote-Prozessors (Start, Stop) und stellt
einen Dienst bereit, der die Remote-Firmware überwacht und/oder debugget. [56]
stm32_rproc:
Dies ist der Plattformtreiber des Remote-Prozessors. Der Treiber registriert hersteller-
spezifische Funktionen (Callback) für das RPROC-Framework, handelt die Pattform-
Ressourcen wie Register, Watchdogs, Reset, Uhr und Speicher und leitet die Benach-
richtigungen über das Mailbox-Framework weiter. [56]
47
4 Software Implementierung
Die noch nicht definierten Begriffe IWDG und SYSCFG sind die Namen von internen
Peripherien. [8]
Cortex-A7
application
User space debugfs sysfs
Kernel space
remote proc
stm32_rproc
mailbox
stm32_ipcc
Hardware
SoC
RETRAM/
RCC IPCC
MCU SRAM
M4 Firmware IWDG SYSCFG
Legende
3rd Party Hardware
ST Community Interface
Um die Firmware vom Cortex-A7 in den Cortex-M4 zu laden, wird die Firmware in
das Verzeichnis /lib/firmware kopiert und mit dem RPROC-Framework in den Speicher
des Cortex-M4 Prozessor geladen. [56]
1 Board $> cp <Firmware-Name> /lib/firmware
2 Board $> echo -n <Firmware-Name> > /sys/class/remoteproc/remoteproc
0/firmware
48
4 Software Implementierung
Gestartet wird die geladene Firmware mit dem folgenden Befehl [56]:
1 Board $> echo -n start > /sys/class/remoteproc/remoteproc0/state
Gestoppt wird die gestartete Firmware mit dem folgenden Befehl [56]:
1 Board $> echo -n stop > /sys/class/remoteproc/remoteproc0/state
Send message
rpmsg_send()
Send message
rpmsg_send()
Shutdown message
rpmsg_send()
Shutdown acknowledge
rpmsg_send()
Abbildung 4.23: Laden, Starten und Stoppen der Firmware des Remote Processor [48,
S. 24]
49
4 Software Implementierung
Um die Firmware des Cortex-M4 Prozessors nach dem Boot-Vorgang zu starten, wird
ein Shellskript genutzt. Das Shellskript wird auf dem Cortex-A7 Prozessor ausgeführt.
In dem Shellskript wird die BumbleBee-Anwendung gestartet, die im Initialisierungs-
schritt die Firmware des Cortex-M4 Prozessors lädt. Das Shellskript, das nach dem
Boot-Vorgang gestartet wird, ist dabei vom Developer Package vorgegeben. Der Ab-
lauf des Ladens der Cortex-M4 Firmware läuft, wie in Abbildung 4.24 zu erkennen ist
ab.
Abbildung 4.24: Starten des Cortex-M4 Prozessors aus dem Programm des Cortex-A7
Prozessors
Um auf der MPU einen WLAN-Hotspot zu erzeugen, wird ein Shellskript genutzt, das
als Beispiel im Starter und im Developer Package enthalten ist. Nach der Ausführung
des Shellskripts wird der Hotspot von der MPU gestartet. Der Host-Computer wird mit
dem Hotspot der MPU verbunden. Firmware-Dateien können mit dem Befehl scp vom
Host-Computer an die MPU gesendet werden.
1 PC $> scp <Firmware Name> root@<WLAN IP-Adresse der MPU>:/usr/local/
projects/<Pojekt Name>/lib/firmware/
50
4 Software Implementierung
Die Firmware kann wie in Abschnitt 4.7 geladen und gestartet werden.
51
4 Software Implementierung
OpenEmbedded
OpenEmbedded ist ein Buildframework zum Bauen von kompletten Linux-
Distributionen für eingebettete Linux Systeme. [42]
Um die Nutzung von OpenEmbedded beschreiben zu können, werden die drei Schlüs-
selwörter „BitBake“, „recipes“ und „layers“ beschrieben.
• BitBake
BitBake ist ein Build-Tool, dass den Fokus auf Distributionen und Pakete für das
cross compiling von eingebetteten Linux Systeme gerichtet hat. BitBake ist von
dem Paketmanagementsystem der Gentoo Linux-Distribution abgeleitet. BitBa-
ke war eine Zeit lang ein fester Bestandteil des OpenEmbedded-Projektes, bis
es als eigenständiges distributionsunabhängiges Werkzeug ausgegliedert wurde.
Die Wartung von BitBake wird vom Yocto- und vom OpenEmbedded-Projekt
übernommen. [42, 62]
• recipes
BitBake-recipes geben vor, wie ein Paket gebaut wird. In den recipes sind al-
le Paketabhängigkeiten, Quellcodeorte, Konfigurations-, Kompilierungs-, Bau-,
und Installationsanweisungen. Zusätzlich werden die Metadaten für das jewei-
lige Paket in Standardvariablen gespeichert. Während des Build-Prozesses wer-
den die recipes dazu verwendet, Abhängigkeiten zu verfolgen, Pakete cross zu
kompilieren und diese so zu paketieren, dass diese für die Installation auf dem
Zielgerät geeignet sind. [42, 62]
• layers
Eine layer ist eine Sammlung von recipes und/oder Konfigurationen, die auf dem
OpenEmbedded Core verwendet werden können. Typischerweise sind die layer
nach Themen organisiert. [42, 62]
52
4 Software Implementierung
tion wird jetzt ein workspace erstellt, in dem ROS-Indigo durch recipes heruntergela-
den, für die MPU cross-kompiliert und in die ST-Standard-Distribution integriert wird.
Für diesen Vorgang werden die Build-Tools „BitBake“ und „devtool“ verwendet.
workspace:
„ROS OpenEmbedded recipes“
„st-image-weston“
53
4 Software Implementierung
zu der layer-Liste hinzugefügt. Nach dem Hinzufügen der „meta-ros“ layer können
die in ihr enthaltenen recipes mit dem Befehl
1 PC $> devtool find-recipe core-image-ros-roscore
54
4 Software Implementierung
55
4 Software Implementierung
Abbildung 4.27 zeigt das Simulink-Modell, aus dem mit der Hilfe des Simulink Coder
C++ Code generiert wird. Das Simulink-Modell abonniert das Topic „my_topic“ und
schlüsselt die Nachricht geometry_msg/Point in drei Ausgänge auf.
56
4 Software Implementierung
Um aus dem Simulink-Modell (Abbildung 4.27) C++ Code zu generieren, müssen die
folgenden Einstellungen im Simulink Coder gemacht werden: der Solver-Type wird
auf Fixed-step und der Solver wird auf „ode3 (Bogacki-Shampine)“ gestellt [64].
57
4 Software Implementierung
Die Einstellung des Hardware board wird auf Roboter Operating System (ROS) ge-
stellt. Die Einstellung des Device vendor wird auf ARM Compatible gestellt. Die Ein-
stellung des Device type wird auf ARM Cortex gestellt. [64]
58
4 Software Implementierung
Die Einstellung Generate code only wird gewählt. Die Toolchain Catkin wird aus-
gewählt. Die Toolchain Catkin ist das in ROS enthaltene Build-System. Catkin ver-
eint CMake-Makros und Python-Skripte, um zusätzliche Funktionen zu dem Arbeits-
ablauf von CMake zu ergänzen. Das ermöglicht eine automatische Paketfindungs-
Infrastruktur und die Unterstützung für das Cross Compiling. [65]
Nachdem die Einstellungen wie in den Abbildung 4.28, Abbildung 4.29 und Abbil-
dung 4.30 gemacht wurden, wird mit der Codegenerierung gestartet.
Das Resultat der Codegenerierung ist ein Ordner, in dem sich ROS-Quellcode-Dateien
und eine CMakeLists.txt Datei befinden. Um das Projekt für die Architektur der MPU
59
4 Software Implementierung
Mit der Hilfe der CMakeLists.txt Datei, der Catkin Toolchain und der SDK wird der
generierte Code cross kompiliert.
1 PC $> cd <generated code dir>
2 PC $> mkdir build
3 PC $> cd build
4 PC $> cmake ..
5 PC $> make
60
5 Verifikation
61
5 Verifikation
Test bestanden.
Ergebnis:
62
5 Verifikation
Ergebnis:
BumbleBee,
Steuerung durch Geräte, WLAN fähiger
BumbleBee kann von Geräten,
ANF_03 die im WLAN Hotspot Computer
die mit dem WLAN-Hotspot
eingeloggt sind Simulink,
verbunden sind und auf
ROS Toolbox
den ROS oder die Simulink
ROS Toolbox installiert ist,
gesteuert werden.
Test bestanden.
Ergebnis:
Flash-Vorgang per MPU,
ANF_04
WLAN Computer
Die Firmware des Cortex-M4
kann über WLAN geflashet werden.
Test bestanden.
Ergebnis: MPU,
Matlab Simulink Computer,
ANF_05
Code Generierung Code, der in Matlab Simulink Mathlab Simulink,
generiert wurde kann ROS Toolbox
für den Cortex-A7
cross-kompiliert werden
Test bestanden.
63
5 Verifikation
64
6 Fazit und Ausblick
Die vorliegende Arbeit befasst sich mit der Implementierung der Mikroprozessor-
Plattform „STM32MP157C-DK2“ in das Miniaturfahrzeug „BumbleBee“. Es wurde
manuell und modellbasiert Software entwickelt. Es wurde eine Interprozessor Kommu-
nikation implementiert und erprobt. Das automatische Laden der Cortex-M4 Firmware
nach dem Boot der Plattform wurde implementiert. Die Steuerung des Miniaturfahr-
zeugs durch einen WLAN-Client wurde durch modellbasierte Entwicklung implemen-
tiert. Die Erprobung des Flash-Vorgangs der Cortex-M4 Firmware per WLAN wurde
erprobt. Die modellbasierte Entwicklung von Quellcode für den Cortex-A7 Prozessor
wurde mit der Hilfe des Matlab Simulink Coder und der ROS Toolbox erprobt. Hinzu
kam das Bauen einer Linux-Distribution und einer SDK mit dem Build-Framework
OpenEmbedded. Dies war nötig, um das ROS auf der Mikroprozessor-Plattform zu
installieren und um generierten Code cross zu kompilieren. Bei der modellbasierten
Entwicklung mit der ROS-Toolbox in Matlab Simulink stellte sich heraus, dass die ge-
meinsame Nutzung von verschiedenen Build-Umgebungen während des Kompilierens
zu einem erhöhten Aufwand führen kann. Bei dem automatischen Laden der Cortex-
M4 Firmware wurde nicht bedacht, dass die verwendeten GPIO-Pins sich während
des Boot-Vorgangs auf den High-Pegeln befinden können. Das hat zur Folge, dass die
Motoren des BumbleBees während des Boot-Vorgangs in unterschiedliche Richtungen
drehen. Nach dem Booten des Linux-Betriebssystemes und dem automatischen Start
der Firmware werden die Motoren gestoppt.
Es wurde in einem einmaligen Versuch erprobt, ob die Cortex-M4 Firmware vor dem
Booten des Betriebssystemes über das bootcmd [66] des Bootloaders U-Boot geladen
werden kann. Dieser Versuch scheiterte.
In einem nachfolgenden Projekt könnte der automatische Start der Firmware vor dem
Booten des Betriebssystems erprobt werden.
65
6 Fazit und Ausblick
Aufgelistet werden Erfahrungen, die bei der Inbetriebnahme und der Implementierung
von Software und Firmware während der Arbeitsphase am BumbleBee Projekt mit der
Mikroprozessor-Plattform „STM32MP1“, gemacht wurden.
Stärken
• Verursacht keine Lizenzkosten, da der Code des Kernels auf General Public Li-
cense v2.0 basiert [67]
• Inbetriebnahme durch ausführliche Dokumentation und Code-Beispiele des Her-
stellers möglich [68]
• Netzwerkverbindungen können schnell hergestellt werden [69]
• Schnelles Erstellen der Pin-Konfiguration und des Device Tree durch das Gene-
rieren mit STM32CubeMX [34]
• Viel freie Software verfügbar, wie zum Beispiel das verwendete meta-ros Packa-
ge [67, 63]
• Kombination von Netzwerkanbindung durch Linux-Betriebssystem und Echt-
zeitfähigkeit durch den Coprozessor [8]
Schwächen
• Handhabung durch Windows Betriebssystem auf dem Host-Computer sehr er-
schwert bis nicht möglich
• Erhöhter Aufwand bei dem Zusammenführen von mehreren Build-Environments
(Abschnitt 4.9)
• Erhöhter Einarbeitungsaufwand
Chancen
• Kostengünstige Entwicklung komplexer Systeme aufbauend auf der Basis von
Open Source Software Komponenten [67]
• Durch Embedded-Linux besteht die Möglichkeit, Applikationen auf dieser Platt-
form zu entwickeln und diese auf angepasste Embedded-Linux-Systeme zu por-
tieren [7]
• Es besteht die Möglichkeit, eine Android Distribution auf der Plattform zu in-
stallieren. [70]
66
6 Fazit und Ausblick
Risiken
• Bei Bugs von Open Source Software ist man auf die Hilfe der Community ange-
wiesen
67
Abbildungsverzeichnis
I
Abbildungsverzeichnis
II
Tabellenverzeichnis
5.1 Verifikationsplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
III
Literatur
[6] Justus Wiedau und Tim Remmert und Martin Müller und Jesper Dietrich. »Ent-
wicklung eines Miniaturfahrzeuges auf PCB-Ebene BumbleBee«. Entwick-
lungsprojekt. Hochschule Bochum - Bochum University of Applied Sciences,
2019.
[7] J. Hu und G. Zhang. »Research Transplanting Method of Embedded Linux Ker-
nel Based on ARM Platform«. In: 2010 International Conference of Informa-
tion Science and Management Engineering. Bd. 2. Aug. 2010, S. 35–38. DOI:
10.1109/ISME.2010.191.
[8] STMicroelectronics. RM0436 Reference manual STM32MP157. https : / /
www.st.com/resource/en/reference_manual/DM00327659.
pdf. (Besucht am 16. 12. 2019).
IV
Literatur
V
Literatur
VI
Literatur
VII
Literatur
VIII
Literatur
[55] Aimonen Petteri. Nanopb - protocol buffers with small code size. http : / /
koti.kapsi.fi/jpa/nanopb/. (Besucht am 28. 12. 2019).
[56] STMicroelectronics. Linux remoteproc framework overview. https : / /
wiki . st . com / stm32mpu / wiki / Linux _ remoteproc _
framework _ overview # Kernel _ configuration. (Besucht am
02. 02. 2020).
[57] Uwe Jahn und Carsten Wolff und Peter Schulz. »Concepts of a Modular Sys-
tem Architecture for Distributed Robotic Systems«. In: Computers 2019 (März
2019). (Besucht am 04. 02. 2020).
[58] Dennis Hotze und Dominik Eickmann. »Entwicklung und Verifikation eines
autonomen Logistik-Fahrzeugs«. Masterthesis. Hochschule Bochum - Bochum
University of Applied Sciences, 2018.
[59] Giuliano Montorio und Hannes Dittmann. »Implementierung einer Schlupfre-
gelung per Model-Based Design sowie einer SLAM-Kartografierung für ein au-
tonomes Logistik-Fahrzeug«. Bachelorarbeit. Hochschule Bochum - Bochum
University of Applied Sciences, 2019.
[60] Inc. The MathWorks. ROS Toolbox. https : / / de . mathworks . com /
products/ros.html. (Besucht am 04. 02. 2020).
[61] Inc. The MathWorks. Simulink Coder. https://de.mathworks.com/
products/simulink- coder.html?s_tid=srchtitle. (Besucht
am 04. 02. 2020).
[62] Chris Larson Richard Purdie und Phil Blundell. BitBake User Manual. https:
//www.yoctoproject.org/docs/1.6/bitbake-user-manual/
bitbake-user-manual.html. (Besucht am 28. 01. 2020).
[63] Lukas Bulwahn. OpenEmbedded Layer for ROS Applications. https : / /
github.com/ros/meta-ros. (Besucht am 04. 02. 2020).
[64] Inc. The MathWorks. Simulink User’s Guide R2018b. https : / / www .
mathworks.com/help/pdf_doc/simulink/sl_using.pdf. (Be-
sucht am 07. 02. 2020).
[65] Open Source Robotics Foundation. Catkin Conceptual Overview. http : / /
wiki . ros . org / catkin / conceptual _ overview. (Besucht am
04. 02. 2020).
IX
Literatur
X
A Anhang
1 Projektauftrag BumbleBee
2 Lastenheft Version 1.0
3 Installation der Software Packages
4 Doxygen generierte Dokumentation der Programme
1 Cortex-A7 Doxygen generierte Dokumentation
2 Cortex-M4 Doxygen generierte Dokumentation
5 BumbleBee Programm Code
1 BumbleBee Cortex-A7 Programmcode
2 BumbleBee Cortex-M4 Programmcode
6 Simulink-Modelle
1 ROS-BumbleBee
2 ROS-Host-Computer
XI