Programming EPROM from dump

I have an old style EPROM, erasable by UV and I would want to program it using an Arduino MEGA, with the data from a dump. Essentially, I want to copy the EPROM I've made a dump of.

The EPROM in question is a M27C1001 (datasheet). Attached is a dump I've made of the original (alongside the output of "hexdump -C" on the capture).

I am not sure that the capture is correct, because there is one "block" of data (16 lines) that just repeats 64 times, and I think there may have been a glitch while reading.

I think firstly I will have to dump it again, and I would want instructions on that. Most code that I copied didn't work, so I think I will have to do what I fear most: writing my own code :D, which I want some directions on.

After that, the next logical step would be writing the dump to the second chip, which I don't know how to do either.

Please, correct me if I'm wrong anywhere and I thank you in anticipation.

capture.txt (16 KB)

capture_hexdumped.txt (75 KB)

Domnulvlad:
I am not sure that the capture is correct, because there is one "block" of data (16 lines) that just repeats 64 times, and I think there may have been a glitch while reading.

That would suggest that the Most Significant six lines on your reader were not connected or there was a failure in the logic. :roll_eyes:

Maybe a boost converter.

During programming, Vcc must be 6.25V ± 0.25V and Vpp must be 12.75V ± 0.25V so you will probably need some boost regulators to get those voltages from 5V. There are three control signals: E, P, and G. Fortunately only P has a maximum pulse width. It should be easy enough to generate a 100 microsecond pulse that lands between the 95 and 105 microsecond limits.

The chip has 17 address bits and 8 data bits so that's 25 output pins. Then the three control pins. You could add some external hardware to the UNO or use a MEGA. If using a MEGA it would be good to use three output ports for 16 of the address bits and all 8 data bits.

It looks like you just set up the address bits and the data bits, do a programming pulse (100 microsecond LOW on 'P'), change the data pins to inputs, set the 'G' pin LOW, read the data pins and compare. Repeat (up to 25 times) until the data read is equal to the data programmed. If, after 25 attempts, the data read back does not match the data programmed, the memory is faulty.

johnwasser:
Repeat (up to 25 times) until the data read is equal to the data programmed.

Then repeat half as many times again. :cold_sweat:

Paul__B:
Then repeat half as many times again. :cold_sweat:

Not according to page 9 of the datasheet.

2.6 Presto II programming algorithm
Presto II Programming Algorithm allows the whole array to be programmed, with a guaranteed margin, in a typical time of 13 seconds. Programming with Presto II involves in applying a sequence of 100µs program pulses to each byte until a correct verify occurs (see Figure 5). During programming and verify operation, a Margin mode circuit is automatically activated in order to guarantee that each cell is programmed with enough margin. No overprogram pulse is applied since the verify in Margin mode provides necessary margin to each programmed cell.

OK, I wasn't looking at the datasheet. So applying the program voltage to Vpp actually puts it into "Margin mode" for reads.

Clever - and as you say, easy to work with, unlike the old 2716. :grinning: