GPIO to External SPI Flash/EEPROM: Read/Write
The Use Case
Flipper's GPIO header exposes SPI, making it a genuinely useful bench tool for reading/writing/dumping external SPI flash or EEPROM chips — useful for firmware extraction/backup on other devices you're working on, or just general electronics bench work without needing a dedicated SPI programmer.
Hardware Connection
Standard SPI wiring, matching the target chip's pinout to Flipper's GPIO header:
- Flipper GPIO pin (check current pinout diagram — varies slightly by exact pin assignment used in the app you're running) → chip's SCK (clock)
- Flipper GPIO → chip's MOSI (data to chip)
- Flipper GPIO → chip's MISO (data from chip)
- Flipper GPIO → chip's CS (chip select)
- Flipper 3.3V and GND → chip's VCC and GND — check your target chip's voltage tolerance carefully, some EEPROM/flash chips are 1.8V or 5V and need level shifting or a different supply, don't assume 3.3V is universally safe
Common Chip Families
- W25Qxx series (Winbond SPI NOR flash) — extremely common in routers, IoT devices, and general embedded firmware storage. Widely supported by Flipper's GPIO apps designed for SPI flash dumping.
- 25xx SPI EEPROMs (Microchip, ST, etc.) — smaller capacity, common in simpler devices for config/calibration data storage.
Using an SPI Flash App
Several community-developed FAP apps specifically target SPI flash read/write (search the Flipper app catalog for current options — this space evolves, so check what's actively maintained rather than relying on a specific app name that might be outdated). General workflow within these apps:
- Connect chip per the wiring above, with the target device powered off if you're reading a chip in-circuit (in-circuit reads risk bus contention from other chips sharing the SPI lines — desoldering for a clean out-of-circuit read is more reliable when precision matters).
- Select the app's Detect/Identify function first — reads the chip's JEDEC ID to confirm correct wiring and chip family before attempting a full read.
- Run a full dump to Flipper's SD card once identification succeeds.
In-Circuit vs Out-of-Circuit Reading
In-circuit (chip still soldered to its host board) works for many simple cases but risks bus contention if other components are also driving the same SPI lines — you'll sometimes need to hold the host device's own microcontroller in reset (grounding its reset pin) during the read to keep it from interfering with the bus while Flipper is trying to talk to the flash chip directly.
Verifying a Dump
Compare a checksum (MD5/SHA) of your dump against a known-good reference if one's available for your target device/chip — a corrupted or partial read due to wiring issues can look superficially complete without careful verification, and re-flashing a bad dump back to a device can brick it.
Related Guides
- How to Use the Flipper Zero GPIO for Hardware Hacking: UART, SPI, I2C, and Debugging
- Flipper Zero GPIO: Reading Sensors and Controlling LEDs
- GPIO Basics on Flipper Zero — Wiring and Using Pins
- Flipper Zero GPIO Pinout and Hardware Expansion: UART, I2C, ADC, 1-Wire, and Sensor Wiring
- Raspberry Pi GPIO: Complete Beginner Guide with Python Examples
- Building Your First Custom Flipper Zero App: ufbt Setup, GUI, and GPIO
- How to Use a Logic Analyzer for Digital Signal Debugging: Saleae, Sigrok, and Protocol Decoding
- Build a Flipper Zero GPIO Environmental Sensor Add-On