Since it is called programmable, I tend to think that it should also be named with the write option. What is the deal here?
Although they both involve changing the contents of memory, writing and programming are not the same thing.
Writing is done with the chip connected to the processor, during a normal processor cycle, and using normal voltages.
Programming involves conditions that are not normally produced by a processor. There may be a need to erase the memory first (possibly using ultraviolet light). It may require higher voltages. It may be more convenient to remove the chip from the circuit and program it with dedicated programming equipment. In most cases, the programming process takes much more time than a regular memory access. The bottom line is that a normal processor write cycle is not adequate to program a chip.
RAM can be directly written by a processor. There is no need to program RAM.
Masked ROM can neither be written nor programmed.
However, the various types of PROMs can only be programmed. A normal processor write does not generate the conditions needed for programming, so PROMs cannot be written.
Mask ROM. In Mask ROM, there is no reprogramming. Conceptually, 1's are directly connected to VCC and 0's are directly connected to ground with metalized areas in the construction of the IC. But you literally need to alter the design of the chip and make new chips to change it. So if you commit executable code to mask ROM and then find a bug, you have to make new chips to fix it.
Old-style EPROM (erasable programmable ROM). UV erasable programmable ROM. The chip has a transparent window on it. You uncover the window, put it in a UV chamber and expose it to UV radiation to erase it. Then you cover the window, program it using a special programmer. After that it is effectively read only memory (ROM) unless you erase it again, which usually cannot be done in-circuit.
EEPROM. Electrically Erasable Programmable Read Only Memory. Some kind of special step is required to erase it and program it (possibly high voltage) and then it can be treated as ROM. Usually it is possible to erase/reprogram in circuit if desired, but there is also usually a write-protect pin. If you disable writing via the WP pin, this can be treated like ROM in the sense that the only way to reprogram it is to remove the IC from the circuit.
OTP flash. One-time programmable flash is rated to be erased and programmed only once. After that it can be treated like ROM. Sometimes it is programmed prior to PCB assembly and sometimes after. Losing memory contents during reflow oven exposure could be a concern.
This is just off the top of my head.
I feel that the confusion comes from the fact that a clearly writable memory is called read-only in its name.
The resolution of the paradox: these memories contain data, which is not or just rarely intended to be changed, and they operate as ROMs for most of the time. Changing the data in them often require special conditions (UV light, high voltage) and relatively long time.
For example a flash memory is similar to an EEPROM in the sense that it can store the data without external power, but mainly due to its easy writing procedure it is not called ROM.
As it often happens with naming, there are no strict rules, what device falls into a given category and it is often influenced by the marking efforts of a new product.
This has to do with the history of this technology: ROM (contents set in manufacturing), PROM (one time programmable), EPROM (erasable using UV light) and then EEPROM (electronically erasable) that can be written, erased, re-written by the host IC using a serial or parallel interface.
For instance, I've used EEPROM ICs that communicate over I2C in order to store calibration data. The only reason I've used an EEPROM is that from time to time the data was re-written with updated calibration data. I suppose that the only reason the EEPROM is called read-only is because it has endurance limitations regarding Erase/Write procedures (such as 100.000 erase/write cycles - reads are not a problem at all). This has to do with the silicon technology used in EEPROM devices (aka flash memory, because EEPROM is in fact a NOR flash memory): high voltages are used to program the flash memory floating gate, the oxide layer isolating the gate degrades. However, there are some wear leveling mechanisms that prolong the life of the memory distributing evenly the write/erase cycles in order to do not have high concentration of W/E cycles in one area.
So, why is "read-only" ? Because you have to use it carefully, and to write to memory "from time to time". If you replace a RAM memory with an EEPROM memory and the application writes data once per second the memory exceeds the endurance rating in a few days. You'd better use a FRAM memory. Long story short, EEPROM is used to store settings data, calibration data, etc
Originally, the devices called "ROMs" were in fact read-only. The data stored in them was put in place as part of the manufacturing process and could not be changed.
When the first UV erasable memories were introduced they were named EPROMs, but they were not truly read-only. By a relatively long exposure the memory could be erased, and then could be written using relatively high voltages. After that, the memory would retain the written information even when power was removed and could be read quickly.
So, the term "ROM" has been appropriated for memory technologies that can be erased and rewritten but will hold the stored data even when power is removed. I suppose that it would be better to call them "non-volatile memory", but here we are.
Originally, writing to an EPROM was done with special equipment - an EPROM Programmer - these parts could not be programmed in-circuit, as they required higher than normal voltages and special writing routines.
Newer EPROMs can be written in-circuit, but require special commands which take more time than a write to RAM - a simple "write to memory" processor instruction won't work.
There are some non-volatile memories that can be written to as normal RAM, but retain their data without power.
The very first "programmable" ROM, back in the 70s, utilized "fuses". The programming process was slow and involved running a fairly high current through to "blow" fuses for the zero bits, one by one. The programming process required special hardware, and was often done by a 3rd party vs using "in house" capabilities.
There was no way to "erase" such a ROM, allowing it to be reprogrammed, though it was possible to program it in several stages, one address subset at a time, or zero portions that needed to be deleted.
It's called EEPROM because it's a huge production to re-write it. That makes it far too slow for use as NVRAM.
Also, the mechanism isn't designed for frequent use - it's designed to be rewritten tens of times, e.g. for BIOS updates.
Let's suppose you are building a day-night sensor. The sensor needs to remember the maxima and minima of lux it experienced during the last several days, so it can establish a day-night threshold line for this (potentially shaded; potentially artificially lit) location. Bonus points if it stores that through a power outage. So your algorithm reads/writes that to an EEPROM, and does so every day, even though the values haven't materially changed. Don't do that. If you want to do it that way, use Flash.
ROM = it cannot readily be changed.
PROM = it can be field-programmed at all. (implied: once).
EPROM = it can be erased and reprogrammed. (implied: not electronically).
EEPROM = it can be erased and reprogrammed electronically.