Git Product home page Git Product logo

tinyfpga-bx's Introduction

TinyFPGA BX

The TinyFPGA BX board is a tiny FPGA board with low cost per logic element and convenient USB bitstream programming capability. It measures just 18mm x 36mm and is a perfect fit for breadboards. The heart of the BX board is a iCE40LP8K-CM81 FPGA from Lattice.

Getting Started on the BX

The TinyFPGA BX User Guide will help you get up and running with the BX.

For full details on the ICE40 series of FPGAs you can read the ICE40 Family Handbook.

Specifications

  • Height: 1.4 inches, width: 0.7 inches
  • Programming interface: USB 2.0 full-speed (12 mbit/sec)
  • ICE40LP8K FPGA
    • 7,680 four-input look-up-tables
    • 128 KBit block RAM
    • Phase Locked Loop
    • 41 user IO pins
  • 8 MBit of SPI Flash
  • Onboard 3.3 V (300 mA) and 1.2 V (150 mA) LDO regulators
  • Low-Power 16 MHz MEMs Oscillator
    • 1.3 mA power when active
    • 50 ppm stability.

Project Directory Structure

board

This contains a KiCad project with the schematic and layout of the B-series boards. The board is designed with 4/4mil track size/spacing and 0.2mm hole size. BOM list for the BX board is available here as well.

icecube2_template

This is a template iCEcube2 project for developing your own designs to program onto the board. It takes care of pin and clock constraints. Just edit the TinyFPGA_BX.v file to add your designs module(s).

icestorm_template

This is a template IceStorm project for developing your own designs to program onto the board. It takes care of pin and clock constraints. Just edit the TinyFPGA_BX.v file to add your designs module(s). Use make to build your project.

Project Log

For more information on the development and production of the B-Series please read and follow the TinyFPGA B-Series Project Page at hackaday.io.

License

The TinyFPGA BX project is an open source project licensed under CERN Open Hardware Licence v1.2. Please see the included LICENSE file for details. If you do wish to distribute boards derived from this open source hardware project then you must also release the source files for the boards under CERN Open Hardware Licence v1.2. You are free to do this, but please improve upon the original design and provide a tangible benefit for users of the board.

Building your own TinyFPGA BX Board

It is possible to build the TinyFPGA BX boards by hand in a home lab. However, it uses tiny 0402 surface mount capacitors and resistors and the iCE40 FPGAs used are in a 81 ball BGA package with 0.4mm pitch between the balls. It is a challenging undertaking and will most likely result in some bad assembled boards along with the good. I have used the following with success to hand assemble the prototype boards:

  • Parts for the TinyFPGA BX
  • Lead-Free Solder Paste
  • Stainless Steel Solder Paste Squeegee
  • TinyFPGA BX Solder Paste Stencil
    • You'll need to generate the gerber files and upload the solder paste layer. If you plan on using solder paste for the FPGA chip, you will want the stainless steel stencil, I do not believe the polymide will work with the fine pitch BGA package. I have found that fine-pitch BGA packages are easier to assemble with only flux and no paste for prototypes.
  • TinyFPGA BX PCBs
    • OSH Park does a very nice job with these boards on their 4-layer process.
  • Precision Tweezers for placing parts on the board
  • Some sort of magnifying tool for placing parts (magnifying glasses, magnifying lamp, microscope)
  • Reflow Oven
    • This is the kit I use to reflow my prototypes. You may also be able to use a good hot-plate or hot-air tool.
  • Lattice FPGA Programmer
    • You will need this to load the bootloader onto the SPI Flash. Once the bootloader is installed you can use the Python-based programmer application to program the board over USB.

Buy TinyFPGA BX Boards

