"Error: board TinyFPGA-BX not connected" [SOLVED]


I am working through the TinyFPGA BX User Guide SOS blinky example.
When I get to the Atom IDE apio upload step, I get Error: board TinyFPGA-BX not connected.
(I’m on a Retina MacBook Pro running Windows 10 Pro, version 1709, build 16299.492 via bootcamp.)

With the BX plugged into a USB port I get a steady power LED and a blinking bootloader LED.

Checking Device Manager the BX corresponds to COM3 or COM4 depending upon which USB port I am connected to.

apio system --lsserial
Number of Serial devices found: 1
Description: USB Serial Device (COM3)
Hardware info: USB VID:PID=1209:2100 SER=5 LOCATION=1-1

Running apio upload -v standalone reports the same error.

I get the same error if I also depress the reset button on the BX.
I have tried several known good USB cables.

Any ideas or pointers to next steps to diagnose the problem?
Thank you.


Sounds like you have an older version of tinyprog installed. It could be that APIO installs the older version by default.

To solve, just upgrade to the latest tinyprog python module. The following commands should do the trick:

pip install tinyprog --upgrade
tinyprog -l

The latest version of tinyprog updates the bootloader automatically. A few seconds later, the bootloader will reconnect and it should work just fine.


tinyprog seemed to be up to date? :-

C:\Users\Jan\git\blink_project>pip install tinyprog --upgrade
Requirement already up-to-date: tinyprog in c:\users\jan\bin\python36\lib\site-packages
Requirement already up-to-date: pyserial<4,>=3 in c:\users\jan\bin\python36\lib\site-packages (from tinyprog)
Requirement already up-to-date: jsonmerge<2,>=1.4.0 in c:\users\jan\bin\python36\lib\site-packages (from tinyprog)
Requirement already up-to-date: intelhex<3,>=2.2.1 in c:\users\jan\bin\python36\lib\site-packages (from tinyprog)
Requirement already up-to-date: tqdm<5,>=4.19.5 in c:\users\jan\bin\python36\lib\site-packages (from tinyprog)
Requirement already up-to-date: jsonschema in c:\users\jan\bin\python36\lib\site-packages (from jsonmerge<2,>=1.4.0->tinyprog)
You are using pip version 9.0.3, however version 10.0.1 is available.
You should consider upgrading via the ‘python -m pip install --upgrade pip’ command.

C:\Users\Jan\git\blink_project>tinyprog -l
Fixing TinyFPGA BX board with wrong USB VID:PID…
Traceback (most recent call last):
File “C:\Users\Jan\bin\Python36\Scripts\tinyprog-script.py”, line 11, in
load_entry_point(‘tinyprog==1.0.5’, ‘console_scripts’, ‘tinyprog’)()
File “c:\users\jan\bin\python36\lib\site-packages\tinyprog_main_.py”, line 45, in main
File “c:\users\jan\bin\python36\lib\site-packages\tinyprog_main_.py”, line 24, in check_for_wrong_tinyfpga_bx_vidpid
import urllib2
ModuleNotFoundError: No module named ‘urllib2’

Sigh. Python 2 / Python 3 problem?


Hmm, it appears to be so. I have been running that latest release on Python 2. I will be making an update to make it work on both Python 2 and 3 as is intended. One moment…


Ok, I have a simple fix. I’m testing it on both Python 2 and 3 now. The location of urlopen moved between Python 2 and 3.


Ok @jangray, I’ve fixed the Python 2/3 compat issue and tested locally. Update tinyprog and give it another try:

pip install --no-cache-dir --upgrade tinyprog

Thanks very much for being patient and working through these issues with me! :smile:


Luke, that did the trick. tinyprog -l upgraded my bootloader, tinyprog -m dumps plausible looking JSON, and apio upload gets me an SOS blinky.

Thank you for the super responsive tech support, sir!


Awesome, glad it works for you now! :sweat_smile:


