Skip to the content
PCBKitNew board
6 layers50 × 75 mmSandflat, the printed circuit board in 3D

Lower-cost DSP experimentation host for the SoldierCrab ECP5 SoM

Size
50 × 75 mm
Copper layers
6
Thickness
1.19 mm
Parts
113
Nets
221
Pads
645
Tracks, vias
1,375, 169
Pours
14
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
21 Apr 2026
Updated
21 Apr 2026

Overview

Sandflat is an open-source printed circuit board by apfaudio, from the apfaudio/sandflat repository on GitHub, published under the CERN-OHL-S-2.0 licence. It is a 6-layer board of 50 × 75 mm with 113 parts on 221 nets, routed with 1,375 tracks and 169 vias.

It is built around the W25Q128JVPIQ, AP2161WG and PCA9306D, with the SI5351A-B-GT, USBLC6-2P6 and USBLC6-4SC6 among its other parts. Its parts include 37 capacitors, 32 resistors, 10 ICs, 8 connectors and 2 switches. It belongs with the computers and single-board computers and fPGA and programmable logic boards and the RP2350 boards of this library.

Main components

7

README

README.md

SandFlat - low-cost FPGA/DSP platform

sandflat-front

SandFlat is an open-hardware development board based on our SoldierCrab M.2 FPGA SoM. Its primary goal is similar to Tiliqua in that it aims to be a an audio and video DSP experimentation platform - however, compared to Tiliqua, SandFlat has less features, is a bare board, and can be manufactured much more cheaply (around $40-50 for both the SoM and SandFlat together in reasonable quantities). This makes a different set of tradeoffs to Tiliqua.

The main difference is that there are no audio CODECs or audio frontend on SandFlat. These can be added with PMODs on one of the 4 expansion connectors (e.g. our own eurorack-pmod). Crucially, no additional hardware is needed to play with audio DSP in hardware on SandFlat, as you can stream audio straight into / out of your computer/DAW using the high-speed USB2 port. All you need is the SandFlat board and a computer.

sandflat-connectors

Features

  • SoldierCrab FPGA SoM:
    • LFE5U-25: 25K LUT ECP5 FPGA
    • APS256XXN: 32MiB PSRAM (400MT/sec)
    • USB2 high-speed PHY: 480mbit/sec
  • SandFlat board itself:
    • 1x USB FS for power in and RP2350 for debugging / usb-serial
      • RP2350 has 8 GPIOs shared with one of the PMOD expansion ports for a wide FPGA <-> MCU bus.
    • 1x USB2 dual-role device + host port, TUSB322I USB-C controller IC
    • 4x 8-pin PMOD-compatible expansion ports
    • Digital video output with DVI redriver for solid EMC / long cable performance
      • EDID is exposed + level translated so display timings can be read

Example gateware

This repository contains a few example projects which run on SandFlat:

  • src/top/blink.py: Simplest example blinking the SoldierCrab LEDs
  • src/top/dsp.py: DSP examples based on Tiliqua's DSP library, streaming all audio in/out the USB2 port.
  • src/top/colorbar.py: Video example showing color bars at 640x480p60
  • src/top/vectorscope.py: Vectorscope example taking audio from a USB stream and rendering it to a framebuffer in PSRAM out over video.
  • FUTURE: it would be nice to port over one of the SoC projects from Tiliqua to SandFlat.

Building / flashing

A freshly manufactured SandFlat first needs pico-dirtyJtag flashed to the RP2350. - A working version is available on this branch of my pico-dirtyJtag fork.

Once your RP2350 is bootstrapped, you should be able to see the ECP5 with openFPGALoader:

text
$ openFPGALoader -c dirtyJtag --detect

Now, you can build one of the examples. After installing PDM, install all the dependencies and build a bitstream:

text
pdm install
pdm dsp build --core=mirror

This will synthesize a build/top.bit which enumerates as a USB2 audio device which sends all input audio (computer loudspeaker out) back out to the outputs (computer mic in). To flash it to the FPGA:

text
$ openFPGALoader -c dirtyJtag build/top.bit

Note: this will not persist unless you write it to flash permanently with -f.