If you don't want to go through the hassle of ordering parts, tools, and supplies and assembling the boards yourself you can order professionally assembled and tested boards from Crowd Supply. These boards are not hobbyist-made, they are fabricated and assembled in a professional PCB fab that manufactures and assembles many other consumer, industrial and military electronics. They go through an automated testing and programming process to ensure the board is healthy and ready to program over USB. When the Crowd Supply campaign ends and all the backers orders are shipped the boards will become available on Tindie and the TinyFPGA Store.

tinyfpga-bx's People

Contributors

tdaede avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tinyfpga-bx's Issues

initial setup for Windows

I'm trying setup environmentals by following the instructions on https://tinyfpga.com/bx/guide.html.
I had to execute "apio install drivers" before "apio drivers --serial-enable". Although this may be just for my environment, I prefer to consider this procedure on instruction.

No BOM file in the Board folder

Hello,
I'm currently trying to make my own board. However I cannot find the BOM that you mention in the readme. Could you add it ?
Thanks in advance

Error: the JSON object must be str, not 'bytes'

I followed the dirrections here to try and program a TinyFPGA BX that I just got and when I get to the upload step it errors with Error: the JSON object must be str, not 'bytes'. I guess this is some random Python issue?

What happened:
Uploading the example project errors out with Error: the JSON object must be str, not 'bytes'

What should happen:
The project should upload and the FPGA should run it.

Platform:
uname -a : Linux DESKTOP-DEBIAN 4.9.0-6-amd64 #1 SMP Debian 4.9.88-1+deb9u1 (2018-05-07) x86_64 GNU/Linux

Steps to reproduce: (or what I did)
sudo apt-get install python3-pip
sudo pip3 install --upgrade --no-cache-dir apio==0.4.0b3 "tinyprog>=1.0.9"
apio install system scons icestorm iverilog (since drivers does not exist)
apio drivers --serial-enable
tinyprog --update-bootloader
Download atom-amd64.deb
sudo dpkg -i atom-amd64.deb
Install apio-ide in atom.
git clone https://github.com/tinyfpga/TinyFPGA-BX.git
cp TinyFPGA-BX/apio_template blink_project
Open blink_project with atom.
Upload.
Error happens here.

Solution for serial port difficulties with Linux

Posting this in case someone else has the same experience.

When I connect the board (with supplied firmware) to Ubuntu 16.04 via USB I see this in my Linux kernel log:

[2157524.597052] usb 1-1: new full-speed USB device number 40 using xhci_hcd
[2157524.737724] usb 1-1: New USB device found, idVendor=1209, idProduct=2100
[2157524.737730] usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[2157524.738464] cdc_acm 1-1:1.0: ttyACM0: USB ACM device
[2157536.029885] cdc_acm 1-1:1.1: urb 2 failed submission with -19
[2157536.029905] usb 1-1: USB disconnect, device number 40
[2157536.029919] cdc_acm 1-1:1.1: urb 3 failed submission with -19
[2157536.029956] cdc_acm 1-1:1.1: urb 4 failed submission with -19
[2157536.029996] cdc_acm 1-1:1.1: urb 5 failed submission with -19
[2157536.030036] cdc_acm 1-1:1.1: urb 6 failed submission with -19
[2157536.030077] cdc_acm 1-1:1.1: urb 7 failed submission with -19
[2157536.030118] cdc_acm 1-1:1.1: urb 8 failed submission with -19
[2157536.030140] cdc_acm 1-1:1.0: failed to set dtr/rts
[2157536.030160] cdc_acm 1-1:1.1: urb 9 failed submission with -19
[2157536.030199] cdc_acm 1-1:1.1: urb 10 failed submission with -19
[2157536.436674] usb 1-1: new full-speed USB device number 41 using xhci_hcd
[2157536.577210] usb 1-1: New USB device found, idVendor=1209, idProduct=2100
[2157536.577216] usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[2157536.577957] cdc_acm 1-1:1.0: ttyACM0: USB ACM device

This sort of thing appears every few seconds in the dmesg log.

Running tinyprog -m results in one of three different results:

