The EEPROM Programmer’s serial protocol was migrated from JSON-RPC (with ArduinoJson dependency) to a lightweight binary protocol. On Arduino DUE + AT28C64: reads are 4.4x faster (6.96s to 1.58s), full write cycles are 2.7x faster (33.74s to 12.70s), and flash usage dropped 31% (16KB saved). The protocol uses length-prefixed frames with CRC-16/CCITT integrity checking, a state machine receiver on the firmware side, and blocking serial reads on the Python side. ArduinoJson — the only external firmware dependency — was eliminated entirely.
The EEPROM Programmer now supports all available AT28C family chips: AT28C04, AT28C16, AT28C64, and AT28C256. Chip-specific features like RDY/BUSY polling and page-write mode enable major speedups on Arduino DUE but are not viable on MEGA. Performance measurements and wiring details are provided for each chip.
Page-write support in the AT28C256 can significantly speed up programming, but it depends on tight timing. The Arduino MEGA is too slow to use this feature reliably, while faster platforms like the Arduino DUE make it practical and stable.
Both DATA and RDY/!BUSY polling methods cut EEPROM write wait time by roughly threefold compared to fixed delays. They deliver similar performance and are simple to implement on Arduino. The limiting factor is the Arduino’s processing speed, not the AT28Cxx IC.
When an Arduino establishes a serial connection, the board resets and produces transient voltage spikes on the EEPROM pins. These fluctuations can reach up to 2 V, enough to toggle the !WE pin and initiate unintended write operations. Tying the !WE pin to VCC during read mode prevents data corruption.
A JSON-RPC API is implemented for the Arduino EEPROM programmer, with clean separation between protocol handling and application logic. The Arduino firmware exposes basic read/write primitives, while a Python CLI handles the business logic. Validation against the XGecu reference programmer confirms identical read and write behavior.
The EEPROM Programmer initially returned corrupted data. I tested wiring, bit ordering, and bus isolation, suspecting noise on the data lines. Oscilloscope traces suggested interference, but the root cause was software, several Arduino address pins were never initialized. These floating pins produced unstable signals that mimicked noise. After proper initialization, the API produced stable results identical to a reference programmer.
Evaluation of EEPROM Programmer performance on Arduino. Overhead from digital I/O measured, and oscilloscope traces confirmed datasheet timing. Active polling of the READY/BUSY pin reduced write latency while maintaining reliability. Sequential write/read verification showed consistent integrity. Future work includes endurance testing, retention studies, and comparing Arduino boards with different clock speeds.
Practical walkthrough of 28C64 EEPROM on Arduino GIGA. Pin mapping, minimal API for reads/writes, breadboard + LCD UI. Verified operation, observed write-edge vs datasheet mismatch, early-address retention issues, and plans for timing and READY/!BUSY testing.
The EEPROM Programmer project uses Arduino MEGA or DUE to read from and write to EEPROM chips from the AT28Cxx family. A Python CLI provides erase, write, read, and verify operations. The series of posts below covers the full development process, from initial implementation to supported chip details.