Tips

  • For the USB audio examples, ensure Audacity or your chosen audio program is playing AND recording audio at the same time, as the output stream is gated on the clock of the input stream (this behaviour could be changed in gateware, it's just something to be careful of).
  • For the dual-role USB2 port: suggest always using a USB-A to USB-C cable -- as the example gateware doesn't configure the TUSB322I USB-C controller chip, (you probably want a whole SoC/CPU to do this, as Tiliqua does - I don't have examples of this yet)

Hardware status / bugs

Design files for R1.0 of the hardware are in hardware/. This version has been brought up and is largely working, with a couple of minor bugs found:

  • Input current enumeration - the device port enumerates 500mA current required, but if SandFlat is used as a USB host, some devices may cause the board to draw more than 500mA -> we should instead be enumerating 1A on the debug port.
  • Applying power to the dual-role usb2 port while unplugging the debug port may cause the 3V3 switchmode to start oscillating / leaking -> this can be fixed by adding a 1kOhm resistor across the 5V rail, and should be rolled into the next revision.
  • The RP2350 bridge resistors to the I2C bus should be removed if using the pico-dirtyJtag modifications above -> this version seems to pull the I2C bus down and stops the external PLL from being addressable.

Building / Availability

  • Production files and KiCAD projects for manufacturing or modifying SandFlat can be found in the hardware/folder.
  • KiCAD projects for the SoldierCrab SoM are available here. It is also available on Crowd Supply.

SandFlat is not generally available yet, however if you are interested in trying it out, feel free to email me, I may have a few prototypes to spare.

Updates / Community

For updates, join the matrix chatroom, or my own mailing list.

Participants in this project are expected to adhere to the Berlin Code of Conduct.

Acknowledgements

We would like to acknowledge partial funding of the Tiliqua project from the NGI Commons Fund, a fund established by NLnet with financial support from the European Commission’s Next Generation Internet program.

image

License

The hardware and gateware in this project is largely covered under the CERN Open-Hardware License V2 CERN-OHL-S, mirrored in the LICENSE text in this repository. Some gateware and software is covered under the BSD 3-clause license - check the header of the individual source files for specifics.

Parts

113
QtyValueFootprintReferences
100.1uFCapacitor_SMD:C_0402_1005MetricC3, C4, C5, C6, C7, C8, C12, C13, C14, C36
1033RResistor_SMD:R_Array_Convex_4x0402RN1, RN2, RN3, RN4, RN5, RN6, RN7, RN8, RN9, RN10
8100nFCapacitor_SMD:C_0201_0603MetricC46, C47, C48, C49, C50, C51, C52, C53
84K7Resistor_SMD:R_0402_1005MetricR1, R2, R9, R19, R25, R26, R44, R50
722uFCapacitor_SMD:C_1206_3216MetricC15, C16, C22, C24, C26, C29, C32
4100nFCapacitor_SMD:C_0402_1005MetricC27, C28, C35, C37
433RResistor_SMD:R_0402_1005MetricR40, R41, R47, R48
4Conn_02x06_Top_BottomConnector_PinSocket_2.54mm:PinSocket_2x06_P2.54mm_HorizontalJ1, J2, J3, J4
4MountingHole_PadMountingHole:MountingHole_3.2mm_M3_Pad_ViaH1, H2, H4, H5
310KResistor_SMD:R_0402_1005MetricR23, R27, R33
327RResistor_SMD:R_0402_1005MetricR4, R5, R6
34.7uFCapacitor_SMD:C_0603_1608MetricC9, C10, C11
347KResistor_SMD:R_0402_1005MetricR36, R37, R42
2100KResistor_SMD:R_0402_1005MetricR3, R7
212pFCapacitor_SMD:C_0402_1005MetricC1, C2
22K2Resistor_SMD:R_0402_1005MetricR28, R31
24.7uFCapacitor_SMD:C_0805_2012MetricC44, C45
25.1KResistor_SMD:R_0402_1005MetricR11, R12
2LOGOLOGOG***, G***
2USB_C_Receptacle_USB2.0_14PConnector_USB:USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_HorizontalJ5, J7
115V 50mAFuse:Fuse_0805_2012MetricF3
118KResistor_SMD:R_0402_1005MetricR24
12.2uHInductor_SMD:L_0805_2012MetricL8
1200KResistor_SMD:R_0402_1005MetricR38
1210KResistor_SMD:R_0402_1005MetricR39
125MHz AMB8GCrystal:Crystal_SMD_3225-4Pin_3.2x2.5mmY2
12KResistor_SMD:R_0402_1005MetricR8
13.3uHInductor_SMD:L_Wuerth_MAPI-2512L1
16.8pFCapacitor_SMD:C_0402_1005MetricC17
1900K (910K)Resistor_SMD:R_0402_1005MetricR20
1AP2161WPackage_TO_SOT_SMD:SOT-23-5U9
1B0520LWDiode_SMD:D_SOD-123D4
1CM4012M00012001Crystal:Crystal_SMD_2520-4Pin_2.5x2.0mmY1
1DVI_GPDIConnector_Video:HDMI_A_Amphenol_10029449-x01xLF_HorizontalJ10
1MICROMOD-2222m2:TE_21992304J8
1MountingHolem2:mounting_holeH3
1PCA9306Package_SO:SSOP-8_2.95x2.8mm_P0.65mmU14
1PI3HDX511EPackage_DFN_QFN:Diodes_ZL32_TQFN-32-1EP_3x6mm_P0.4mm_EP1.25x3.5mmU13
1RP2350-APackage_DFN_QFN_Extra:QFN-60_EP_7x7_Pitch0.4mmU4
1SW_BOOTSELButton_Switch_SMD:SW_SPST_B3U-1000PSW2
1SW_RESETButton_Switch_SMD:SW_SPST_B3U-1000PSW1
1Si5351A-B-GTPackage_SO:MSOP-10_3x3mm_P0.5mmU11
1TLV62569ADRLRPackage_TO_SOT_SMD:SOT-563U10
1TUSB322IPackage_DFN_QFN:Texas_X2QFN-12_1.6x1.6mm_P0.4mmU8
1USBLC6-2P6Package_TO_SOT_SMD:SOT-666U1
1USBLC6-4SC6Package_TO_SOT_SMD:SOT-23-6U3
1W25Q128JVPIQPackage_SON:WSON-8-1EP_6x5mm_P1.27mm_EP3.4x4mmU2