$ tinyprog -m
[
  {
    "boardmeta": {
      "name": "TinyFPGA BX",
      "fpga": "ice40lp8k-cm81",
      "hver": "1.0.0",
      "uuid": "03cfce7b-b1d9-467a-a05e-1a08839f1786"
    },
    "bootmeta": {
      "bootloader": "TinyFPGA USB Bootloader",
      "bver": "1.0.1",
      "update": "https://tinyfpga.com/update/tinyfpga-bx",
      "addrmap": {
        "bootloader": "0x000a0-0x28000",
        "userimage": "0x28000-0x50000",
        "userdata": "0x50000-0x100000"
      }
    },
    "port": "/dev/ttyACM0"
  }
]

Or:

$ tinyprog -m
Traceback (most recent call last):
  File "/home/dantliff/.pyenv/versions/3.6.5/envs/tinyfpga-3.6.5/lib/python3.6/site-packages/serial/serialposix.py", line 265, in open
    self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
OSError: [Errno 16] Device or resource busy: '/dev/ttyACM0'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/dantliff/.pyenv/versions/tinyfpga-3.6.5/bin/tinyprog", line 11, in <module>
    sys.exit(main())
  File "/home/dantliff/.pyenv/versions/3.6.5/envs/tinyfpga-3.6.5/lib/python3.6/site-packages/tinyprog/__main__.py", line 226, in main
    with serial.Serial(port, timeout=1.0, writeTimeout=1.0) as ser:
  File "/home/dantliff/.pyenv/versions/3.6.5/envs/tinyfpga-3.6.5/lib/python3.6/site-packages/serial/serialutil.py", line 240, in __init__
    self.open()
  File "/home/dantliff/.pyenv/versions/3.6.5/envs/tinyfpga-3.6.5/lib/python3.6/site-packages/serial/serialposix.py", line 268, in open
    raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
serial.serialutil.SerialException: [Errno 16] could not open port /dev/ttyACM0: [Errno 16] Device or resource busy: '/dev/ttyACM0'

Or:

$ tinyprog -m
[]

After creating the following file:

$ cat /etc/udev/rules.d/90-tinyfpga-bx.rules
ATTRS{idVendor}=="1209", ATTRS{idProduct}=="2100", 
ENV{ID_MM_DEVICE_IGNORE}="1"
ATTRS{idVendor}=="1209", ATTRS{idProduct}=="2100", 
ENV{MTP_NO_PROBE}="1"

Then sudo udevadm control --reload, dmesg settles down with just:

[2157750.872236] usb 1-1: USB disconnect, device number 56
[2157751.277717] usb 1-1: new full-speed USB device number 57 using xhci_hcd
[2157751.418324] usb 1-1: New USB device found, idVendor=1209, idProduct=2100
[2157751.418330] usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[2157751.419205] cdc_acm 1-1:1.0: ttyACM0: USB ACM device

Now tinyprog -m produces consistent and reproducible output:

$ tinyprog -m
[
  {
    "boardmeta": {
      "name": "TinyFPGA BX",
      "fpga": "ice40lp8k-cm81",
      "hver": "1.0.0",
      "uuid": "03cfce7b-b1d9-467a-a05e-1a08839f1786"
    },
    "bootmeta": {
      "bootloader": "TinyFPGA USB Bootloader",
      "bver": "1.0.1",
      "update": "https://tinyfpga.com/update/tinyfpga-bx",
      "addrmap": {
        "bootloader": "0x000a0-0x28000",
        "userimage": "0x28000-0x50000",
        "userdata": "0x50000-0x100000"
      }
    },
    "port": "/dev/ttyACM0"
  }
]

Can't program new TinyFPGA BX ~ 2023-08-22, possibly no metadata?

I just received a new TinyFPGA BX which was ordered through Crowd Supply and shipped by Mouser. I cannot program this new one, but I have an older TinyFPGA BX that programs fine with the same tools.

