Wie in einem früheren Blogbeitrag erwähnt, sind Hardware-Debugger die Königs-Klasse der eingebetteten Debugging-Werkzeuge. Bis heute gab es jedoch nur sehr wenige, relativ teure Tools für die debugWIRE-Schnittstelle, die von den klassischen ATtinys und einigen ATmega-MCUs verwendet wird.

Die gute Nachricht ist, dass man jetzt einen Arduino Uno, Nano oder Pro Mini in einen debugWIRE-Hardware-Debugger verwandeln kann, der mit avr-gdb, der AVR-Version des GNU-Projektdebuggers, kommunizieren kann.

Basierend auf RikusWs Reverse-Engineering des debugWIRE-Protokolls und anderen Implementationen von debugWIRE-Debuggern und GDB-Stubs für AVR MCUs, wie z.B.

habe ich dw-link entwickelt, ein Arduino-Programm, das einen Arduino Uno oder ein ähnliches Board in einen Hardware-Debugger verwandelt. Der Hardware-Debugger übersetzt zwischen dem debugWIRE-Protokoll, das benutzt wird, um mit dem Target-Chip auf der einen Seite zu kommunizieren, und dem GDB Remote Serial Protocol (RSP), das benutzt wird, um mit dem Host auf der anderen Seite zu kommunizieren, wie in der folgenden Abbildung visualisiert.

Es ist tatsächlich etwas mehr als eine einfache Übersetzung, da RSP-Befehle nicht eins zu eins in debugWIRE-Befehle übersetzt werden können. Zum Beispiel geschieht das Schreiben in den Flash-Speicher in RSP in beliebig großen Blöcken von Bytes, während in debugWIRE Flash-Speicher seitenweise geschrieben werden muss. Darüber hinaus werden Breakpoints verzögert gesetzt und entfernt, um den Verschleiß von Flash-Speichern zu minimieren. Und dann bieten die verschiedenen MCU-Typen alle etwas unterschiedliche debugWIRE-Operationen.

Wie setzt man dw-link ein?

Die Verwendung des Hardware-Debuggers ist unkompliziert. Zuerst muss man eine Debugging-Umgebung oder IDE einrichten und/oder einige Konfigurationsdateien der Arduino-Umgebung ändern, wie in einem früheren Blogbeitrag beschrieben. Dann muss man nur noch das folgende machen:

  1. Das dw-link GitHub-Repository herunterladen.
  2. Das dw-link-Programm auf ein Uno-Board (o.ä.) hoch laden.
  3. Das Uno-Board mit dem Host über USB verbinden.
  4. Das Uno-Board mit einem modifizierten ISP-Kabel oder 6 Einzeldrähten mit dem Target-Chip verbinden.

Die Details sind im Handbuch beschrieben, das man auch als PDF-Datei herunterladen können. Ich habe auch ein YouTube-Video gepostet, in dem erklärt wird, wie man eine Debugging-Umgebung einrichtet und die Hardware aufbaut. Außerdem habe ich noch einen Hintergrundartikel bei CodeProject geschrieben.

  • Es funktioniert mit allen Hosts, die avr-gdb unterstützen.
  • Es läuft auf allen ATmega328 Boards.
  • Es verwendet eine robuste serielle Eindraht-Kommunikationsbibliothek für die Kommunikation über die debugWIRE-Leitung.
  • Es unterstützt hohe Kommunikationsgeschwindigkeiten auf der debugWIRE-Leitung, auch wenn die Target-MCU-Taktfrequenz nur 1 MHz beträgt.
  • Es bietet bis zu 32 Software-Haltepunkte.
  • Es unterstützt Single-Stepping, bei dem nicht in Interrupt-Routinen gesprungen wird.
  • Das Umschalten zwischen debugWIRE und normalem Modus ist einfach.
  • Es wurde auf allen MCU-Typen getestet, die von ATTinyCore, von MiniCore (außer ATmega48PB, ATmega88PB, ATmega168PB) und von MicroCore unterstützt werden.

Views: 9