Skip to the content
PCBKitNew board
2 layers45 × 20 mmLpc1756 totp, the printed circuit board in 3D

Hardware 2FA TOTP authenticator

Size
45 × 20 mm
Copper layers
2
Thickness
1.6 mm
Parts
52
Nets
93
Pads
217
Tracks, vias
415, 70
Pours
2
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
14 Jan 2024
Updated
10 Jun 2026

Overview

Lpc1756 totp is an open-source printed circuit board by itzandroidtab, from the itzandroidtab/totp repository on GitHub. It is a 2-layer board of 45 × 20 mm with 52 parts on 93 nets, routed with 415 tracks and 70 vias.

It is built around the AMS1117-3.3, PTS810SJK250SMTRLFS and ABM3B-12.000MHZ-B2-T, with the ABS07-32.768KHZ-T, BC856A,215-JSM and IP4234CZ6,125(ES) among its other parts. Its parts include 14 resistors, 10 capacitors, 4 ICs, 3 diodes and 3 switches. It belongs with the NXP (LPC, Kinetis, i.MX RT) boards of this library.

Main components

7

README

readme.md

Hardware TOTP token

Open source hardware TOTP token. Currently targets the LPC1756, LPC1758 and LPC1759 (with a small change it should also run on the LPC1754).

Features

  • keys never leave the token after setup
  • support for 6 and 8 digit tokens
  • enter button types 6/8 digit token using HID keyboard (any device that supports HID keyboards should work)
  • supports up to 32 profiles
  • rechargable RTC battery
  • USB mode to add/delete profiles using a CSV file (supports base32, hex and hex string)
  • support to change the RTC calibration values in the settings
  • support for setting the time + timezone (currently only GMT)
  • 60 seconds screen timeout
  • support for different intervals (supports 1 - 180 seconds)

Images

Images can be found in the project logs at hackaday

TODO

  • encrypt profiles
  • add support for more than 32 profiles (needs a rework if more profiles are required. The profiles are copied to ram and there is not enough for more at the moment. If we leave them in flash we can store a lot more)
  • rework the calibration and time settings screens

Compiling

TOTP uses klib. This repo can be cloned in the klib project folder. See build.yml for more info on compiling this project.

Extra

Is intended to be used with USB dfu bootloader. To build without bootloader support remove the + 8k and - 8k from line 20 in the linkerscript.ld of this project.

The LPC1756 does not have enough ram to hold a full framebuffer (240 * 135 * 2 = 64'800 bytes). To work around this issue, we use 2 smaller framebuffers we alternate between. While one framebuffer is being transferred to the screen using DMA we fill the other.

To make it easier (for me) the whole screen is written to this smaller framebuffer. The pixels that do not fit the framebuffer are thrown away. This does waste CPU cycles but is not limiting the framerate. Filling a full frame with pixels takes around 6 milliseconds. Writing a full frame of framebuffers to the display takes around 11 milliseconds. This limits the maximum framerate to ≈ 85FPS. To get a consistant frame rate there is a limit of 60FPS.

The main screen takes the longest to draw. This is caused by the amount of pixels of the circle it needs to draw. The circle is generated on compile time to work around that the LPC175x family does not have a FPU. These generated pixels use 8640 bytes of flash.

Parts

52
QtyValueFootprintReferences
6, , , , ,
4100nFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC7, C8, C9, C10
418pFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC3, C4, C5, C6
41kResistor_SMD:R_0603_1608MetricR9, R11, R13, R14
3PTS810SJK250SMTRLFS_SamacSys:PTS810SJG250SMTRLFSS1, S2, S3
210uFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC1, C2
2300Resistor_SMD:R_0603_1608MetricR3, R6
233Resistor_SMD:R_0603_1608MetricR1, R2
11.5KResistor_SMD:R_0603_1608MetricR8
11.8KResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR12
11000Resistor_SMD:R_0603_1608MetricR5
110KResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR10
11KResistor_SMD:R_0603_1608MetricR7
1750Resistor_SMD:R_0603_1608MetricR4
1ABM3B-12.000MHZ-B2-T_SamacSys:XTAL_ABM3B-12.000MHZ-B2-TY2
1ABS07-32.768KHZ-T_SamacSys:ABS0716632768KHZTY1
1AMS1117-3.3Package_TO_SOT_SMD:SOT-223-3_TabPin2U2
1BC856A,215_SamacSys:SOT95P230X110-3NQ1
1D_SchottkyDiode_SMD:D_SOD-523D3
1IP4234CZ6,125_SamacSys:SOP95P275X110-6ND1
1LEDLED_SMD:LED_0805_2012MetricD2
1LOGO_SamacSys:koon_logoG***
1LPC1756FBD80,551_SamacSys:QFP50P1400X1400X160-80NIC1
1MC32603_SamacSys:MC32603J1
1MS621FE-FL11E_itz:MS621FE-FL11EBT1
1RN2425_TE85L,F__SamacSys:RN2425TE85LFQ2
1TC2050Connector:Tag-Connect_TC2050-IDC-FP_2x05_P1.27mm_VerticalU3
1st7735_mini_lcd_itz:ST7735U1

The 47 most common of 52 parts.

Questions

How big is the Lpc1756 totp PCB?

It measures 45 × 20 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Lpc1756 totp use?

52 parts, built around the AMS1117-3.3, PTS810SJK250SMTRLFS, ABM3B-12.000MHZ-B2-T and ABS07-32.768KHZ-T. 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 Lpc1756 totp KiCad files?

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

Can I use the Lpc1756 totp design in my own project?

Its repository states no licence, so its author keeps all rights: ask itzandroidtab before reusing the design.

Similar boards

  • 2 layers341.7 × 195.5 mmVesselV3, the printed circuit board in 3D

    VesselV3

    Hy-5/VesselV3

    Custom "Vessel" Keyboard - PCB + 3D Case Model + Firmware + Keycaps vector

    382 partsMIT
  • 2 layers121 × 70.5 mmJoshua, the printed circuit board in 3D

    Joshua

    thepolymatt/joshua

    The Repository for "Joshua" the audio/OSD mod for CRT TVs

    58 parts12
  • 4 layers394 × 110 mmGpu cluster backplane, the printed circuit board in 3D

    Gpu cluster backplane

    antmicro/gpu-cluster-backplane

    This project contains open hardware design files for a PCB supporting power distribution in a cluster composed of GPUs. This board has been derived from an open source d1600e-psu-breakout created by Antmicro.

    616 parts4Apache-2.0
  • 4 layers58.6 × 53.6 mmUsbhub, the printed circuit board in 3D

    Usbhub

    gmarcus1018/Portfolio_Web

    Personal portfolio site built with Astro. Static site, deploys to Cloudflare Pages.

    65 parts
  • 4 layers50 × 80 mmHimax usb board, the printed circuit board in 3D

    Himax usb board

    johnMamish/lilcam

    USB webcam that uses himax sensors

    120 parts
  • 4 layersMooltipass, the printed circuit board in 3D

    Mooltipass

    limpkin/mooltipass

    Github repository dedicated to the mooltipass project

    66 parts531
  • 4 layers77.8 × 56.2 mmMini ble, the printed circuit board in 3D

    Mini ble

    mooltipass/minible_hw

    Repository for the Mini BLE Hardware

    176 parts23MIT
  • 4 layers54 × 64 mmCard debug board-3, the printed circuit board in 3D

    Card debug board-3

    oresat/oresat-flatsat

    All things for the OreSat flatsat

    101 parts1