Keypie
RP2040 keylogger with an extra USB port powered by PIO, and a flash chip to store the data!
Created by
UnJolly random user(sockpuppet)(grinch) 🚀
Tier 3
8 views
0 followers
Timeline
CAN ⚡🚀
approved Keypie ago
Tier approved: 3
Grant approved: $53.00
Nice project
UnJolly random user(sockpuppet)(grinch) 🚀
submitted Keypie for review ago
UnJolly random user(sockpuppet)(grinch) 🚀
added to the journal ago
Getting ready for blueprint design review
https://blueprint.hackclub.com/projects/2187
I'm getting this project ready for design review
Asked for a few extra dollars for leeway - hopefully this is okay.
Currently I believe the project is in decent shape
Github is being updated:
Kicad design files: uploaded
I may make silkscreen artwork changes once I find silkscreen art I want and like.

UnJolly random user(sockpuppet)(grinch) 🚀
added to the journal ago
JLCPCB order mock up
Exported gerbers from kicad using the extension
Put it in on JLCPCB's site
no free colors so no purple or black :(
PArt nums:

Flash chip:
C2940195
USB socket:
C165948
https://jlcpcb.com/partdetail/Korean_HropartsElec-TYPE_C_31_M12/C165948
Button:
C720477
hopefully customs aren't too bad
2x PCBA

5x PCBA

Getting the repo ready for review :3
UnJolly random user(sockpuppet)(grinch) 🚀
added to the journal ago
routing, usb, silkscreen, update flash ground
routing, usb, silkscreen, update flash ground aaaaa
routed usb traces
19.5988 + (3.2373-3.0495)
(1.1784)-1.3776-2.5735
13.4299 + 1.11784‎ = 14.548Total for left trace
12.8217 + 1.3776 ‎ = 14.199
14.548 - 1.3776‎ = 13.17
not much words, \
did silkscreen
ready for prod



UnJolly random user(sockpuppet)(grinch) 🚀
added to the journal ago
continued routing and new flash chips!
My layout of the PCB sucks.
I moved the LDO down too, that helped.
I really think getting a smaller flash chip will help.
It might be needed to reroute the whole board after getting those parts now that I have a better feel for how this design is.

Probably gonna move the LDO a bit, Turing it makes sense
Then I just need to figure out how to bring the power up to the rp2040s big power input locations aaaa
Yes ig my mentality rn is that if I find those smaller flash chips my problems will be solved lol.
I’m annoyed bc there’s a lot of stuff that needs to be near the RP2040 at specific locations and that’s conflicting with the layout of the rest lol.
Or I could make the board bigger as its smaller then a pico rn lol



Even a few more millimeters on the sides so I have enough room to put the buttons on the sides would help, added height definitely too
Flash chip!
C2940195 seems
W25Q64JVXGIQ hm?


Byebye old flash chip, We’re downgrading storage size to 8MB, hope that’s enough lol so okayy

LOL I ACCIDENTALLY SELECTED THE FOOTPRINT FOR A BUTTON
For one of the flash chips

Stuck on figuring out where to put this flash
chip hmm
okay tomorrow i will figure that out yay
UnJolly random user(sockpuppet)(grinch) 🚀
added to the journal ago
Started routing - more polish sparkles yay
Reasoning on all design choices:
SPI flash chips:
I needed a way to store the keystrokes from the keyboard, as this is a key logger.
We could use the main program flash but I didn’t really want to play with that since it’s kinda scary to partition it that way. (Please don’t judge - there are additional problems and stuff that made me just avoid that)
At first I was leaning towards using a microSD slot, but that was expensive and a flash chip, the same one as the program flash would be simpler.
Apparently I don’t need to connect the CS pin for the second SPI chip so I’ll backtrack there.
source:
https://hackclub.slack.com/archives/C08Q1H6D79B/p1752435015518049?thread_ts=1752279534.843099&cid=C08Q1H6D79B
Update: I can look for smaller flash chips.
a xson format chip might work better except it wouldn't be a basic part anymore.
Also I should reconsider if I need two flash chips anyways sob (reviewers please don't kill me with whichever decision I make)
Flash chip:
https://hackclub.slack.com/archives/C083S537USC/p1764395957019679?thread_ts=1764192732.078499&cid=C083S537USC
USB:
There are two USB ports.
One is the programming and output main port, and one is the secondary port powered by PIO.
The keyboard is plugged in to the secondary port, and the keystrokes are recorded and stored in the flash chip.
Computer <- board <- keyboard
Computer <- board main USB <- rp2040 + flash <- PIO USB <- keyboard
Reset pad:
No space for button, unpopulated resistor pad.
0ohm resistor, unpopulated
BOOT button:
https://jlcpcb.com/partdetail/XUNPU-TS_1088AR02016/C720477

PCB routing and layout:
I made really stupid routing decision before and now so some of the traces are really thin for some reason - i plan to reroute those.
I fixed the crystal area's routing a bit, so that part is yay

I'm looking forward to placing the remaining capacitors which wasn't too hard, and then I might look into look at the XSON flash. And maybe get two more buttons(Replace the RESET pad and add another button for mode, or just one button).
^The mode button would be to change if its a keylogger or if its outputting the data - look into the partitioning of the flash chip again
iirc the docs i need are somewhere in. the arduino docs for rp2040 core.
Yes i'm rambling, I know, sorry :3
UnJolly random user(sockpuppet)(grinch) 🚀
added to the journal ago
Revived the project! Fixed USB.
Revived the project - from Highway July.
I brushed up the schematic, especially the USB part.
Did some minor organizing on the SPI side, I need to get the footprints for the LDO again since I broke easyeda2kicad(and fixed it but later).
Note the different, easyeda's footprints imported to kicad, right, and kicad's built in footprints, left.

TODO:
Grab footprints for USB and LDO
Place capacitors
Round PCB
Route USB traces
Route board
Find artwork
UnJolly random user(sockpuppet)(grinch) 🚀
started Keypie ago