Eigene MicroPython-Firmware mit USB-HID für RP2040 erstellen

Aus Micropython
Zur Navigation springen Zur Suche springen

Erste vorläufige Anleitung[Bearbeiten | Quelltext bearbeiten]

Eigene MicroPython-Firmware mit USB-HID für RP2040 erstellen[Bearbeiten | Quelltext bearbeiten]

Ziel[Bearbeiten | Quelltext bearbeiten]

Für das Projekt WikiPad wird eine eigene MicroPython-Firmware erstellt.

Die Firmware soll folgende Eigenschaften besitzen:

  • USB-CDC (REPL)
  • USB-HID
  • USB-HID-Keyboard
  • später LVGL
  • später Displaytreiber (ILI9488)
  • später Touchtreiber (XPT2046)

In der ersten Ausbaustufe wird ausschließlich die USB-Funktionalität betrachtet.

Entwicklungsrechner[Bearbeiten | Quelltext bearbeiten]

Verwendetes System:

Ubuntu 26.04 LTS
Kernel 7.0
x86_64

Vorhandene Werkzeuge:

git
cmake
python3
arm-none-eabi-gcc

Grundlagen[Bearbeiten | Quelltext bearbeiten]

MicroPython verwendet für den RP2040 den USB-Stack TinyUSB.

Die offizielle Standard-Firmware enthält eine USB-CDC-Schnittstelle (REPL), stellt jedoch keine Python-Module für USB-HID zur Verfügung.

Die Unterstützung für USB-Geräte wird über zusätzliche Python-Module realisiert, die beim Erstellen der Firmware eingefroren ("frozen") werden.

Frozen Modules[Bearbeiten | Quelltext bearbeiten]

MicroPython besitzt ein Manifest-System zum Einbinden zusätzlicher Python-Module.

Ein Manifest wird beim Erstellen der Firmware ausgewertet und bestimmt, welche Bibliotheken dauerhaft Bestandteil der Firmware werden.

Die offizielle Dokumentation beschreibt dieses Verfahren ausführlich.

USB-Module[Bearbeiten | Quelltext bearbeiten]

Nach aktuellem Stand existieren folgende USB-Module:

usb-device
usb-device-cdc
usb-device-hid
usb-device-keyboard
usb-device-mouse
usb-device-midi

Diese Module werden über das Manifest eingebunden.

Beispiel:

require("usb-device")
require("usb-device-cdc")
require("usb-device-hid")
require("usb-device-keyboard")

Erwartetes Ergebnis[Bearbeiten | Quelltext bearbeiten]

Nach erfolgreichem Erstellen der Firmware sollte der RP2040 dem PC gleichzeitig zwei USB-Geräte bereitstellen:

RP2040

USB Composite Device

├── CDC
│     └── REPL
│
└── HID
└── Keyboard

Dadurch kann die Firmware weiterhin mit Thonny verwendet werden, während gleichzeitig Tastaturdaten an den PC übertragen werden.

Projektplan[Bearbeiten | Quelltext bearbeiten]

Phase 1

  • MicroPython selbst erstellen
  • USB-Module einbinden
  • Firmware erzeugen
  • Firmware testen

Phase 2

  • erstes HID-Testprogramm
  • einzelne Tastencodes senden
  • HID-Reports senden

Phase 3

  • UART-Protokoll
  • RP2040 als HID-Ausgabegerät

Phase 4

  • CYD mit LVGL
  • Makrotastatur
  • JSON-Konfiguration

Offene Punkte[Bearbeiten | Quelltext bearbeiten]

Vor Beginn der eigentlichen Implementierung sind folgende Punkte zu überprüfen:

  • Wo befinden sich die USB-Module im Repository?
  • Werden sie automatisch mit ausgecheckt oder stammen sie aus micropython-lib?
  • Welche Änderungen sind im Manifest erforderlich?
  • Ist USB-CDC + USB-HID für den RP2040 vollständig unterstützt?
  • Sind zusätzliche Build-Optionen erforderlich?

Erst nach Klärung dieser Punkte sollte die Firmware erstellt werden.