Implementierung einer UART CLI zum Debuggen von Mikrocontroller-Firmware
Die UART CLI bietet eine Kommandozeilen-Schnittstelle über UART zum Debuggen von Mikrocontroller-Firmware. Die Syntax ist ähnlich wie bei Assembler: Befehlsname gefolgt von positionsbasierten Argumenten, getrennt durch Leerzeichen. Ein Befehl – eine Zeile.
command_name arg1 arg2 arg3 ...
Um vom PC aus zu verbinden, verwenden Sie TeraTerm mit Einstellungen für Zwischenbyte-Verzögerungen, um ein Überlaufen des Firmware-Puffers zu vermeiden. Das Erste, was in der Konsole erscheint, ist das grüne Protokoll der Systeminitialisierung, ähnlich wie bei einem Flugschreiber-Blackbox. Nach der Initialisierung erscheint der Prompt --> , manchmal mit Uptime zur Überprüfung der Taktgeber.
Befehlsstruktur: Getter und Setter
Befehle werden in Getter (Zustände anzeigen) und Setter (Parameter ändern) unterteilt. Getter sind sicher für die Firmware-Analyse.
- h oder help [substring] — Liste der Befehle, gefiltert nach Teilstring.
- TAB — Befehlsautovervollständigung.
- vi — Firmware-Version, Compiler, git SHA256.
Der Befehl ll [module] zeigt Logging-Level für Module an und unterstützt printf-ähnliches Debugging.
h
gpio
Diagnose von Hardware-Ressourcen
Die CLI gibt Zugriff auf den Zustand wichtiger Teilsysteme:
- freq — Kernfrequenz.
- clk — Aktivierte Takte für Teilsysteme.
- gl — GPIO-Pin-Zustände.
- rm [addr] [bytes] — Speicherlesen nach Adresse.
- wm [addr] [data] — Speicherschreiben.
Für Register:
rr timer5 0x10
nrm # Lesen von NAU8814-Registern über I2C
Liste der Diagnosebefehle:
| Command | Description |
|---------|----------|
| fd | Flash-Diagnose |
| pwd | PWM-Einstellungen |
| lmd | LED-Status |
| intd | Interrupts |
| cdf | CAN-Filter |
| trd | Timer |
| cd | Stapelfüllstände pro Kern |
Netzwerk- und Peripherieschnittstellen
- i2cs — Scannen des I2C-Busses, zeigt Geräteadressen an (DS3231, EEPROM).
- cs [can_num] [id] [hex_data] — CAN-Paket senden.
- ll can debug — Protokoll empfangener CAN-Pakete.
Der Befehl repeat [cmd] N P wiederholt einen Befehl N-mal mit Periode P ms – nützlich für Stresstests.
Leistungs- und Task-Überwachung
- scd — Super-Loop-Diagnose: while(1)-Iterationen/Sekunde, durchschnittliche Dauer.
- Task-Planer: Anzeigen und Deaktivieren nach ID ohne Neukompilierung.
- nvram — Lesen/Schreiben von NVRAM für Rekonfiguration.
Beispiel Super-Loop auf MCU und PC:
![scd on MCU]
reboot — Kern-Neustart.
Integrierte Rechner und Hilfsprogramme
Die CLI verwandelt das Gerät in ein Rechengerät:
- Base64-, RLE-, AES256-Decodierung.
- SHA256-, CRC16-Hashing.
- GNSS-Entfernungen, Vektorwinkel.
- Lineare Gleichungen, PLL-Koeffizienten (clock_pll_calc 220000000).
- bd val1 val2 — Bit-Differenz in 32-Bit-Registern.
- Kondensatorwert nach Markierung.
- cfim — Tatsächliche CAN-IDs nach Maske.
Spannungsteiler-Beispiel:
calc_vdiv R1=1000 R2=1000 Vin=3.3
Unit-Tests nach Teilstring: test i2c.
Wichtige Punkte
- UART CLI ist in Debug-Builds essenziell für Inbetriebnahme und Fehlersuche.
- Hält nicht bei Stromverbindung, im Gegensatz zu SWD/JTAG.
- Unterstützt UART, stdin/stdout, andere Protokolle.
- Firmware-Updates und Kalibrierung über CLI.
- Anzahl der Befehle passt sich an Flash-Größe an.
Implementierungsdetails
Die CLI ist eine hierarchische Struktur von Firmware-Modulen. Sie parst Befehle und leitet sie an Komponenten weiter. Unter Windows ist es eine Konsolenanwendung wie BusyBox für Debugging unter kontrollierten Bedingungen. Automatischer Ausstieg nach 60 Sekunden Timeout oder Esc.
— Editorial Team
Noch keine Kommentare.