p.s. Damn, but that ice40 is tiny.


Yeah, I assume you mean both physically tiny and a tiny amount of resources. It’s tiny compared to the parts you have been working with lately, but can still do some fun things. There are a number of 32-bit RISCV cores that fit comfortably along with a nice set of peripherals.


No, I mean it is physically tiny.

Resource wise, there are plenty of resources for all kinds of great projects. I guesstimate there is room for eight or more user-mode only area-optimized RISC-V RV32I cores. I have been noodling over what to build with your BX, considering the ice40 lacks LUT-RAM so you have to put register files in EBR.

By the way, here are some early 16b RISC cores that fit in 200-300 4-LUTs.
It might be fun to bring one of these back in an ice40 multiprocessor.

I am impressed with this lovely little board (and am looking forward to the intriguing EX with HyperRAM). Onwards!


Ohh my gosh, I remember reading about these a long time ago! It would be cool to see a similar CPU on the ICE40 FPGAs. I imagine the design would change a bit due to the different constraints. Maybe a multithreaded CPU would be a good fit for a register file in blockram.


I was able to take a look at my TinyFPGA BX board today. It has the pulsating bootloader LED when I plug in to PCs.

I’ve now tried with and without USB hub, two different Haswell machines, and a 2015 MacBook Pro (macOS).

For me, Ubuntu 18.04 sees the device at and tinyprog -l / tinyprog -m and is able to interrogate the device over USB. I retried every pair of USB ports, and a USB hub. The device is visible to tinyprog on all the ports. However, all of them got the "Error: board TinyFPGA-BX not connected." when attempting a apio upload. lspci show a combo of xHCI and EHCI controllers on each Haswell host.

Same machines running Windows 10 also see the device over COM ports. and tinyprog and apio system --lsserial all can interrogate the device. All the USB ports and an external hub also got same error when trying to upload.

The Mac running High Sierra was unable to see the serial USB device when I plugged it into a port on the MBP and a USB port in a USB hub. I think the 2015 MBP is the most recent PC I have…

Is there anything else I could troubleshoot?


Are you able to program the board with ‘tinyprog -p bitstream_filename.bin’?

It looks like APIO is having some issues for people, while ‘tinyprog’ works just fine.


Having the same problem here on this Fedora Linux system - apio upload in Atom gives “Error: board TinyFPGA-BX not connected” but when I type “tinyprog -p hardware.bin” within the blinky project directory then it programs just fine.


Ok @emeb, @idcrook and anyone else that has issues with APIO, but can still access the board with tinyprog. As long as you can program the blinky example, the following will get APIO to work as well.

EDIT: I updated this to the newer and safer method.

Connect your TinyFPGA BX board and run the following commands to update the bootloader.

pip install --upgrade --no-cache-dir "tinyprog>=1.0.9"
tinyprog --update-bootloader

Once this completes successfully APIO should work fine.


Thanks Luke - that’s fixed it. APIO uploads working just fine now.


Glad to hear @emeb! I’ll be making a bootloader update mechanism in tinyprog that will make it easier to update to new bootloader releases.

wget https://github.com/tinyfpga/TinyFPGA-Bootloader/releases/download/1.0.1/tinyfpga_bx_fw.bin
mv tinyfpga_bx_fw.bin tinyfpga_bx_fw-1.0.1.bin
tinyprog -a 0 -p ./tinyfpga_bx_fw-1.0.1.bin

OK, promising…

cd blink_project
apio system --lsserial
apio upload
========================= [SUCCESS] Took 4.18 seconds =========================

Yes, using tinyprog to update the firmware got my BX working for me with apio upload. Thanks!


I released a new tinyprog that performs a safer and automated bootloader update process. If you have the “Error: board TinyFPGA-BX not connected” issue in APIO, run the following commands with your TinyFPGA BX board(s) connected on USB:

pip install --upgrade --no-cache-dir "tinyprog>=1.0.9"
tinyprog --update-bootloader