Skip to the content
2 layers33.3 × 16.8 mmSd card logger, the printed circuit board in 3D

Sd card logger

griffinross2/Neo-GPS1

A new version of my project to create a fully custom GPS receiver

Size
33.3 × 16.8 mm
Copper layers
2
Thickness
1.6 mm
Parts
6
Nets
18
Pads
50
Tracks, vias
105, 29
Pours
2
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
3 May 2026
Updated
28 Oct 2026

Overview

Sd card logger is an open-source printed circuit board by griffinross2, from the griffinross2/Neo-GPS repository on GitHub, published under the GPL-3.0 licence. It is a 2-layer board of 33.3 × 16.8 mm with 6 parts on 18 nets, routed with 105 tracks and 29 vias.

It is built around the EMIF06-MSD02N16 and MEM2090-00-145-00-A. Its parts include 2 connectors, 1 capacitor, 1 resistor, 1 IC and 1 diode. It belongs with the radio and wireless boards of this library.

Main components

2

README

README.md

Neo-GPS

Neo-GPS is my second take on creating a custom GPS receiver, taking into account the lessons I learned previously and seeking to do everything as custom as possible.

Disclaimer

This project was made for my own learning and interest. It is NOT a professional implementation of a GPS receiver nor is it ever likely to be in a complete or reliable state. It should be used for your learning and interest too, not for any real-world use.

Goals

  • Fully-functioning GPS L1 C/A receiver.
  • Custom implementation of HDL and firmware modules wherever practical.
  • Testing infrastructure with testbenches for all modules.
  • Use of open-source software and tools (e.g. avoid Vivado until synthesis, instead using Verilator for simulation).

Basic Implementation Concepts

To demodulate and track, we need fast real-time hardware, so an FPGA is the best choice. However, decoding ephemeris and solving the navigation equations requires memory and complex calculations so this should be done on a microcontroller. This means we need the microcontroller to control the tracking channels in the FPGA to start tracking satellites and to get timing and navigation data to do its decoding and solving. This will happen through SPI, with the FPGA presenting registers to be read/written.

This split architecture was used by Andrew Holme whose custom GPS receiver project is a major source of inspiration and knowledge for this one.

The FPGA itself receives samples of an IF downconverted from the L1 band (1.57542 GHz). Because I am neither smart enough nor brave enough to attempt my own GPS RF frontend design, I am using the MAX2769 GPS receiver IC. This chip contains an LNA, PLL, ADCs, and the other associated components that downconvert and then sample the signal. Up to 2-bit I and 2-bit Q samples are then presented to the FPGA along with the sampling clock.

I will also implement a micro-SD logger on the FPGA to log raw samples and/or other data for testing purposes.

Usage

This project is split into several directories:

Hardware

This folder contains KiCAD projects and libraries. There is a frontend board used with the FPGA dev board, an SD card board also used with the FPGA, and a project for the full custom board. As of writing, only the frontend is in use. The SD card board was not ordered, and the full custom board is in development still. Use KiCAD 10.

Simulation

This is a C++ simulation of a GPS receiver supporting GPS L1 C/A and Galileo E1 currently. It takes in a binary signal recording file which is just 1-bit I samples packed little-endian. Samples are not included, but I may add a link to some at some point. The core of the simulator in src/ and inc/ is compiled as a library. The examples in tests/ use it, including solve which is a full simulation of acquisition, tracking, and solving for position using GPS and Galileo. The simulation depends on FFTW (included) and Eigen (installed by CMake).

To build and run, make sure you have a modern C++ compiler and CMake installed. Use CMake to build and run on of the test targets. It should install the needed dependencies automatically. This software has only been tested on Windows but should work elsewhere.

RTL

The RTL directory contains the RTL for the FPGA which, for testing, was a Spartan-7 on an Arty S7-50 board. src/ contains modules. testbench/ contains top-level testbenches for simulation. top/ contains top-level files used with Vivado for on-board testing. constraints/ contains .xdc constraints files for Vivado. verilator/ contains CMake files and C++ testbenches for simulating with Verilator. scripts/ contains TCL scripts for running Vivado.

