Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pSweeper

An embedded PSP BaryonSweeper — a self-contained "Pandora battery" for unbricking a PlayStation Portable. It runs on a Raspberry Pi Pico and emulates a PSP "JigKick" service battery: it answers the console's battery authentication over the single-wire Baryon serial line and presents the service-mode serial (FFFFFFFF), so the PSP boots into service mode — the state used to run an unbricking IPL from a Memory Stick.

The goal of this project is to make BaryonSweeper a standalone piece of hardware. Where the original tool drives the authentication from a PC over a USB-to-TTL adapter, this port runs the whole exchange on-device — so the Pico is the Pandora battery, with no computer in the loop.

This is a MicroPython port of khubik2/pysweeper, the original BaryonSweeper. See Credits.

⚠️ Authentication keys are not included. See Authentication keys.


Requirements

  • Raspberry Pi Pico (RP2040) running MicroPython
  • A single WS2812 / NeoPixel status LED (on-board or wired to GP16)
  • A wiring harness to the PSP battery terminals (Baryon data line + ground)

Wiring

Pico PSP battery connector
GP0 (UART0 TX) Baryon data line (K-line)
GP1 (UART0 RX) Baryon data line (K-line)
GND Battery GND
GP16 NeoPixel status LED (data)

The data line is half-duplex single-wire: GP0 (TX) and GP1 (RX) are tied together to the one battery data pad. The Pico emulates only the data / authentication side of the battery. In the intended build it is embedded inside a real PSP battery, so the battery's own cells supply the PSP's power — you do not power the console separately.

PSP-1000 exception: the original PSP-1000 only boots into service mode with the AC charger connected. All other models (2000, 3000, Go, Street) enter service mode from the battery alone.

Serial format

19200 baud, 8 data bits, EVEN parity, 1 stop bit (8E1).

Note: the PC reference (pysweeper) uses 8E2, but on the RP2040 + PSP this build runs at 8E1 — that is the empirically-working configuration. Do not change it to 2 stop bits.

Authentication keys

The challenge/response uses a set of per-version AES keys and challenge secrets. They are intentionally not distributed with this project — they are sensitive material, and sourcing them is left to you. Everything key-related is kept out of the repository:

  • keys.example.py — a committed template with the required structure and placeholder (all-zero) values.
  • keys.py — your real values. It is listed in .gitignore and must never be committed.

Set it up by copying the template and filling it in:

cp keys.example.py keys.py
# then edit keys.py and replace every placeholder with a real value

keys.py provides the following, all imported by main.py:

Name Shape
keystore[v] 16-byte AES key (32 hex)
challenge1_secret[v] 8 bytes (16 hex)
challenge2_secret[v] 8 bytes (16 hex)
go_key1 / go_key2 / go_secret 16 bytes each (32 hex)

v is the board key-version id. Fill in the versions your target PSP uses; with the placeholder values (or missing entries) the authentication will simply fail.

Install

  1. Flash MicroPython to your Pico.
  2. Create and fill in keys.py as above.
  3. Copy these three files to the Pico's filesystem: main.py, neopixel.py, keys.py.
  4. Reset the Pico, insert the battery it's embedded in (or connect it to the PSP battery terminals), and power on the PSP. On a PSP-1000, also connect the AC charger — it will not enter service mode on battery alone.

Raise DEBUG_LEVEL (0–3) at the top of main.py for more verbose serial logging.

Status LED

Color Meaning
Yellow Booting
Blue Frame start received from the PSP
Orange Transmitting a reply
Green Idle / last exchange OK
Violet Checksum failed on a received frame
Pink Error, timeout, or bad frame length
Red UART echo self-test failed (non-fatal)

On boot the firmware runs a UART echo self-test. On the single-wire harness it sees its own transmission and passes; if it fails it flashes red but continues anyway.

Supported models

Consumer PSP hardware revisions — 1000, 2000, 3000, Street (E1000), and the various Slim/Street board revisions — subject to having the correct per-version keys.

Credits

  • khubik2/pysweeper by khubik — the original BaryonSweeper (JigKick service-tool emulator) that this project is a port of. With dogecore (response-generator port, stream repair, interface code), Proxima (battery-authentication reverse engineering), and the wider PSPx.Ru community.
  • This repository is the MicroPython / Raspberry Pi Pico port of that work — the same protocol, moved onto a standalone microcontroller.

Third-party libraries

Disclaimer

For education and repair of hardware you own. The authentication keys are the property of their respective owner and are intentionally not included. No warranty — see LICENSE. Use at your own risk.

License

MIT © 2026 CAATZ

About

Embedded PSP BaryonSweeper — a standalone Pandora battery for unbricking the PSP, on a Raspberry Pi Pico (MicroPython).

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages