A controller that manages communication between a NAND flash device and a computer. It is used to format the memory before first use and manages translation between logical addresses used by the computer and those used in the flash device. It also manages wear levelling.