The power LED is solid red, and the boot LED is pulsing red (during all commands captured below)

Any tips on how to proceed? The messages seem to imply there's a bootloader, but maybe no metadata. Do I need to manually write metadata to the board somehow?

I have many micro-controller boards on hand and in theory could send some SPI commands or similar if needed to resolve this. I believe I have a TinyFPGA programmer as well, if applicable.

$ pip3 list | grep tinyprog
tinyprog                           1.0.21
$ lsusb | grep 1d50
Bus 003 Device 021: ID 1d50:6130 OpenMoko, Inc. 
$ python3 --version
Python 3.10.12
$ tinyprog -p hardware.bin

    TinyProg CLI
    ------------
    Using device id 1d50:6130
    Only one board with active bootloader, using it.
    Programming /dev/ttyACM0 with hardware.bin
Traceback (most recent call last):
  File "/home/isaac/.local/bin/tinyprog", line 8, in <module>
    sys.exit(main())
  File "/home/isaac/.local/lib/python3.10/site-packages/tinyprog/__main__.py", line 334, in main
    addr = fpga.meta.userimage_addr_range()[0]
  File "/home/isaac/.local/lib/python3.10/site-packages/tinyprog/__init__.py", line 182, in userimage_addr_range
    return self._get_addr_range(u"userimage")
  File "/home/isaac/.local/lib/python3.10/site-packages/tinyprog/__init__.py", line 188, in _get_addr_range
    addr_str = self.root[u"bootmeta"][u"addrmap"][name]
TypeError: 'NoneType' object is not subscriptable
make: *** [Makefile:2: upload] Error 1
$ tinyprog -l

    TinyProg CLI
    ------------
    Using device id 1d50:6130
    Only one board with active bootloader, using it.
    Boards with active bootloaders:

        /dev/ttyACM0: No metadata
$ tinyprog -m
Traceback (most recent call last):
  File "/home/isaac/.local/bin/tinyprog", line 8, in <module>
    sys.exit(main())
  File "/home/isaac/.local/lib/python3.10/site-packages/tinyprog/__main__.py", line 257, in main
    m["port"] = str(port)
TypeError: 'NoneType' object does not support item assignment
$ tinyprog --update-bootloader

    TinyProg CLI
    ------------
    Using device id 1d50:6130
    Only one board with active bootloader, using it.
    All connected and active boards are up to date!

add USB serial UART to picosoc example

It would be great to wire the USB serial we have for the bootloader to the tx/rx pins. That way an external USB serial wouldn't be needed.

I will take a look but might need some help.

Problem updating the bootloader on a TinyFPGA-BX

