I am trying to understand how the NAND-Flash memory works and I think I understand how programming a page works but I don't see why inverting all the voltage would not lead to erasing the page. So, why is it that the whole block has to be erased (instead of a finer grained page-erase)?
Electronic – How does erasing a NAND-Flash memory work
flash
Related Solutions
Have a look at this paper from Micron : use a mapping of logical block to physical block. Maintain a supply of pre-blanked pages and write into the next available one (or one chosen by your wear-levelling algorithm).
Eventually almost all your blocks are full, with some holes where pages within the block have been marked "deleted" but not actually erased. Then you do your algorithm: find block(s) with most deleted pages, copy to new location, erase old location, put old location on the "free" list.
This then raises the question of how to store the mapping data itself; one common approach is to extend the blocks slightly and put the mapping data on the block itself (as a "tag"). At bootup the controller can cache some or all of the mapping in RAM. Another approach is to use the NOR flash of the controller itself to store the mapping data.
Some types of non-volatile memory device use error-correcting logic which adds an extra few bits to each programmable chunk (e.g. 5 bits per 16, 6 per 32, 7 per 64, 8 per 128, etc.) Generally the error correction code is chosen so that all bits blank is a valid representation; in some cases, but not all, it may also be chosen such that all bits programmed is also a valid combination. For simplicity, I'll assume a code with which guards each group of 4 bits with 3 guard bits. Compute the three guard bits guard bit as being the xor of either data bits 0+1+3, 0+2+3, or 1+2+3. I'll also assume that a blank word is zero.
The 16 possible code values are thus
3210 ABC 3210 ABC 3210 ABC 3210 ABC
0000 000 0100 011 1000 111 1100 100
0001 110 0101 101 1001 001 1100 010
0010 101 0110 110 1010 010 1110 001
0011 011 0111 000 1011 100 1111 111
When a memory nybble is read, the system can see what bits ABC should be according to the table. If one of the seven bits in the word is misread, the combination of ABC bits that don't match the computed value will indicate which bit was wrong.
Suppose a memory system used the 16-bit code shown above, and one wanted to overwrite a byte value of 1110 (ECC bits 001) with a value of 1000 (ECC bits should be 111). The net effect would be that the system would write 1000 with ECC bits of 001. When the data is read back, the system would see that for a value of 1000, the ECC bits should be 111 but are instead 001. The fact that bits A and B are wrong means bit 0 of the data was wrong and should be flipped; the system would thus read the value as 1001 (whose ECC is correctly 001).
In most cases, there should be enough flexibility in the design of an error-correcting code to permit both all-bits-clear and all-bits-set to be regarded as valid combinations. Some systems do not do so, however. If an error-correcting code would require an all-bits-programmed word to have two or more of the ECC bits blank, then an attempt to obliterate a word which has those bits programmed would likely visibly fail; attempts to program many other values would likely yield a state which was only one bit error away from failure rather than two.
I really wish memory designers would allow for data to be obliterated even if they don't allow most other overwriting patterns. Especially with NAND flash, it would make some operations a lot easier.
Best Answer
What you say is more similar to old EEPROM and NOR Flash, in which the erasing process basically consists in the injection of the same amount of opposite charge. The problem is that the cancellation has to be really accurate, otherwise the risk is to not discharge completely the gate or charging it with an opposite value.
The Flash NAND memories use the tunnel release principle, that (if I remember well) basically consists in making the charge flowing away from the floating gate to one of the active regions, avoiding the risk of injecting other charges.
Probably it's not so clear, but the reason why it doesn't discharge with an opposite voltage is because with NAND Flash you discharge the Floating Gate as you would do with a capacitor, simply letting the charge flow away; while the other technologies require the injection of an opposite charge.
(Take this answer with caution, it's not fully accurate but based on what I remember from the course...when I'll get the material again I'll give you a more accurate answer)