
NFC Card
aaakum4/Sorta-Flipper-Zero
At the cost of a flipper zero, I thought that I may never own one. Then I found a hackster.io page that went through a full DIY and cheap Flipper Zero and I thought I'd try it myself with some changes.

At the cost of a flipper zero, I thought that I may never own one. Then I found a hackster.io page that went through a full DIY and cheap Flipper Zero and I thought I'd try it myself with some changes.
Fipper Zero is an open-source printed circuit board by aaakum4, from the aaakum4/Sorta-Flipper-Zero repository on GitHub, published under the GPL-3.0 licence. It is a 4-layer board of 126 × 70 mm with 72 parts on 138 nets, routed with 1,207 tracks and 197 vias.
It is built around the AP2112K-3.3. Its parts include 28 resistors, 16 connectors, 8 capacitors, 7 switches and 1 IC. It belongs with the STM32 boards of this library.
At the cost of a flipper zero, I thought that I may never own one. Then I found a hackster.io page that went through a full DIY and cheap Flipper Zero and I thought I'd try it myself with some changes. With this project, I should also learn a ton about PCB's and how electronics work.
V1 is a modular based project to ensure that it will work as planned, then, , I will completely custom make it for V2.
Features:
Not included (compared to a standard Flipper):
Before starting this project, I went through the Flipper Zero hardware documentation to understand how the device is built and what components it uses.
https://docs.flipper.net/zero/development/hardware/tech-specs https://docs.flipper.net/zero/development/hardware/schematic
From this, I created the table below listing the main hardware blocks used in the Flipper Zero. This table is used as a reference to understand the system, not something to copy directly.
To keep the first version realistic and achievable, a few things were intentionally simplified.
The device is powered only through USB, with no internal rechargeable battery. This removes a lot of complexity around battery charging and safety, and makes early testing much easier. Portability isn’t the focus for the first version.
Instead of designing a full BLE RF circuit, this project uses either an STM32WB5MMG module or a NUCLEO-WB55RG during early development. This avoids antenna tuning issues and lets me focus more on firmware and overall system behaviour.
The Flipper Zero uses an antenna multiplexer to optimise different Sub-1 GHz bands. For this project, that part is left out. A single antenna is used instead, which means reduced range, but much simpler hardware and easier bring-up.
Rather than copying the Flipper Zero’s reset button combination logic, this design uses a dedicated reset button. This keeps the schematic simpler and is more practical while debugging.
Based on the Flipper Zero reference design and the simplifications outlined above, the following components were chosen for the v1 module-based prototype. This list reflects what will actually be used in the first working version of the project.
V1 - Selected Components:
With the overall architecture defined, I moved on to creating the full schematic in KiCad. The goal at this stage was to produce a complete, electrically correct design that could realistically be turned into a PCB, while still keeping the project modular and easy to iterate on.
I started by placing the STM32WB5MMGH6TR module and wiring all required power pins according to ST’s reference designs. This included separating the digital and analog supplies, tying VREF+ to VDDA, and correctly handling VBAT and VDDUSB. Decoupling capacitors were added close to each supply pin to ensure stable operation.
Next, the power system was designed around USB-C input. A main 3.3 V rail powers the MCU and core logic, while a second 3.3 V rail is used for external peripherals.
Peripheral interfaces were then added. Instead of hard-coding specific modules, generic headers were used for NFC, Sub-1 GHz RF, display, IR, vibration, and expansion. These headers are labeled to match common module pinouts, allowing different breakout boards to be tested without changing the core design. Shared buses like SPI were carefully routed with separate chip-select signals.
Finally, the schematic was cleaned up and checked for electrical correctness. ERC warnings were addressed, unused pins were left intentionally for future use, and the design was reviewed to ensure it matched the original goals of being practical, modular, and suitable for a first hardware revision.
This step, to be honest, was kinda cooked. I went in a bit over my head with this and it took wayyyy longer than I had hoped and probably needed.
After the initial schematic was complete, I spent time going back through it to fix a number of electrical and structural issues flagged by ERC. This step was mainly about correcting mistakes rather than adding new features.
Most of the changes were around power domains, making sure VDD, VDDA, VREF+, VBAT, and VDDUSB were connected correctly and matched the STM32WB module datasheet. I cleaned up grounding, added and adjusted local decoupling capacitors, and removed a few incorrect connections that were previously masking ERC errors instead of solving them properly.
I also fixed the Bluetooth RF path, reworking the RF_OUT pin so it is routed through a DC-blocking capacitor to a u.FL connector. This replaces earlier incorrect handling of the RF pin and makes the onboard BLE functionality usable while keeping the design clean and standards-compliant.
This is an amazing sight, no ERC errors 🙏🏻
I am now a new man...
This was my third time routing a PCB, and it was a mix of improvement… and pain. The Xiao MCU I used for the Macropad and the ESP32-S3-WROOM-1u for the development board don’t come close to the challenge I just faced. The STM32WB5MMG is tiny but packed with pins, making it a real test of patience. That said, I’m finally done, and I couldn’t be happier.
There were multiple reroutes along the way, mostly caused by pin congestion around the MCU and the sheer number of external connectors. Some compromises were necessary, like tighter clearances and smaller vias, but in the end, the board reached a fully routable and manufacturable state.
While it’s not perfect, this routing pass made me really proud of how far I’ve come since the Macropad project. It was a clear reminder that schematics are the easy part—routing is where designs are truly made or broken.
For this project, I worked with a 4-layer board (my first board over 2 layers) to manage density and RF performance, especially around the RF/Bluetooth section. I created a dedicated antenna keep-out zone to avoid copper interference, routed USB D+ and D− as a matched, parallel pair to maintain signal integrity, and widened power traces to 0.5 mm to reduce voltage drop.
Given the tight board size, I had to selectively use smaller vias and reduced trace widths in congested areas to complete the routing without violating design rules. To make assembly easier, I also added silkscreen boxes around each functional module, improving clarity and helping with placement. Looking back, having dedicated GND and +3.3 V layers definitely made this step much more manageable compared to what it would’ve been without them.
Size: 125mm x 70mm (quite alot bulkier than a normal flipper, I have no clue how they do it) Vias:
Estimated Time: ~2 hours of planning & component placement ~6 to 8 hours of routing + rerouting ~2 to 3 hours of cleanup, checks, and second-guessing everything
(Plus bonus time staring at the screen being stupid)
For v2 of the Sorta Flipper Zero, I’ll most likely need to make a copper trace antenna for the NFC. For V1, I’m using a module, but I didn’t want to jump into V2 blindly. I decided to spend some time understanding how the module works, what I can bridge across, and even built my own small NFC card as an introduction to what I’ll need to do in V2.
Here’s the datasheet for the NFC module I hope to use: ST X-NUCLEO-NFC08A1
One thing I quickly noticed is that the antenna matters a lot. The orientation, size, and shape of the coil strongly affect the read range, and even small changes in trace layout or nearby copper can weaken the signal. This made it clear that designing a custom antenna will require careful attention.
I also learned that matching the antenna to the module is critical. The module expects the antenna to have roughly the right inductance; otherwise, communication becomes unreliable. Experimenting with the card showed me how adding or removing a turn in the coil noticeably changes performance.
Using the module is convenient because it handles much of the tuning internally. But seeing it in action made it obvious that if I want a custom copper trace for V2, I’ll need to account for these details myself.
This is the PCB I made from a simple schematic. I originally included an LED, but removed it in the PCB for the sake of readability and clarity. The file is in its own folder.
This step is not nesassary at all, but I truly found it really helpful with general understanding of this concept and I think it will be even more helpful when I make v2.
Since alot of this iteration will be using modules there isn't that much soldering. Here is the parts list from JLCPCB PCBA.
Generating OTP Data (Flipper Zero)
This project uses the Flipper Zero firmware OTP generation script (scripts/otp.py) derived from the official Flipper Zero firmware repository (licensed under GPL-3.0) to generate device-specific OTP data.
cd flipperzero-firmware/scripts
./otp.py generate \
--version $((0x0c)) \
--firmware $((0x07)) \
--body $((0x09)) \
--connect $((0x06)) \
--display "mgg" \
--color "transparent" \
--region "world" \
--name "Greg" \
myotpWarning: OTP memory is one-time programmable. Flashing incorrect data may permanently affect the device.
https://github.com/flipperdevices/qFlipper.git Firmware installation is performed using qFlipper, the official Flipper Zero desktop application.
This project may reference prebuilt firmware or OTP data derived from the Flipper Zero firmware repository. All such components remain licensed under GPL-3.0, and source code is provided in accordance with that license.
The NFC chip used on the X‑NUCLEO expansion board is the ST25R3916B, which has a different IC identity value to the ST25R3916 used in the Flipper Zero. Although the two chips share the same register map and functionality, the firmware performs an identity check during initialisation, causing the driver to fail when the B variant is detected.
To resolve this, I forked the official Flipper Zero firmware repository (https://github.com/flipperdevices/flipperzero-firmware) and modified the NFC driver to accept the ST25R3916B IC identity. This allows the existing firmware to operate correctly with the alternative NFC hardware without affecting functionality.
The modified source code is available here: https://github.com/aaakum4/flipperzero-firmware.git
This project is licensed under the GNU General Public License v3.0 (GPL-3.0).
This project includes and is derived from code from:
| Qty | Value | Footprint | References |
|---|---|---|---|
| 22 | 47 | Resistor_SMD:R_0603_1608Metric | R1, R2, R3, R4, R5, R10, R11, R12, R13, R14, R15, R16, R17, R19, R20, R21 +6 |
| 7 | SW_Push | Button_Switch_THT:SW_PUSH_6mm | SW1, SW2, SW3, SW4, SW5, SW6, SW7 |
| 6 | 100nF | Capacitor_SMD:C_0603_1608Metric | C1, C3, C4, C5, C6, C7 |
| 4 | 5.1k | Resistor_SMD:R_0603_1608Metric | R18, RP1, RU1, RU2 |
| 3 | 10u | Capacitor_SMD:C_0805_2012Metric | CP1, CP2, CP3 |
| 2 | AP2112K-3.3 | Package_TO_SOT_SMD:SOT-23-5 | UP1, UP2 |
| 2 | Conn_01x05 | Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Vertical | J10, J13 |
| 1 | 0 | Resistor_SMD:R_0402_1005Metric | R23 |
| 1 | 10 | Resistor_SMD:R_0603_1608Metric | R22 |
| 1 | 1uF | Capacitor_SMD:C_0603_1608Metric | C2 |
| 1 | 4.7uF | Capacitor_SMD:C_0805_2012Metric | C8 |
| 1 | Buzzer | lcsc:BUZ-TH_BD9.0-P4.00-D0.6-FD | BZ1 |
| 1 | CN5 | Connector_PinHeader_2.54mm:PinHeader_1x10_P2.54mm_Vertical | J1 |
| 1 | CN6 | Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical | J2 |
| 1 | CN8 | Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_Vertical | J4 |
| 1 | CN9 | Connector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_Vertical | J3 |
| 1 | Conn_01x02 | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J11 |
| 1 | Conn_01x03 | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | J12 |
| 1 | Conn_01x13 | Connector_PinHeader_2.54mm:PinHeader_1x13_P2.54mm_Vertical | J14 |
| 1 | Conn_01x18 | Module:Flipper_Zero_Straight | J15 |
| 1 | Conn_02x04_Odd_Even | Connector_PinHeader_2.54mm:PinHeader_2x04_P2.54mm_Vertical | J5 |
| 1 | Conn_Coaxial | Connector_Coaxial:U.FL_Hirose_U.FL-R-SMT-1_Vertical | J16 |
| 1 | D_Schottky | Diode_SMD:D_SOD-123 | D1 |
| 1 | IR Receiver | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | IR2 |
| 1 | IR Transmitter | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | IR1 |
| 1 | LOGO | Graphics:larger baby gojo | G*** |
| 1 | LOGO | Graphics:Gojo mid | G*** |
| 1 | MicroSD Card | Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_Vertical | J7 |
| 1 | STM32WB5MMGH6TR | lcsc:LCC-LGA-86_L11.0-W7.3_STM32WB5MMGH6TR | U1 |
| 1 | Switch | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J8 |
| 1 | USB_C_Receptacle_USB2.0_16P | Connector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12 | USB1 |
| 1 | Vibration module | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | J9 |
| 1 | iButton Connector | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J6 |
It measures 126 × 70 mm and has 4 copper layers, 1.6 mm thick.
72 parts, built around the AP2112K-3.3. 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.
From the aaakum4/Sorta-Flipper-Zero repository on GitHub, at the commit this page was made from: the board is PCB/Fipper Zero.kicad_pcb and its schematic NFC Micro-project/NFC Card.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
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).

aaakum4/Sorta-Flipper-Zero
At the cost of a flipper zero, I thought that I may never own one. Then I found a hackster.io page that went through a full DIY and cheap Flipper Zero and I thought I'd try it myself with some changes.

FrameworkComputer/ExpansionCards
Reference designs and documentation to create Expansion Cards for the Framework Laptop



DDeGonge/OS-ARM
This arm is not industrial and it will not be fast, but that is not my goal. But it will hopefully be a very nice looking arm fully capable of 6dof motion, cheap enough to keep it accessable but capable enough to…



