The Pico ROM Dumper turns the Raspberry Pi Pico (or Pico 2) into a device capable of dumping the contents of a ROM device. It currently supports 8-bit parallel data bus, 15-bit address bus, and CE (chip enable) pins. Since the Pico operates at 3.3V I/O, it is assumed that either the ROM will operate at 3.3V or level shifters are used to translate the ROM's voltage to be compatible with 3.3V.
To use the Pico ROM Dumper:
- restore the firmware on a Raspberry Pi Pico (or Pico 2)
- connect pins to target ROM and ensure nothing else is driving the bus
- connect cable from Pico to computer to provide power and serial shell
- connect to USB serial shell using a terminal emulator
- run
dumpcommand - see example usage below
$ picocom -b 115200 /dev/cu.usbmodem102
picocom v3.1
> help
* help
Print list of commands
* dump
Dump ROM
usage: dump [base addr] [length] [bytes per row] [setup time (us)]
example: dump 0x100 0xf00 32 10
> dump 0x100 0x20
0100: 0000 0000 0000 0000 0000 0000 0000 0000
0110: 0000 0000 0000 0000 0000 0000 0000 0000+-------+-----+------+--------+---------+-----+-------+
| Usage | Pin | Name | | Name | Pin | Usage |
+-------+-----+------+--------+---------+-----+-------+
| UART | 1 | GP0 | | VBUS | 40 | |
| UART | 2 | GP1 | | VSYS | 39 | |
| | 3 | GND | | GND | 38 | |
| A0 | 4 | GP2 | | 3V3_EN | 37 | |
| A1 | 5 | GP3 | | 3V3(OUT)| 36 | |
| A2 | 6 | GP4 | | ADC_VREF| 35 | |
| A3 | 7 | GP5 | | GP28 | 34 | D7 |
| | 8 | GND | | GND | 33 | |
| A4 | 9 | GP6 | | GP27 | 32 | D6 |
| A5 | 10 | GP7 | | GP26 | 31 | D5 |
| A6 | 11 | GP8 | | RUN | 30 | |
| A7 | 12 | GP9 | | GP22 | 29 | D4 |
| | 13 | GND | | GND | 28 | |
| A8 | 14 | GP10 | | GP21 | 27 | D3 |
| A9 | 15 | GP11 | | GP20 | 26 | D2 |
| A10 | 16 | GP12 | | GP19 | 25 | D1 |
| A11 | 17 | GP13 | | GP18 | 24 | D0 |
| | 18 | GND | | GND | 23 | |
| A12 | 19 | GP14 | | GP17 | 22 | /CE |
| A13 | 20 | GP15 | | GP16 | 21 | A14 |
+-------+-----+------+--------+---------+-----+-------+
To provide user-friendly shell interface, this project makes use of funbiscuit's embedded-cli library which supports tab-completion and shell history in a single header file.