A flash memory controller (or flash controller) manages data stored on flash memory (usually NAND flash) and communicates with a computer or electronic device. Flash memory controllers can be designed for operating in low duty-cycle environments like memory cards, or other similar media for use in PDAs, mobile phones, etc. USB flash drives use flash memory controllers designed to communicate with personal computers through the USB port at a low duty-cycle. Flash controllers can also be designed for higher duty-cycle environments like solid-state drives (SSD) used as data storage for laptop computer systems up to mission-critical enterprise storage arrays.

Initial setup
After a flash storage device is initially manufactured, the flash controller is first used to format the flash memory. This ensures the device is operating properly, it maps out bad flash memory cells, and it allocates spare cells to be substituted for future failed cells. Some part of the spare cells is also used to hold the firmware which operates the controller and other special features for a particular storage device. A directory structure is created to allow the controller to convert requests for logical sectors into the physical locations on the actual flash memory chips.

Reading, writing, and erasing

When the system or device needs to read data from or write data to the flash memory, it will communicate with the flash memory controller. Simpler devices like SD cards and USB flash drives typically have a small number of flash memory die connected simultaneously. Operations are limited to the speed of the individual flash memory die. In contrast, a high-performance solid-state drive will have more dies organized with parallel communication paths to enable speeds many times greater than that of a single flash die.

Wear-leveling and block picking

Flash memory can withstand a limited number of program-erase cycles. If a particular flash memory block were programmed and erased repeatedly without writing to any other blocks, the one block would wear out before all the other blocks thereby prematurely ending the life of the storage device. For this reason flash controllers use a technique called wear leveling to distribute writes as evenly as possible across all the flash blocks in the SSD. In a perfect scenario this would enable every block to be written to its maximum life so they all fail at the same time.

Flash translation layer (FTL) and mapping

Usually, flash memory controllers also include the "flash translation layer" (FTL), a layer below the file system that maps host side or file system logical block addresses (LBAs) to the physical address of the flash memory (logical-to-physical mapping). The LBAs refer to sector numbers and to a mapping unit of 512 bytes. All LBAs that represent the logical size visible to and managed by the file system are mapped to a physical location (block ID, page ID and sector ID) of the Flash. As part of the wear leveling and other flash management algorithms (bad block management, read disturb management, safe flash handling etc.), the physical location of an LBA might dynamically change frequently. The mapping units of an FTL can differ so that LBAs are mapped block-, page- or even sub-page-based. Depending on the usage pattern, a finer mapping granularity can significantly reduce the flash wear out and maximize the endurance of a flash based storage media. The deduplication function to eliminate redundant data and duplicate writes is also added in FTL.

As the FTL metadata takes up its own flash space, it too needs protection in case of power loss. In addition, it is possible for the mapping table to wear out before other parts of the flash memory has, prematurely ending the life of a storage device. This is usually avoided in enterprise devices by allocating an oversized space for spares, although more durable forms of storage like MRAM has been proposed for FTL too.

Garbage collection

Once every block of a solid-state storage device has been written one time, the flash controller will need to return to some of the initial blocks which no longer have current data (also called stale blocks). The data in these blocks were replaced with newly written blocks and now they are waiting to be erased so that new data can be written into them. This is a process called garbage collection (GC).  All SSDs, CF Cards, and other flash storage devices will include some level of garbage collection. The speed at which a flash controller will do this can vary.

References

Computer memory
Solid-state computer storage
플래시 메모리 컨트롤러 (또는 플래시 컨트롤러)는 플래시 메모리에 저장된 데이터를 관리하고 컴퓨터나 전자 장치와 통신한다. 플래시 메모리 컨트롤러는 SD 카드, 콤팩트플래시카드 또는 디지털 카메라, PDA, 휴대폰 등에 사용되는 기타 유사한 미디어와 같은 낮은 듀티 사이클 환경에서 작동하도록 설계할 수 있다. USB 플래시 드라이브는 낮은 듀티 사이클에서 USB 포트를 통해 개인용 컴퓨터와 통신하도록 설계된 플래시 메모리 컨트롤러를 사용한다. 플래시 컨트롤러는 노트북 컴퓨터 시스템에서 미션 크리티컬 엔터프라이즈 스토리지 어레이까지 데이터 스토리지로 사용되는 솔리드 스테이트 드라이브 (SSD)와 같은 더 높은 듀티 사이클 환경을 위해 설계할 수도 있다.