To simulate with Verilator, first make sure you have a working installation of Verilator and CMake. Make sure the VERILATOR_ROOT environment variable is set. Then use the verilator.py script. This script helps to build and run the testbenches. Setting up a new testbench requires making one in testbenches/ and a corresponding CMakeLists.txt and sim_main.cpp in the verilator/ folder. Use the examples given as a template.

To synthesize using Vivado, first make sure yuou have Vivado installed. I then added it to my PATH, but you could use the path to it directly in vivado.py. If you are making a new top-level file, add it to top/ and make a corresponding TCL script in scripts/. Then you can use the python script to initialize Vivado with the project. You will probably want to use the -g option to actually open the Vivado GUI, unless you set it up to do everything automatically using the TCL script.

RP2350

This folder contains the code used with Raspberry Pi Pico 2 board for testing. The Pi Pico SDK is pulled in as a Git submodule. Make sure you pull that and also install the Arm GNU Toolchain. Then, you can modify CMakeUserPresets.json with your path to the toolchain or setup your own CMake configuration. Then just use CMake to build.

Parts

6
QtyValueFootprintReferences
1100Resistor_SMD:R_0805_2012MetricR1
1100nCapacitor_SMD:C_0805_2012MetricC1
1EMIF06-MSD02N16CustomFootprints:EMIF06-MSD02N16U1
1GRNLED_SMD:LED_0805_2012MetricD1
1MEM2090-00-145-00-ACustomFootprints:GCT_MEM2090-00-145-00-A_REVAJ1
1~CustomFootprints:PinHeader_2x06_P2.54mm_Horizontal_PmodJ2

Similar boards

  • 4 layers190.5 × 160 mmTopiary TrimBot, the printed circuit board in 3D

    Topiary TrimBot

    griffinross2/Topiary-TrimBot

    Topiary TrimBot, an automatic topiary trimming robot. Purdue ECE Senior Design group E11 for 49595 in Fall 2025.

    285 parts2GPL-3.0
  • 2 layers140.3 × 98.7 mmMEOW System Integration, the printed circuit board in 3D

    MEOW System Integration

    andrewgond/M.E.O.W-Mealtime-Electronic-Observation-and-Weighing

    M.E.O.W. automated pet feeder, a system that dispenses food and logs pet weight using load cells and RFID identification.

    40 parts1Apache-2.0
  • 6 layers139.7 × 88.9 mmIMX6-BareBones, the printed circuit board in 3D

    IMX6-BareBones

    a1wolfe/iMX6-BareBones

    i.MX 6ULL Open Source Development Board

    558 parts
  • 4 layers71.2 × 25 mmUSB with Screen, the printed circuit board in 3D

    USB with Screen

    alexcjang/Sprite-Stick

    MicroSD-Driven Mini USB Display Engine

    18 partsMIT
  • 2 layers52.8 × 55 mmILDAWaveX16, the printed circuit board in 3D

    ILDAWaveX16

    stanleyondrus/ILDAWaveX16

    ILDAWaveX16 is an open-source, high-resolution, wireless laser DAC with SD-card playback, network control, and ILDA output.

    95 parts42
  • 6 layers100 × 70 mmCanardBoard, the printed circuit board in 3D

    CanardBoard

    waterloo-rocketry/canhw

    Hardware monorepo avionics PCB

    280 parts15GPL-3.0

Questions

How big is the Sd card logger PCB?

It measures 33.3 × 16.8 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Sd card logger use?

6 parts, built around the EMIF06-MSD02N16 and MEM2090-00-145-00-A. 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 Sd card logger KiCad files?

From the griffinross2/Neo-GPS repository on GitHub, at the commit this page was made from: the board is Hardware/SD_Card_Logger/sd_card_logger.kicad_pcb and its schematic Hardware/GPS/fpga.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Sd card logger design in my own project?

Its repository publishes it under the GPL-3.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).