Louis-Philippe Véronneau - fomuhttps://veronneau.org/2019-05-20T00:00:00-04:00Am I Fomu ?2019-05-20T00:00:00-04:002019-05-20T00:00:00-04:00Louis-Philippe Véronneautag:veronneau.org,2019-05-20:/am-i-fomu.html<p>A few months ago at FOSDEM 2019 I got my hands on a pre-production version of
the <a href="https://www.crowdsupply.com/sutajio-kosagi/fomu">Fomu</a>, a tiny open-hardware FPGA board that fits in your USB port.
Building on the smash hit of the <a href="/i-am-tomu.html">Tomu</a>, the Fomu uses an ICE40UP5K FPGA
instead of an ARM core.</p>
<p>I've never …</p><p>A few months ago at FOSDEM 2019 I got my hands on a pre-production version of
the <a href="https://www.crowdsupply.com/sutajio-kosagi/fomu">Fomu</a>, a tiny open-hardware FPGA board that fits in your USB port.
Building on the smash hit of the <a href="/i-am-tomu.html">Tomu</a>, the Fomu uses an ICE40UP5K FPGA
instead of an ARM core.</p>
<p>I've never really been into hardware hacking, and much like hacking on the
Linux kernel, messing with wires and soldering PCB boards always intimidated
me. From my perspective, playing around with the Fomu looked like a nice way
to test the water without drowning in it.</p>
<p>Since the bootloader wasn't written at the time, when I first got my Fomu hacker
board there was no easy way to test if the board was working. Lucky for me,
Giovanni Mascellani was around and flashed a test program on it using his
Raspberry Pi and a bunch of hardware probes. I was really impressed by the feat,
but it also seemed easy enough that I could do it.</p>
<p><img src="/media/blog/2019-05-20/jig.jpg" title="My flashing jig" alt="My flashing jig" height="30%" width="30%" style="float:left"></p>
<p>Back at home, I ordered a Raspberry Pi, bought some IC hooks and borrowed a
soldering iron from my neighbour. It had been a while since I had soldered
anything! Last time I did I was 14 years old and trying to save a buck making
my own fencing mask and body cords...</p>
<p>My goal was to test <a href="https://github.com/im-tomu/foboot">foboot</a>, the new DFU-compatible bootloader recently
written by Sean Cross (xobs) to make flashing programs on the board more
convenient. Replicating <a href="https://github.com/im-tomu/fomu-hardware/tree/master/hacker#programming-with-probes-the-poor-mans-version">Giovanni's setup</a>, I flashed the <a href="https://github.com/im-tomu/fomu-pi-gen">Fomu
Raspbian image</a> on my Pi and compiled the bootloader.</p>
<p>It took me a good 15 minutes to connect the IC hooks to the board, but I was
successfully able to flash foboot on the Fomu! The board now greets me with:</p>
<div class="highlight"><pre><span></span><code><span class="p">[</span><span class="w"> </span><span class="mf">9751.556784</span><span class="p">]</span><span class="w"> </span><span class="n">usb</span><span class="w"> </span><span class="mi">8</span><span class="o">-</span><span class="mf">2.4</span><span class="p">:</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">full</span><span class="o">-</span><span class="n">speed</span><span class="w"> </span><span class="n">USB</span><span class="w"> </span><span class="n">device</span><span class="w"> </span><span class="n">number</span><span class="w"> </span><span class="mi">31</span><span class="w"> </span><span class="n">using</span><span class="w"> </span><span class="n">xhci_hcd</span>
<span class="p">[</span><span class="w"> </span><span class="mf">9751.841038</span><span class="p">]</span><span class="w"> </span><span class="n">usb</span><span class="w"> </span><span class="mi">8</span><span class="o">-</span><span class="mf">2.4</span><span class="p">:</span><span class="w"> </span><span class="n">New</span><span class="w"> </span><span class="n">USB</span><span class="w"> </span><span class="n">device</span><span class="w"> </span><span class="n">found</span><span class="p">,</span><span class="w"> </span><span class="n">idVendor</span><span class="o">=</span><span class="mi">1209</span><span class="p">,</span><span class="w"> </span><span class="n">idProduct</span><span class="o">=</span><span class="mi">70</span><span class="n">b1</span><span class="p">,</span><span class="w"> </span><span class="n">bcdDevice</span><span class="o">=</span><span class="w"> </span><span class="mf">1.01</span>
<span class="p">[</span><span class="w"> </span><span class="mf">9751.841043</span><span class="p">]</span><span class="w"> </span><span class="n">usb</span><span class="w"> </span><span class="mi">8</span><span class="o">-</span><span class="mf">2.4</span><span class="p">:</span><span class="w"> </span><span class="n">New</span><span class="w"> </span><span class="n">USB</span><span class="w"> </span><span class="n">device</span><span class="w"> </span><span class="n">strings</span><span class="p">:</span><span class="w"> </span><span class="n">Mfr</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">Product</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="n">SerialNumber</span><span class="o">=</span><span class="mi">0</span>
<span class="p">[</span><span class="w"> </span><span class="mf">9751.841046</span><span class="p">]</span><span class="w"> </span><span class="n">usb</span><span class="w"> </span><span class="mi">8</span><span class="o">-</span><span class="mf">2.4</span><span class="p">:</span><span class="w"> </span><span class="n">Product</span><span class="p">:</span><span class="w"> </span><span class="n">Fomu</span><span class="w"> </span><span class="n">Bootloader</span><span class="w"> </span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="n">v1</span><span class="o">.</span><span class="mi">4</span><span class="o">-</span><span class="mi">2</span><span class="o">-</span><span class="n">g1913767</span>
<span class="p">[</span><span class="w"> </span><span class="mf">9751.841049</span><span class="p">]</span><span class="w"> </span><span class="n">usb</span><span class="w"> </span><span class="mi">8</span><span class="o">-</span><span class="mf">2.4</span><span class="p">:</span><span class="w"> </span><span class="n">Manufacturer</span><span class="p">:</span><span class="w"> </span><span class="n">Kosagi</span>
</code></pre></div>
<p>I don't have a use case for the Fomu yet, but I am sure by the time the
production version ships out, people will have written interesting programs I
can flash on it. In the meantime, it'll blink slowly in my laptop's USB port.</p>