Der Bootloader


für das Gamepad



Anleitung getestet mit Gamepad (RP2350 Plus)



Bildbox 1 (klick hier)


Beim RP2350 unterscheidet sich die Funktionsweise grundlegend von einem PC oder einem Linux-Einplatinencomputer wie dem Raspberry Pi 4/5. Da Mikrocontroller Programme direkt aus dem Flash-Speicher ausführen (XIP - Execute in Place) und keinen Standard-SD-Karten-Slot nativ im ROM-Bootloader unterstützen, wird für ein solches System ein Custom Bootloader verwendet.
Die genaue Funktionsweise, wie ein solcher Bootloader Spiele von einer SD-Karte liest und startet, läuft in folgenden Schritten ab:

1. Das Einschalten und der Sprung in den Custom Bootloader
Wenn das Gamepad eingeschaltet wird, startet als erstes das fest im Chip verankerte Bootrom des RP2350.
* Dieses Bootrom sucht an einer fest definierten Adresse des eingebauten SPI-Flash-Speichers (ab Adresse 0x10000000) nach ausführbarem Code.
* Dort ist der Custom Bootloader dauerhaft installiert (er belegt typischerweise die ersten 512 KB des Flash-Speichers). Das Bootrom übergibt die Kontrolle an diesen Bootloader.

2. Initialisierung der Hardware und Einlesen der SD-Karte
Sobald der Custom Bootloader läuft, führt er elementare Initialisierungen durch:
* Er startet die Display-Treiber und aktiviert die Steuerungselemente (Tasten).
* Er initialisiert das SD-Karten-Modul (meist über das SPI-Protokoll).
* Der Bootloader mountet das Dateisystem der SD-Karte (in der Regel FAT32). Er scannt ein vordefiniertes Verzeichnis (z. B. /games) nach ausführbaren Spieledateien.

3. Das Boot-Menü (Grafisches UI)
Auf dem Bildschirm wird dem Nutzer nun ein visuelles Menü präsentiert. Sie können durch die Liste der auf der SD-Karte abgelegten Spiele blättern. Sobald Sie ein Spiel auswählen und die Start-Taste drücken, leitet der Bootloader den eigentlichen Lade- und Flashvorgang ein (Bildbox 1, Bild 2).

4. Das dynamische "Umflashen"
Da der RP2350 das ausgewählte Spiel nicht wie ein PC einfach "per Doppelklick" im Hintergrund ausführen kann, nutzt der Bootloader bei meinem Gamepad diese technische Methode, um das Spiel zu starten:
Re-Flashing der App-Partition
Der Flash-Speicher bei meinem RP2350 ist folgendermaßen aufgeteilt: Die ersten 1024 KB gehören dem Bootloader, der Rest bildet die Application Partition. Sobald Sie das Spiel wählen, liest der Bootloader die entsprechende UF2-Datei blockweise von der SD-Karte und schreibt (flasht) sie live in die Application Partition des SPI-Flashs. Dazu muss die Datei natürlich bei Kompilieren in der IDE auf diesen Bereich ab der Adresse 0x10100000 gelinkt sein, liegt also genau bei 1 MB. Wenn Sie eine meiner Spieleanwendung mit dem vorgestellten Bootloader verwenden, ist das bereits alles erledigt.

5. Die Übergabe an das Spiel (Software Interrupt / Jump)
Nachdem das Spiel vollständig in den Flash-Speicher geschrieben wurde, muss der Bootloader die Ausführung starten:
1. Er deinitialisiert die von ihm genutzten Hardware-Peripherien (schaltet z.B. eigene Timer oder Interrupts ab), um dem Spiel ein "sauberes" System zu übergeben.
2. Er setzt den Vector Table Pointer (VTOR) der ARM-Cortex-M33-Kerne des RP2350 auf die Startadresse des neuen Spiels um. Dadurch weiß der Prozessor, wo die neuen Befehlsketten liegen.
3. Er führt einen gezielten Sprung-Befehl (Jump) zur Einstiegsadresse des Spiels aus.
Ab dieser Millisekunde läuft das Spiel autark.

Damit ist die Funktionsweise des Bootloaders in einer komprimierten Zusammenfassung beschrieben. Wenn Sie den Bootloader für mein Gamepad nutzen wollen, müssen Sie meine Platine mit allen GPIO's übernehmen oder im Quellcode entsprechende Änderungen selbst vornehmen. Den kompletten Quellcode vom 'Bootloader' finden Sie auf meinem Github-Repository https://github.com/OttoReuter/My_Gamepad/Bootloader.

Noch ein Hinweis. Ich habe die komplette Hard- und Software kompatible zum Picopad des tschechischen Herstellers Pajenicko ausgeführt. Wenn Sie sich also ein Picopad2 (mit Pico2) bestellen, können Sie meinen Bootloader aufspielen und meine Spieleanwendungen von SD Karte spielen. Umgekehrt können Sie aber auch mit dem Loader von Pajenicko auf meinem Gamepad dessen Spiele spielen. Nur auf den Ton müssen Sie in diesem Fall verzichten.



Viel Spass und Erfolg beim Ausprobieren.