Controlador de memoria flash
# Controlador de memoria flash

Un controlador de memoria flash (o controlador flash) gestiona los datos almacenados en la memoria flash (normalmente flash NAND) y se comunica con una computadora o dispositivo electrónico. Los controladores de memoria flash pueden estar diseñados para funcionar en entornos de bajo ciclo de trabajo, como las tarjetas de memoria, u otros soportes similares para su uso en PDA, teléfonos móviles, etc. Las unidades flash USB utilizan controladores de memoria flash diseñados para comunicarse con ordenadores personales a través del puerto USB con un ciclo de trabajo bajo. Los controladores flash también pueden diseñarse para entornos de mayor ciclo de trabajo, como las unidades de estado sólido (SSD) utilizadas como almacenamiento de datos para sistemas de computadoras portátiles hasta matrices de almacenamiento empresarial de misión crítica.

## Configuración inicial

Tras la fabricación inicial de un dispositivo de almacenamiento flash, el controlador flash se utiliza primero para formatear la memoria flash. De este modo, se garantiza que el dispositivo funciona correctamente, se localizan las celdas de memoria flash defectuosas y se asignan celdas de repuesto para sustituir a las futuras celdas defectuosas. Una parte de las celdas de repuesto también se utiliza para alojar el firmware que opera el controlador y otras características especiales para un dispositivo de almacenamiento concreto. Se crea una estructura de directorios para que el controlador pueda convertir las solicitudes de sectores lógicos en ubicaciones físicas en los chips de memoria flash reales.

## Lectura, escritura y borrado

Cuando el sistema o dispositivo necesita leer o escribir datos en la memoria flash, se comunica con el controlador de memoria flash. Los dispositivos más sencillos, como las tarjetas SD y las unidades flash USB, suelen tener un pequeño número de troqueles de memoria flash conectados simultáneamente. Las operaciones están limitadas a la velocidad de cada troquel de memoria flash. En cambio, una unidad de estado sólido de alto rendimiento tendrá más troqueles organizados con vías de comunicación paralelas para permitir velocidades varias veces superiores a la de un único troquel de memoria flash.

## Nivelación del desgaste y recogida de bloques

La memoria flash puede soportar un número limitado de ciclos de programación y borrado. Si un determinado bloque de memoria flash se programara y borrara repetidamente sin escribir en ningún otro bloque, ese bloque se desgastaría antes que todos los demás, lo que acabaría prematuramente con la vida útil del dispositivo de almacenamiento. Por este motivo, los controladores flash utilizan una técnica denominada nivelación de desgaste para distribuir las escrituras de la forma más uniforme posible entre todos los bloques flash de la SSD. En un escenario perfecto, esto permitiría que cada bloque se escribiera hasta su vida útil máxima, de modo que todos fallaran al mismo tiempo.

## Capa de traducción flash (FTL) y mapeo

Normalmente, los controladores de memoria flash también incluyen la "capa de traducción flash" (FTL), una capa por debajo del sistema de archivos que mapea las direcciones lógicas de bloque (LBA) del lado del host o del sistema de archivos a la dirección física de la memoria flash (mapeo lógico a físico). Las LBA hacen referencia a números de sector y a una unidad de mapeo de 512 bytes. Todos los LBA que representan el tamaño lógico visible y gestionado por el sistema de archivos se asignan a una ubicación física (ID de bloque, ID de página e ID de sector) de la memoria Flash. Como parte de la nivelación de desgaste y otros algoritmos de gestión de la memoria flash (gestión de bloques defectuosos, gestión de perturbaciones de lectura, gestión segura de la memoria flash, etc.), la ubicación física de un LBA puede cambiar dinámicamente con frecuencia. Las unidades de asignación de un FTL pueden diferir de modo que los LBA se asignen en función de bloques, páginas o incluso subpáginas. Dependiendo del patrón de uso, una granularidad de asignación más fina puede reducir significativamente el desgaste del flash y maximizar la resistencia de un medio de almacenamiento basado en flash. La función de deduplicación para eliminar datos redundantes y escrituras duplicadas también se añade en FTL.

## Amplificación de escritura

Una vez que todos los bloques de un dispositivo de almacenamiento de estado sólido se han escrito una vez, el controlador flash tendrá que volver a algunos de los bloques iniciales que ya no tienen datos actuales (también llamados bloques obsoletos). Los datos de estos bloques se sustituyeron por bloques recién escritos y ahora están a la espera de ser borrados para que se puedan escribir nuevos datos en ellos. Este proceso se denomina recogida de basura (GC). Todas las unidades SSD, tarjetas CF y otros dispositivos de almacenamiento flash incluyen algún nivel de recolección de basura. La velocidad a la que un controlador flash realiza este proceso puede variar.