The 112 most common of 113 parts.

Questions

How big is the Sandflat PCB?

It measures 50 × 75 mm and has 6 copper layers, 1.19 mm thick.

What parts does the Sandflat use?

113 parts, built around the W25Q128JVPIQ, AP2161WG, PCA9306D and SI5351A-B-GT. 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 Sandflat KiCad files?

From the apfaudio/sandflat repository on GitHub, at the commit this page was made from: the board is hardware/sandflat/sandflat.kicad_pcb and its schematic hardware/sandflat/gpdi.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Sandflat design in my own project?

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

Similar boards

  • 2 layers28 × 65 mmPresence Sensor, the printed circuit board in 3D

    Presence Sensor

    Sanderhuisman/Presence-Sensor

    77 partsMIT
  • 2 layers283 × 94.2 mmDoddle60, the printed circuit board in 3D

    Doddle60

    AcheronProject/Doddle60

    Doddle60 is a 60% ISO layout PCB with a minimal layout number support intended for ISO users.

    198 parts10
  • 4 layers40 × 47 mmMaster, the printed circuit board in 3D

    Master

    Tinkerforge/master-brick

    Basis to build stacks and has 4 Bricklet ports

    149 parts5
  • 2 layers116.8 × 25.4 mmGPIO power switch, the printed circuit board in 3D

    GPIO power switch

    moonbuggy/GPIO-power-switch

    A low-side MOSFET switch controlled by a button and GPIO signals

    44 parts2
  • 2 layers43.5 × 46.9 mmSchaltplan Ultraschallsensor, the printed circuit board in 3D

    Schaltplan Ultraschallsensor

    Tinkerforge/distance-us-v2-bricklet-techniker

    This repository contains the firmware source code and the hardware design files. The documentation generator configs can be found at https://github.com/Tinkerforge/generators

    54 parts2
  • 2 layers35 × 41 mmPif fpga, the printed circuit board in 3D

    Pif fpga

    jago85/UltraPIF_Hardware

    N64 PIF Replacement Hardware (KiCad)

    61 parts79GPL-3.0