초기 설정 
플래시 저장 장치가 처음 제조된 후, 먼저 플래시 컨트롤러를 사용하여 플래시 메모리를 포맷한다. 이렇게 하면 장치가 제대로 작동하고 불량 플래시 메모리 셀을 찾아 향후 고장날만한 셀을 대체할 예비 셀을 할당한다. 예비 셀의 일부는 특정 저장 장치에 대한 컨트롤러 및 기타 특수 기능을 작동하는 펌웨어를 유지하는 데에도 사용된다. 컨트롤러가 논리적 섹터에 대한 요청을 실제 플래시 메모리 칩의 물리적 위치로 변환할 수 있도록 디렉토리 구조가 생성된다.

읽기, 쓰기 그리고 지우기 
시스템이나 장치가 플래시 메모리에서 데이터를 읽거나 써야 할 때 플래시 메모리 컨트롤러와 통신한다. SD 카드 및 USB 플래시 드라이브와 같은 단순한 장치에는 일반적으로 동시에 연결된 적은 수의 플래시 메모리 다이(memory die)가 있다. 작업은 개별 플래시 메모리 다이의 속도로 제한된다. 대조적으로, 고성능 솔리드 스테이트 드라이브는 단일 플래시 다이보다 몇 배 빠른 속도를 내도록 병렬 통신 경로가 있는 매트릭스로 구성된 100개 이상의 다이를 갖는다.

웨어레벨링(Wear-leveling) 및 블록 선정 
플래시 메모리는 제한된 수의 프로그램 삭제 주기를 견딜 수 있다. 특정 플래시 메모리 블록이 다른 블록에 쓰지 않고 반복적으로 프로그램되고 지워지면 다른 모든 블록보다 먼저 한 블록이 마모되어 저장 장치의 수명이 조기에 종료된다. 이러한 이유로 플래시 컨트롤러는 웨어 레벨링이라는 기술을 사용하여 SSD의 모든 플래시 블록에 가능한 한 고르게 쓰기를 분산한다. 완벽한 시나리오에서 이렇게 하면 모든 블록이 최대 수명까지 기록될 수 있으므로 모두 동시에 실패한다.

플래시 변환 레이어(Flash Translation Layer:FTL)와 매핑 
일반적으로 플래시 메모리 컨트롤러에는 호스트 측 또는 파일 시스템 LBA(논리 블록 주소)를 플래시 메모리의 물리적 주소(논리-물리주소 매핑). LBA는 섹터 번호와 512바이트의 매핑 단위를 나타낸다. 파일 시스템에 표시되고 관리되는 논리적 크기를 나타내는 모든 LBA는 플래시의 물리적 위치(블록 ID, 페이지 ID 및 섹터 ID)에 매핑된다. 웨어 레벨링 및 기타 플래시 관리 알고리즘(불량 블록 관리, 읽기 방해 관리, 안전한 플래시 처리 등)의 일부로 LBA의 물리적 위치가 동적으로 자주 변경될 수 있다. FTL의 매핑 단위는 LBA가 블록, 페이지 또는 하위 페이지 기반으로 매핑되도록 다를 수 있다. 사용 패턴에 따라 세밀하게 매핑하면 플래시 마모를 크게 줄이고 플래시 기반 저장 매체의 내구성을 최대화할 수 있다.

FTL 메타 데이터는 자체 플래시 공간을 차지하므로 정전 시에도 보호가 필요하다. 또한 플래시 메모리의 다른 부분이 마모되기 전에 매핑 테이블이 마모되어 저장 장치의 수명이 조기에 종료될 수 있다. FTL에 대해서도 MRAM과 같은 보다 내구성 있는 형태의 저장장치가 제안 되었지만, 이는 일반적으로 예비를 위한 초대형 공간을 할당하여 엔터프라이즈 장치에서 방지된다.

가비지컬렉션 (Garbage Collection) 
솔리드 스테이트 저장 장치의 모든 블록이 한 번 작성되면 플래시 컨트롤러는 더 이상 현재 데이터가 없는 초기 블록(부실 블록이라고도 함)으로 돌아가야 한다. 이 블록의 데이터는 새로 기록된 블록으로 대체되었으며 이제 새 데이터를 기록할 수 있도록 삭제되기를 기다리고 있다. 이것은 가비지 컬렉션 (GC)이라고 하는 프로세스이다. 모든 SSD, CF 카드 및 기타 플래시 저장 장치에는 일정 수준의 가비지 수집이 포함된다. 플래시 컨트롤러가 이를 수행하는 속도는 다를 수 있다.

참고 문헌 

컴퓨터 메모리