Skip to the content
4 layers40 × 16 mmIce dongle, the printed circuit board in 3D

USB-C Dongle with ice40 UP5k FPGA

Size
40 × 16 mm
Copper layers
4
Thickness
1.55 mm
Parts
48
Nets
59
Pads
239
Tracks, vias
613, 95
Pours
2
Routed
Yes
KiCad
KiCad 6 (file 20211014)
Created
21 Sep 2022
Updated
9 Mar 2023

Overview

Ice dongle is an open-source printed circuit board by emeb, from the emeb/ice-dongle repository on GitHub, published under the MIT licence. It is a 4-layer board of 40 × 16 mm with 48 parts on 59 nets, routed with 613 tracks and 95 vias.

It is built around the ICE5LP4K-SG48I, W25Q64JWUUIQ and APS6404L-3SQR-SN, with the DRTR5V0U4S among its other parts. Its parts include 14 capacitors, 14 resistors, 7 ICs, 5 connectors and 2 diodes. It belongs with the fPGA and programmable logic boards and the FPGA and CPLD boards of this library.

Main components

4

README

README.md

ice-dongle

USB-C Dongle with ice40 UP5k FPGA

Abstract

This is a small USB connected FPGA board in a "dongle" form-factor. Note that it's not a true dongle since it doesn't have a USB plug (USB-C plugs are not practical for DIY assembly at the time this was designed) - instead it has a USB-C jack and you can use an inexpensive M-M adapter to achieve dongle-like function.

For I/O it provides an 18-pin FPC connector that conforms to the Eye-SPI standard found on some Adafruit products. This standard includes 3.3V power as well as 16 GPIO for things like SPI or I2C device, most often TFT LCD displays and user interfaces.

The FPGA is directly connected to USB and is pinned-out similarly to the 1bitsquared Icebreaker Bitsy so the NO2FPGA bootloader and user designs for that ecosystem should port over with minimal changes. It includes 8MB of flash and 8MB of PSRAM, as well as an RGB LED and a user button.

Initial programming of the FPGA bitstream takes place through a 1.27mm SMD header footprint on the back of the board. The original intent was to access this temporarily via the Adafruit "Pogo Pin Probe Clip" which should have attached easily over the pads. Unfortunately the pogo pin row spacing is too narrow for the SMT header pads so I ended up soldering on a header and using a normal cable. This may be fixed in future revisions, but for now an actual header + cable is probably more reliable for long-term development.

Status

22-10-15

Boards are back from OSHpark and so far things are working.

  • USB power, regulators and clock oscillator are running properly.
    • Minor silkscreen error was discovered - reference designators for R14 and C10 swapped.
  • FPGA configures via programming header and from SPI flash.
  • SPI flash can be written from the programming header.
  • RGB LED works.
  • EYESPI bus works with ST7789 TFT LCD
  • PSRAM works.

22-10-16

USB FS interface is fully functional with the NO2 Bootloader. I've forked it to add a custom BOARD target for ice-dongle but I'll submit a PR to the main project when things settle down a bit. For the time being here's my fork:

NO2 Bootloader

To build, clone that and follow the directions in the README. A few additional notes:

  • Don't forget to git submodule update --init to get all the related material from the NO2 ecosystem.
  • To build use make BOARD=ice-dongle bootloader
  • The riscv_lcd gateware project has a make dfu target that shows how to use the bootloader.

22-10-17

Ordered some helper boards to make interfacing easier:

  • ice-fpc-pmod
  • ice-prog-adapt

find out more about them in the Hardware directory.

22-11-20

  • Sylvain Munaut (@tnt) has built up a couple ice-dongle boards and confirmed that they work outside my lab. He did spot another silkscreen error - R10 and C5 reference designators are swapped. This doesn't significantly affect the board operation but should be corrected.
  • Updated NO2 board definition to put serial pins on programming header and sent a PR which has been accepted. You can now use the mainline NO2 bootloader repo instead of my fork.
  • Added a LiteX gateware design. This works but even a minimal demo uses > 80% of the FPGA resources.

22-11-21

Corrected silkscreen errors and bumped revision to V0.1a

Parts

