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.

Prototypenbau gestern und heute

Ideen umsetzen ist eines der Ziele der Make Bewegung. Egal ob man im Bereich Stricken, Holzarbeiten oder Elektronik unterwegs ist – man möchte irgendwie schnell ans Ziel kommen. Da auch die Maker durch die Verfügbarkeit von günstigen Herstellungsmethoden und immer günstiger werdenden Geräten ihre Art und Weise des Prototypenbaus verändert haben, möchte ich einmal kurz vorstellen, wie meine Vorgehensweise mittlerweile aussieht und auch zeigen, wie ich das früher gemacht habe.

Möchte ich heute ein Projekt umsetzen, so starte ich nur noch sehr selten mit einem einzelnen Mikrocontroller, um den ich die Logik auf einer Lochrasterplatine aufbaue, da es viele unterschiedliche Entwicklungsboards gibt, die mir die Arbeit hier stark vereinfachen können. Hier liegt die Arduino Plattform, die ESP8266 und ESP32 Boards aber auch die Discovery Boards mittlerweile weit vorne. Für diese Boards gibt es bereits eine große Community, die sich um Bibliotheken und Anbindung von externen Sensoren, etc. kümmern. Im Idealfall sucht man sich also nur noch ein passendes Modul aus, lädt ein Beispielprogramm herunter und fertig ist der Prototyp.

Früher: Lochrasterplatine mit Atmel Mikrocontroller

Heute: verschiedene (LoRa) Entwicklungsboards

Reicht die einfache Variante nicht aus, so kann man sich im Bereich von Open Hardware umschauen. In meinem Beispiel habe ich nach einem LoRa Board geschaut, das möglichst flexibel einzusetzen ist, Standardkomponenten verwendet,  stromsparend arbeitet und auch über Batterie betrieben werden kann. Wie so oft wird man hier bei GitHub fündig. Bei diesem Board hatte ich wieder Glück, denn es verwendet wieder ein Standardentwicklungsboard – den Arduino Pro Mini – und lässt sich dadurch wieder ganz einfach programmieren.
Findet man kein passendes Board setzt man sich einfach hin und bastelt schnell ein eigenes Platinenlayout. Passende Layoutsoftware gibt es mittlerweile für kleinere Designs umsonst, bspw. EAGLE oder KiCad. In letzter Zeit verwende ich ab und an auch mal das Online-Layoutprogramm EasyEDA.

Heute: Fertig designtes Open Hardware Board (grün)

Früher habe ich mich dann noch selbst in den Keller gestellt und per Tonertransferverfahren das Platinenlayout auf die Rohplatine gebracht und danach dann in dem selbst gebauten Ätzgerät geätzt. Danach einmal kurz drüberschauen, ob die Leiterbahnen in Ordnung sind, die Löcher für die Bauteile bohren und zum Schluß Leiterbahnen verzinnen.

Früher: selbstgebautes Ätzgerät

Das das alles sehr umständlich und zeitraubend ist und wir als Maker, wenn wir gerade mal ein paar Stunden in der Woche an unseren Projekten arbeiten, auch zu wenig Zeit dafür haben, dürfte klar sein. Aus diesem Grund bin ich dazu übergegangen, einen der vielen Leiterplattenhersteller zu verwenden, die mir die fertigen Platinen durchkontaktiert, mit Lötstopplack und Beschriftung direkt nach Hause liefern und dank der Konkurrenz aus Fernost bekommt man so als Maker sehr schnell eine sehr gute Qualität, sodass sich das Design eines Prototypen schon lohnt.

Weiter geht’s mit der Bestückung: während man früher eher PTH Bauelemente verwendet hat, verwende ich – wenn möglich – heute ausschließlich SMD Bauteile. Das hat den Grund, das sie wesentlich einfacher zu verarbeiten sind und ich natürlich auch kleinere Boards bauen kann. Mit einer kleinen Spritze mit Lötpaste, werden die freien Pads auf dem Boards „eingeschmiert“ und die SMD Bauteile in die Lötpaste gesetzt. Man braucht hier nicht einmal sehr genau zu arbeiten, da der Kapillareffekt und der Lötstopplack der Platine dafür sorgen, dass das Bauteil notfalls auch in Position gezogen wird. Danach geht’s ab in den Reflow-Ofen – wir Maker haben uns dafür Pizza Öfen umgebaut oder einfach einen der günstigen Reflow-Öfen aus Fernost gekauft. Ich besitze einen letzteren und habe ihn erstmal umgebaut: Krepp Band raus und Kapton Band rein, Gehäuse vernünftig geerdet, neue Temperaturreferenz eingebaut und eine neue Firmware eingespielt. Damit kann man dann auch schnell mal ein paar Platinen mehr „backen“.

Heute: bestücktes Board mit Lötpaste und aufgesetzten Bauteilen

Heute: Platinen backen im Reflow Ofen

Danach überprüfe ich mit einem Mikroskop nochmal den Sitz der Bauteile und ob die Lötstellen soweit in Ordnung sind. Falls nicht, wird nochmal nachgearbeitet und entweder mit einer Reflow Workstation nachgelötet oder mit Entlötsauglitze überschüssiges Lot entfernt.

Heute: Sichtprüfung mit Mikroskop – hier zu viel Lot zwischen zwei Kontakten

Das war’s auch schon. Klar, dass ich mittlerweile das ein oder andere Gerät in meiner Werkstatt habe, das ein Anfänger noch nicht haben dürfte – ist halt alles so nach und nach zusammen gekommen, aber dennoch denke ich, dass es nie einfacher war, selbst eigene Schaltungen zu realisieren und das alles für sehr wenig Geld.

Wie sieht bei euch denn die Entwicklung aus? Immernoch Lochrasterplatinen und Kupferlackdraht? Auch schon gefertigte Platinen? PTH Komponenten oder auch schon SMD? Würde mich freuen, wenn ihr mir einen Kommentar hinterlasst und mal schreibt wie ihr das macht.