I have a TinyFPGA BX board that is connected to a Mac (Big Sur) I am trying to upload a new bootloader to this board using tinyprog (https://pypi.org/project/tinyprog/). I am running this with

>>>from tinyprog import *
>>>from tinyprog.__main__ import perform_bootloader_update
>>>tinyport=get_ports('1d50:6130')
>>>perform_bootloader_update(tinyport[0])

The result of this is:


    The following update:

        New Version: 1.0.1
        Notes: Updates USB VID:PID to fix issues with APIO not recognizing the board.

    is available for this board:

        USB 20.3: TinyFPGA BX 1.0.0
            UUID: cfaef439-1b38-4576-b1bc-970b9f5d5ee1
            FPGA: ice40lp8k-cm81

    Would you like to perform the update? [y/N] y
    Fetching stage one...
    Programming stage one...

    Erasing: 100%|████████████████████████████| 135k/135k [00:00<00:00, 175kB/s]
    Writing: 100%|████████████████████████████| 135k/135k [00:00<00:00, 163kB/s]
    Reading: 100%|████████████████████████████| 135k/135k [00:00<00:00, 344kB/s]

---------------------------------------------------------------------------
USBError                                  Traceback (most recent call last)
/var/folders/n5/kk2vsh296_s0w454yrchd3f00000gn/T/ipykernel_13323/2827260816.py in <module>
----> 1 perform_bootloader_update(tinyport[0])

/opt/anaconda3/envs/verilogenv38/lib/python3.8/site-packages/tinyprog/__main__.py in perform_bootloader_update(port)
    149             userimage_addr = p.meta.userimage_addr_range()[0]
    150             if p.program_bitstream(userimage_addr, bitstream):
--> 151                 p.boot()
    152                 print("    ...Success!")
    153             else:

/opt/anaconda3/envs/verilogenv38/lib/python3.8/site-packages/tinyprog/__init__.py in boot(self)
    386     def boot(self):
    387         try:
--> 388             self.ser.write(b"\x00")
    389             self.ser.flush()
    390         except SerialTimeoutException as e:

/opt/anaconda3/envs/verilogenv38/lib/python3.8/site-packages/tinyprog/__init__.py in write(self, data)
     90 
     91     def write(self, data):
---> 92         self.OUT.write(data)
     93 
     94     def flush(self):

/opt/anaconda3/envs/verilogenv38/lib/python3.8/site-packages/usb/core.py in write(self, data, timeout)
    406         For details, see the Device.write() method.
    407         """
--> 408         return self.device.write(self, data, timeout)
    409 
    410     def read(self, size_or_buffer, timeout = None):

/opt/anaconda3/envs/verilogenv38/lib/python3.8/site-packages/usb/core.py in write(self, endpoint, data, timeout)
    987         fn = fn_map[util.endpoint_type(ep.bmAttributes)]
    988 
--> 989         return fn(
    990                 self._ctx.handle,
    991                 ep.bEndpointAddress,

/opt/anaconda3/envs/verilogenv38/lib/python3.8/site-packages/usb/backend/libusb1.py in bulk_write(self, dev_handle, ep, intf, data, timeout)
    835     @methodtrace(_logger)
    836     def bulk_write(self, dev_handle, ep, intf, data, timeout):
--> 837         return self.__write(self.lib.libusb_bulk_transfer,
    838                             dev_handle,
    839                             ep,

/opt/anaconda3/envs/verilogenv38/lib/python3.8/site-packages/usb/backend/libusb1.py in __write(self, fn, dev_handle, ep, intf, data, timeout)
    936         # do not assume LIBUSB_ERROR_TIMEOUT means no I/O.
    937         if not (transferred.value and retval == LIBUSB_ERROR_TIMEOUT):
--> 938             _check(retval)
    939 
    940         return transferred.value

/opt/anaconda3/envs/verilogenv38/lib/python3.8/site-packages/usb/backend/libusb1.py in _check(ret)
    602             raise USBTimeoutError(_strerror(ret), ret, _libusb_errno[ret])
    603         else:
--> 604             raise USBError(_strerror(ret), ret, _libusb_errno[ret])
    605 
    606     return ret

USBError: [Errno 5] Input/Output Error

My understanding of this is that the board is able to be updated but then tinyprog is trying to boot the board and this is failing. I am able to access this USB device just using pyusb but again when I try to write with ser.write in pyusb I get the same error.

Is this a problem with the board itself or is this the tinyprog not working properly?

support nextpnr instead of deprecated arachne-pnr

As the arachne-pnr github says: Arachne-pnr is not maintained anymore; use nextpnr instead, which is a complete functional replacement with major improvements.

The commands to use nextpnr-ice40 with the icestorm_template are:

yosys -p 'synth_ice40 -top top -blif top.blif -json top.json' top.v
nextpnr-ice40 --lp8k --package cm81   --json top.json --asc  top.asc --pcf  pins.pcf
icetime -d lp8k -mtr top.rpt top.asc
icepack top.asc top.bin
tinyprog -p top.bin

Icecube2 pins

It looks like the pin assignment (via constraints) in the icecube2 template is very different from the labels on the board. Is this intentional? The icestorm template looks to match.

icecube2_template lacks `top.v`

The apio and icestorm template projects each contain an example top.v, but icecube2_template doesn't. For consistency it ought to.

Cables are IMPORTANT!

I've played now some time to setup the programming environment on my Linux PC and nothing worked till I changed the cable.
I was using a Sparkfun cable https://www.sparkfun.com/products/12016 which usually works very good for all my Arduino stuff but I suspect in somewho interferes with a RESET (?) .. I dunno. Once I'v replaced that cable ATOM/apio found the board and I could upload the blink sketch.
Best,
A.

[Question] MicroUSB port both to FPGA and pins on FPGA

I'm new to this whole hardware thing, so what I want might not even be possible, but:

I want the same MicroUSB port to connect to both the FPGA (so I can write code to it) as well as pins on the FPGA. The main use is as a GameCube controller, but I'd like it to be able to be used via USB at the same time. Is there a way I can accomplish this? Is it even safe to have the FPGA connected to both a GC port and USB at the same time? If yes to both, how/what should I be looking for?

Support for migen

Since this is the canonical place for such request, is there a plan for migen support ?
There is support already for B series.Shouldn't be much hard to add support for BX.

picosoc example linker script problems

If you checkout the ws2812 branch of my fork here: https://github.com/mattvenn/TinyFPGA-BX/tree/ws2812
And then simulate:

make sim

You will see serial output and then gtkwave will start. At 359us, the LED register is written.
This also works on the hardware.

Example 1:
Global variables are unintialised.

In firmware.c, #define BREAK1

make sim

Serial never gets beyond the Booting, and at 305us the LED register is written with XXXXXX

Example 2:
Can't program tinyfpga.

In firmware.c #define BREAK2

make sim

simulates correctly, but tinyfpga fails to program:

matt-pc:2216 [ws2812]: make 
tinyprog -p hardware.bin -u firmware.bin
/home/matt/.local/lib/python2.7/site-packages/requests/__init__.py:83: RequestsDependencyWarning: Old version of cryptography ([1, 2, 3]) may cause slowdown.
  warnings.warn(warning, RequestsDependencyWarning)


    TinyProg CLI
    ------------
    Using device id 1d50:6130
    Only one board with active bootloader, using it.
    Programming /dev/ttyACM1 with hardware.bin
    Programming at addr 028000
    Waking up SPI flash
    135100 bytes to program
    Erasing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 135k/135k [00:00<00:00, 138kB/s]
    Writing: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 135k/135k [00:00<00:00, 177kB/s]
    Reading: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 135k/135k [00:00<00:00, 430kB/s]
    Success!
    Programming /dev/ttyACM1 with firmware.bin
    Programming at addr 050000
    Waking up SPI flash
    3616 bytes to program
    Erasing: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3.62k/3.62k [00:01<00:00, 3.42kB/s]
    Writing: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3.62k/3.62k [00:00<00:00, 115kB/s]
    Reading: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3.62k/3.62k [00:00<00:00, 234kB/s]
    Failure!
Makefile:3: recipe for target 'upload' failed
make: *** [upload] Error 1

Can the default power on state be changed?

I just got my TinyFPGA-BX, along with it not having metadata installed on it -- which I worked around-- it looks like the default power on state is to sit in the boot loader waiting for programming. Is there a way to change things so that by default it just runs the code I already programmed in to it upon power up?
For information, I'm connecting it to an M1 Macbook Pro, with a micro-usb to usb-c cable for power and programming.

3v3 pin is 5v on a BX from Crowd Supply

I first had to work around the "no metadata" issue (by modifying a python file, as others describe). I'm now able to program the FPGA using the default template and I see the boot LED blink "SOS".

I noticed that both LED's are extremely (too) bright, which is odd. They've always been this way since when I first plugged it in.

I measured the 3.3v pin (pin #25), and it's measuring 5v when plugged into USB. If I unplug USB and supply 4.5v to the "in" pin, I get 4.5v at the 3.3v pin. The 3.3v regulator doesn't appear to be working.

I'm at a loss at what to do now. Perhaps try another platform.

Error: board TinyFPGA-BX not connected

I'm getting this error after Apio: Upload from Atom.
The bootloader board keeps going offline (LED stops blinking).

When I try to execute tinyprog -p hardware.bin:

TinyProg CLI
    ------------
    Using device id 1d50:6130
    Only one board with active bootloader, using it.
Traceback (most recent call last):
  File "$HOME/.local/lib/python3.7/site-packages/serial/serialposix.py", line 265, in open
    self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
OSError: [Errno 16] Device or resource busy: '/dev/ttyACM0'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/bin/tinyprog", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.7/site-packages/tinyprog/__main__.py", line 323, in main
    with active_port:
  File "/usr/local/lib/python3.7/site-packages/tinyprog/__init__.py", line 60, in __enter__
    self.ser = serial.Serial(self.port_name, timeout=1.0, writeTimeout=1.0).__enter__()
  File "$HOME/.local/lib/python3.7/site-packages/serial/serialutil.py", line 240, in __init__
    self.open()
  File "$HOME/.local/lib/python3.7/site-packages/serial/serialposix.py", line 268, in open
    raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
serial.serialutil.SerialException: [Errno 16] could not open port /dev/ttyACM0: [Errno 16] Device or resource busy: '/dev/ttyACM0'

Here's the log from $ dmesg:

[ 2443.927967] cdc_acm 2-3:1.0: failed to set dtr/rts
[ 2493.381379] debugfs: Directory '09' with parent 'devices' already present!
[ 2493.993317] usb 2-3: new full-speed USB device number 74 using xhci_hcd
[ 2494.142205] usb 2-3: New USB device found, idVendor=1d50, idProduct=6130, bcdDevice= 0.00
[ 2494.142207] usb 2-3: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[ 2494.143308] cdc_acm 2-3:1.0: ttyACM0: USB ACM device
[ 2513.926778] usb 2-3: USB disconnect, device number 74
[ 2513.926877] cdc_acm 2-3:1.0: failed to set dtr/rts
[ 3235.189611] debugfs: Directory '10' with parent 'devices' already present!
[ 3235.317550] usb 2-3: new full-speed USB device number 75 using xhci_hcd
[ 3342.172788] debugfs: Directory '11' with parent 'devices' already present!
[ 3342.300710] usb 2-3: new full-speed USB device number 76 using xhci_hcd
[ 3342.428783] usb 2-3: device descriptor read/64, error -71
[ 3342.664732] usb 2-3: device descriptor read/64, error -71
[ 3342.772749] debugfs: Directory '12' with parent 'devices' already present!
[ 3342.900722] usb 2-3: new full-speed USB device number 77 using xhci_hcd
[ 3343.028718] usb 2-3: device descriptor read/64, error -71
[ 3343.264737] usb 2-3: device descriptor read/64, error -71
[ 3343.372749] usb usb2-port3: attempt power cycle
[ 3343.688729] debugfs: Directory '13' with parent 'devices' already present!
[ 3344.232697] usb 2-3: new full-speed USB device number 78 using xhci_hcd
[ 3344.253218] usb 2-3: New USB device found, idVendor=1d50, idProduct=6130, bcdDevice= 0.00
[ 3344.253221] usb 2-3: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[ 3344.254320] cdc_acm 2-3:1.0: ttyACM0: USB ACM device
[ 3363.918157] usb 2-3: USB disconnect, device number 78
[ 3363.918302] cdc_acm 2-3:1.0: failed to set dtr/rts
[ 3449.699880] usb 2-3: new full-speed USB device number 79 using xhci_hcd

I'm on elementary OS 5.1.3 Hera (Ubuntu 18.04.3 LTS distro).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.