Most of the following conclusions are taken from Intel's "Understanding the Flash Translation Layer (FTL) Specification".
Note: the problem of FTL is that it has no idea about the contents that it handles. Thus when it stores something, it has to find a new place instead of appending to the original place.
FTL is the driver that works in conjunction with an existing operating system (or, in some embedded applications, as the operating system) to make linear flash memory appear to the system like a disk drive. First, it creates “virtual” small blocks of data, or sectors, out of flash’s large erase blocks. Next, it manages data on the flash so that it appears to be “write in place” when in fact it is being stored in different spots in the flash. Finally, FTL manages the flash so there are clean/erased places to store data.
Basically, FTL does one thing: read the block data from the file system, write it at a free/erased location on the flash media and invalidates the block that previously contained the block's data.
For Intel NOR flash, Erased state is 1, programmed state is 0, a 0 cannot be changed back to a 1 except by an erase, and an erase must occur on a full erase block.
The main weakness of a FTL is that it has no idea of what part of an erase block belong to the same file. Thus leads to massive obslated blocks and more often garbage collection. The introduction of SATA 3.0 interface can solve this problem, with the new TRIM command which tells the underlying FTL which blocks are no longer being used and can be erased in garbage collection.