I've just spent an evening struggling with odd behaviour from an AT28C64B EEPROM. It's worked fine for a long time, but today after reprogramming, it started to fail. Initially of course I assumed there was a problem with my new code, or a loose wire elsewhere in the circuit, but I ended up tracing it back to the EEPROM.
I believe what I did was accidentally try to program it as an AT28C256E. I'm sure it's not the first time I've done this by accident, but it's the first time it's apparently caused damage to the IC.
The result is that, in my circuit, the EEPROM seems to always read $FF from every byte. Especially the low byte of the reset vector should be $00 but reads as $FF, this one is easy to spot but I suspect it's the case for all addresses. However, one of the first things I tried when I saw odd behaviour immediately after reset was putting the EEPROM back in the programmer and hexdumping its contents - and the readback was perfectly fine. So I started to suspect other things, such as accidentally enabling RAM or some other chip on the data bus at the same time - but after eliminating all those possibilities, I had to come to the conclusion the EEPROM was faulty.
Testing it in isolation in my own test rig also produces the same failure result. However, because it was working fine when read back by the programmer, there was clearly more going on here. I began to suspect that either it was something to do with the unlocking protocol, or the "no connect" pins (1 and 26, which would be A14 and A13 on a larger EEPROM) might be having some effect. They were tied high in my test rig, but sure enough, if I disconnected them, the voltage on the data pins when presented with address $1FFC - which should have been zero - at least dropped from 5V to about 3.8V. And if I connected the "no connect" pins to ground, then the voltage dropped all the way down to 0V as it should be. I tried other addresses and found that the data pins did still go high when they should.
So the problem in my computer circuit is that I have these pins connected to the address bus, so that I can support 32K EEPROMs as well. However, now in order to support this 8K EEPROM, I'll need to tie them low instead.
These pins are documented as "no connect" in the datasheet (page 2 of
https://ww1.microchip.com/downloads/en/ ... oc0270.pdf) and it makes a distinction to some "don't connect" pins that exist in the PLCC package version. But clearly in this case "no connect" doesn't mean they haven't physically connected them to anything - whatever they're connected to, while it may be generally inert, must have been fused by the programmer when trying to program it in AT28C256E mode, and is now leading to something like leakage from those pins to ground perhaps? Or at least, data pins that are meant to be low read as high or intermediate levels now.
I'm curious whether you guys have seen this before, and whether you think connecting to these pins is bad practice in general - my understanding was always that, while what different manufacturers mean by "no connect" can vary, for these memory ICs with standard pin layouts it was meant to be the case that smaller ones would just ignore what level was presented there, so it was fine to provide whatever signal you liked. I suspect that's still the case, except I broke this one!