48
QtyValueFootprintReferences
90.1ufCapacitor_SMD:C_0402_1005MetricC1, C2, C5, C6, C9, C10, C12, C13, C14
510kResistor_SMD:R_0402_1005MetricR2, R3, R4, R10, R11
310ufCapacitor_SMD:C_0805_2012MetricC7, C8, C11
21ufCapacitor_SMD:C_0402_1005MetricC3, C4
222Resistor_SMD:R_0402_1005MetricR8, R9
25k1Resistor_SMD:R_0402_1005MetricR1, R5
2SW_Pushemeb_library:SW_SPST_PTS815SW1, SW2
2TestPointemeb_library:TestPoint_Pad_D0.5mmTP1, TP2
11.5kResistor_SMD:R_0402_1005MetricR7
1100Resistor_SMD:R_0402_1005MetricR14
1100kResistor_SMD:R_0402_1005MetricR12
112MHzOscillator:Oscillator_SMD_ECS_2520MV-xxx-xx-4Pin_2.5x2.0mmU7
11MResistor_SMD:R_0402_1005MetricR6
12.2kResistor_SMD:R_0402_1005MetricR13
1APS6404L-3SQRemeb_library:USON-8_2x3U1
1CLX6F-FKCLED_SMD:LED_RGB_PLCC-6D2
1DRTR5V0U4SPackage_TO_SOT_SMD:SOT-363_SC-70-6U3
1FFC2B35-18-G_REVA2emeb_library:GCT_FFC2B35-18-G_REVA2J4
1Jumper_3_Bridged12Jumper:SolderJumper-3_P1.3mm_Bridged12_RoundedPad1.0x1.5mmJP1
1LED BlueLED_SMD:LED_0603_1608MetricD1
1MCP1824x-OTPackage_TO_SOT_SMD:SOT-23-5U4
1NC JumperJumper:SolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mmJ2
1PROG HEADERConnector_PinHeader_1.27mm:PinHeader_2x05_P1.27mm_Vertical_SMDJ3
1QwiicConnector_PinHeader_1.27mm:PinHeader_1x04_P1.27mm_VerticalJ5
1USB_C_Receptacle_USB2.0Connector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12J1
1Val**emeb_library:avatar_smallRef**
1W25Q64JWUUIQemeb_library:USON-8_4x3U2
1XC6222B331MR-GPackage_TO_SOT_SMD:SOT-23-5U5
1ice5lp4k_sg48Package_DFN_QFN:QFN-48-1EP_7x7mm_P0.5mm_EP5.3x5.3mmU6

More from emeb/ice-dongle

2
  • 2 layers16.9 × 39.2 mmIce fpc pmod, the printed circuit board in 3D

    Ice fpc pmod

    emeb/ice-dongle

    USB-C Dongle with ice40 UP5k FPGA

    6 parts7MIT
  • 2 layers30.1 × 14.9 mmIce prog adapt, the printed circuit board in 3D

    Ice prog adapt

    emeb/ice-dongle

    USB-C Dongle with ice40 UP5k FPGA

    4 parts7MIT

Similar boards

  • 4 layers40 × 16 mmRp2040-dongle, the printed circuit board in 3D

    Rp2040-dongle

    emeb/RP2040_Projects

    A collection of random projects based on the Raspberry Pi RP2040 MCU

    44 parts3MIT
  • 4 layers81.7 × 31.8 mmEsp32c3 fpga, the printed circuit board in 3D

    Esp32c3 fpga

    ICE-V-Wireless/ICE-V-Wireless

    Combined ESP32C3 and iCE40 FPGA board

    94 parts82MIT
  • 4 layers76.2 × 31.8 mmEsp32c3 fpga, the printed circuit board in 3D

    Esp32c3 fpga

    kitspace-test-repos/kicad6-file-collection

    93 partsMIT
  • 4 layers26.4 × 41.7 mmDspod up5k, the printed circuit board in 3D

    Dspod up5k

    emeb/dspod

    A family of boards for Eurorack DSP audio

    68 parts10MIT
  • 6 layers76.2 × 20.3 mmDEV G2-NANO, the printed circuit board in 3D

    DEV G2-NANO

    theta-machines/DEV-G2-NANO

    The G2 Nano is powered by a record-breaking 1 GHz Arm Cortex-M7 processor, combining the performance of an application processor with real-time determinism.

    141 parts346CERN-OHL-P-2.0
  • 4 layers34.8 × 18 mmSpi fiend, the printed circuit board in 3D

    Spi fiend

    emeb/spi_fiend

    STM32F042-based USB to SPI device for programming iCE40 FPGAs

    28 parts17MIT
  • 6 layers15.2 × 34 mmPlajtime main, the printed circuit board in 3D

    Plajtime main

    Plajta/PlajTime-Hardware

    Here lays the current and past HW designs of our PlajTime smartwatch. That includes all the boards and the chassis.

    85 parts3CC-BY-SA-4.0
  • 6 layers42.2 × 61.4 mmDap proto board full, the printed circuit board in 3D

    Dap proto board full

    tsar-boomba/dap-proto-board-full

    The culmination of all of my learning during the Spring '26 semester. All the way from making a simple dev board for the TAD5212 DAC, to making a RP2350 board, and now this. Everything combined on one 6-layer board.

    102 parts1

Questions

How big is the Ice dongle PCB?

It measures 40 × 16 mm and has 4 copper layers, 1.55 mm thick.

What parts does the Ice dongle use?

48 parts, built around the ICE5LP4K-SG48I, W25Q64JWUUIQ, APS6404L-3SQR-SN and DRTR5V0U4S. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Ice dongle KiCad files?

From the emeb/ice-dongle repository on GitHub, at the commit this page was made from: the board is Hardware/ice-dongle/ice-dongle.kicad_pcb and its schematic Hardware/ice-dongle/ice-dongle.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Ice dongle design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).