TinyFPGA BX Bootloader korrupt

Kennt ihr das: Ihr freut euch auf ein neues Entwicklungsboard, es kommt an, ihr schaltet es ein, führt das Tutorial durch und… Feierabend… nichts geht mehr. Aber worum geht es überhaupt? Schon während meines Studiums fand ich FPGAs sehr interessant und habe mich auch immer wieder mit der rekonfigurierbaren Hardware beschäftigt, denn, im Gegensatz zu Software, entsteht durch die Textbeschreibung eine richtige Hardware. Da es im Bereich FPGAs bisher nur proprietäre Software gab, interessieren mich natürlich die TinyFPGAs sehr, denn sie setzen auf Open Source Software und Open Hardware.
Ich habe mir deshalb zum testen mal ein TinyFPGA BX Board bestellt und es wurde auch sehr schnell geliefert. Nach dem ersten Einstecken und der Installation der entsprechenden Software unter Linux habe ich dann den Befehl (wir im Tutorial vorgegeben)

tinyfpga –update-bootloader

ausgeführt. Er wurde gestartet, brach aber direkt nach dem Löschen des EEPROMs ab. Der Chip war damit neudeutsch „gebricked“ und ließ sich nicht mehr ansprechen. Man muss dazu erklären, dass das EEPROM die Hardwarebeschreibung für das FPGA enthält und natürlich auch den Bootloader.

An dieser Stelle hat man dann zwei Möglichkeiten: man schreibt den Hersteller an und er liefert dann ein neues Modul mit – hoffentlich – aktuellem Bootloader und probiert es dann noch einmal oder man schreibt den neuen Bootloader selbst in das EEPROM. Ich habe mich für die zweite Variante entschieden und möchte hier den Weg kurz beschreiben.

Zuerst musste ich an die Pins für das EEPROM herankommen. Glücklicherweise sind sie beim TinyFPGA auf der Unterseite verfügbar, allerdings nur als Pad. Die einfachste Variante wäre jetzt, ein Kabel an die Pads zu löten. Da aber das Board ggf. auch mal in einem Prototypenboard landen soll, habe ich mir ein kleines Programmierboard gebaut, das so genanne Pogo Pins (Deutsch: Federkontaktstift) zur Kontaktierung verwendet. Das sind kleine Pins, die mit Federn gegen die Kontakte gedrückt werden (siehe Bild).

Pogo Pins auf dem TinyFPGA Programmieradapter

Als nächstes musste noch irgendwie der Bootloader in das EEPROM gebracht werden. Genau für sowas habe ich mir vor Ewigkeiten mal den Bus Pirate von Dangerous Prototypes gekauft. Zusammen mit dem Tool flashrom kann man damit dann EEPROMs neu beschreiben.

Bus Pirate mit Programmieradapter und TinyFPGA BX Board

Anschließend braucht man nur noch das TinyFPGA Board in den Programmieradapter einstecken und mit flashrom das EEPROM neu schreiben. Hat aber leider nicht beim ersten Mal funktioniert, denn das FPGA stört die SPI Kommunikation mit dem EEPROM. Dafür gibt es aber eine ganz einfache Abhilfe: einfach den Reset-Knopf auf dem TinyFPGA Board während der Kommunikation gedrückt halten, das FPGA bleibt dann im Reset Modus und schaltet die Ein- / Ausgänge auf Tristate und die Kommunikation wird nicht gestört. Weitere Informationen zum Flashvorgang und den Bootloader findet man im TinyFPGA Forum.

Übrigens: solltet ihr auch ein Programmierboard zusammenstellen, dann denkt daran, es wenigstens halbwegs zu beschriften. Solltet ihr mal wieder vor dem gleichen Problem stehen müsst ihr nicht erst die Pinbelegung wieder herausfinden.