A web-based Intel Hex file programmer for I²C EEPROMs using the Raspberry Pi Pico 2W.
- WiFi connectivity with web interface.
- Upload Intel Hex files via browser.
- Writes to I²C EEPROM connected to GPIO 4 (pin 6, SDA) and GPIO 5 (pin 7, SCL).
- Real-time programming status feedback.
- Raspberry Pi Pico 2W.
- I²C EEPROM BR24G04NUX-3 and others (as found on Variscite's carrier boards).
- Pull-up resistors (typically 4.7kΩ) for I²C lines (if not built into your EEPROM module).
Pico 2W EEPROM
PIN 6 (GP4) -> SDA
PIN 7 (GP5) -> SCL
3.3V -> VCC
GND -> GND
Important: Ensure your EEPROM is rated for 3.3V operation.
- Pico SDK
- CMake (version 3.13 or higher)
- ARM GCC compiler
# Clone the Pico SDK
git clone https://github.com/raspberrypi/pico-sdk.git
cd pico-sdk
git submodule update --init
# Set environment variable
export PICO_SDK_PATH=/path/to/pico-sdk# Create the build directory and configure the project, using Ninja
cmake -G Ninja -S . -B build
# build
cmake --build buildThis will generate hex_eeprom_programmer.uf2 in the build directory.
- Hold the BOOTSEL button while connecting the Pico 2W to your computer
- The Pico will appear as a USB mass storage device
- Copy
hex_eeprom_programmer.uf2to the device - The Pico will automatically reboot and start running
The device automatically connects to the WiFi network "hermione" with password "Thisisatest".
Connect a serial terminal (115200 baud) to see the IP address:
# On Linux/Mac
screen /dev/ttyACM0 115200
# Or use minicom
minicom -D /dev/ttyACM0 -b 115200You'll see output similar to:
I2C initialized on GPIOS SDA=4, SCL=5
I2C Bus Scan
0 1 2 3 4 5 6 7 8 9 A B C D E F
00 . . . . . . . . . . . . . . . .
10 . . . . . . . . . . . . . . . .
20 . . . . . . . . . . . . . . . .
30 . . . . . . . . . . . . . . . .
40 . . . . . . . . . . . . . . . .
50 . . . . @ @ . . . . . . . . . .
60 . . . . . . . . @ . . . . . . .
70 . . . . . . . . . . . . . . . .
Done.
Reading at EEPROM_ADDR 0x54...
0 1 2 3 4 5 6 7 8 9 A B C D E F
00 0x56 0x43 0x02 0x73 0x79 0x6d 0x2d 0x31 0x2e 0x36 0x00 0x00 0x00 0x00 0x00 0x00
10 0x00 0x00 0x00 0x8f 0x1a 0xd7 0xea 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
Connecting to WiFi...
Connected to WiFi
IP Address: 192.168.1.xxx
HTTP server started on port 80
Ready to receive Intel Hex files
Open a web browser and navigate to the IP address shown (e.g., http://192.168.1.xxx)
- Click "Choose File" and select your .hex file
- Click "Upload and Program"
- The system will parse the Intel Hex format and write to the EEPROM
- You'll see a success message with the number of bytes written
Edit in main.cpp:
#define WIFI_SSID "hermione"
#define WIFI_PASSWORD "Thisisatest"The default EEPROM address is 0x54. If your EEPROM uses a different address, modify:
#define EEPROM_ADDR 0x54 // Change this to match your EEPROMThe default pins are:
- SDA: GP4 on pin 6
- SCL: GP5 on pin 7
To change, modify:
#define I2C_SDA_GPIO 4
#define I2C_SCL_GPIO 5The programmer supports standard Intel Hex format:
- Record type 00 (Data records)
- Record type 01 (End of File)
Each line in the hex file should follow this format:
:BBAAAATTHHHH...HHCC
Where:
- BB = Byte count
- AAAA = Address
- TT = Record type
- HH = Data bytes
- CC = Checksum
- Verify SSID and password are correct
- Ensure 2.4GHz WiFi is available (Pico W doesn't support 5GHz)
- Check that WiFi network is in range
- Verify I²C connections and pull-up resistors
- Check EEPROM address matches your device
- Ensure EEPROM is not write-protected
- Verify EEPROM power supply is stable at 3.3V
- Confirm Pico is connected to WiFi (check serial output)
- Verify you're on the same network as the Pico
- Try pinging the IP address
- The EEPROM write cycle includes a 5ms delay for compatibility with most EEPROMs
- For large files, writing may take several seconds
- The web interface has a 2KB buffer for incoming data - very large hex files may need to be split
This project is provided as-is for educational and development purposes.