I've been having some problems with memory ICs, specifically Flash and EEPROM.

I've had some experience with the 7400 series for some time...logic gates are pretty straightforward. Input something, output something. But as soon as I move on to something more complicated, things just don't work for some reason. Everything looks okay on paper, but when I build it, it does not work. So how do you know that everything inside the chip is working the way they should?

The particular issue that I am facing is trying to program a 28C64 EEPROM IC. Reading it returns all ones, as expected. But as for trying to program, no dice.

I don't have time to create a schematic right now, but I might be able to add it later. For now, please try to visualize... :)

  • OE_ is held high.
  • WE_ and CE_ is manually controlled via switches
  • D0 to D7 is connected to DIP switch
  • A0 to A11 are connected to a 12-stage binary counter, a 74HC4040 IC
  • D12 is manually controlled via a DIP switch

  • Two buttons are used to control the binary counter, one to increment and one to reset

I've checked the inputs, and they are all correct. For the sake of simplicity, I tried to program pattern 0x55 (or 01010101) to address location 0x0000.

The procedure that I am using is as follows:

  1. Connect GND and Vcc
  2. Set DIP switch for data to 01010101
  3. Reset the binary counter (so that it outputs 000000000000)
  4. Set the D12 switch to 0
  5. Set CE_ to 0
  6. Set WE_ to 0
  7. Set WE_ to 1
  8. Set CE_ to 1
  9. Remove power

Why would this not work? I built another circuit on a breadboard to read it but it shows 11111111.

I am toggling the WE_ by hand, but it's usually supposed to be controlled by a CPU or a microcontroller. Is there a maximum time limit for the write pulse?

Also is it safe to disconnect Vcc power right after I program it? (Probably a stupid question)

Thanks, fuzzyhair2

P.S. Same thing happens for the flash memory, the 29F010. After the unlock cycle and program, I see all ones.


The datasheet says the write pulse width is maximum 1000ns

Page 6 at http://www.futurlec.com/Memory/28C64PLCC.shtml

  • \$\begingroup\$ Thanks....so I can't hand program it, right? \$\endgroup\$
    – fuzzyhair2
    Jan 4 '14 at 17:06
  • \$\begingroup\$ It is the only one with a max width, so perhaps you can replace the switch with something that can generate a really quick pulse. \$\endgroup\$ Jan 4 '14 at 20:49

Are you de-bouncing your switches? otherwise, you are probably getting several (hundred) pulses each time you toggle a switch. From the datasheet:

enter image description here

Also check your device datasheets to learn about the min/max timing of the various programming signals.

  • \$\begingroup\$ Only WE_ is debounced. Address is already zero, and data debouncing shouldn't matter, since they are set before the write pulse. Datasheets say nothing about the max, only the min. \$\endgroup\$
    – fuzzyhair2
    Dec 8 '13 at 18:49
  • \$\begingroup\$ Please add links to datasheets for the devices in question. I have seen some EEPROMs where yo uhave to write magic numbers to specific addresses as a safety feature, then you have 150 us to load the data, before the EEPROM will start a programming cycle. Fail any of these steps and it won't program. \$\endgroup\$ Dec 8 '13 at 19:22
  • 1
    \$\begingroup\$ @fuzzyhair2: the datasheet definitely states a maximum for the write pulse, I added the picture. \$\endgroup\$ Dec 9 '13 at 8:50
  • \$\begingroup\$ I think that may be the issue. I'm trying to program it by hand, but no luck, even when I press the write pulse button quickly it doesn't work... \$\endgroup\$
    – fuzzyhair2
    Jan 4 '14 at 17:09

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.