MicroSD con ECC

Algunas tarjetas MicroSD (principalmente Transcend) afirman tener un controlador ECC en el chip. Me preguntaba cómo funciona esto. ¿Verifican todos los datos escritos en él y reubican automáticamente los sectores en diferentes posiciones en caso de que detecten una falta de coincidencia?

Si es así, ¿cómo es que pueden tener una calificación de velocidad tan alta (Clase 10), cuando tienen que volver a leer todos los datos que se escriben y, a veces, incluso tienen que escribir los datos dos veces?

Dividí "cómo [pueden] tener una velocidad tan alta" en una pregunta separada: ¿Qué le da a algunas memorias flash una calificación de velocidad más alta que otras memorias flash? -- Espero que no te moleste.

Respuestas (3)

¿[ECC] significa que no puede usar el 10 % del espacio disponible en la tarjeta?

No. El ECC no utiliza el espacio de datos de usuario disponible en la tarjeta. En cambio, el ECC se almacena en "áreas libres" separadas junto a los datos del usuario.

área de repuesto

Muchos chips de memoria flash están diseñados de tal manera que, por cada sector de 512 bytes destinado a datos de usuario, hay un "área libre" adicional correspondiente de 16 bytes. ( Jim Cook. "Memoria flash 101: Introducción a la memoria flash NAND" .)

Esas áreas libres, también denominadas "áreas fuera de banda" (áreas OOB), están diseñadas para usarse con códigos ECC. (Tecnología Eureka. "Preguntas frecuentes sobre NAND Flash". "¿Qué es la columna de repuesto en NAND flash?" .) ( ¿La capacidad del chip flash está realmente limitada a las potencias de 2? )

En teoría, una persona podría programar el controlador de memoria flash conectado directamente a estos chips de memoria flash para usar esos bits de "área libre" para lo que quisiera.

Algunos sistemas de archivos flash conectados directamente a estos chips de memoria flash utilizan esa "área libre" de formas sofisticadas para almacenar datos del sistema de archivos y códigos de corrección de errores más complejos, en lugar de datos ECC de Hamming: ID de objetos, datos de nivelación de desgaste, etc. ( Wikipedia: YAFFS ). (En comparación con el sistema "Hamming" simple que se describe a continuación, estos sistemas de archivos tienen algún otro enfoque para detectar y tratar errores de bit: códigos Reed-Solomon, sistemas de chips múltiples similares a RAID, etc.).

Las tarjetas SD/MMC tienen un pequeño controlador de memoria flash en su interior, entre los pines de la interfaz SD/MMC y los chips de memoria flash reales. (Consulte a b c para ver fotos de las partes internas de la tarjeta SD, que muestran el pequeño chip del controlador y el chip de memoria flash mucho más grande).

escritura ECC

¿Cómo es que pueden tener una clasificación de velocidad tan alta?

Cuando su computadora o microcontrolador envía el comando "escribir un sector de 512 bytes" a la tarjeta SD/MMC, el sector se borra y luego se escribe. No hay espacio aquí para discutir las cosas que hacen los fabricantes para que el flash sea más rápido, así que me limitaré a explicar por qué las tarjetas ECC no son notablemente más lentas que una tarjeta (hipotética) sin ECC.

Tengo entendido que todos los controladores SD/MMC deberían al menos escribir los códigos ECC de Hamming en el área libre de cada bloque, a menos que utilicen algún sistema de corrección de errores más sofisticado. ( "ST AN1823: Código de corrección de errores en memorias flash NAND" ) (¿Hay alguna forma de saber si la tarjeta realmente estaba haciendo eso o no?)

El chip de memoria flash está diseñado para que toda la página (datos de usuario + área libre) se borre de una sola vez. Este borrado tomaría la misma cantidad de tiempo en un chip flash sin ECC, por lo que el ECC no ralentiza el borrado.

El controlador calcula los datos ECC y, a ciegas (*), escribe los datos del usuario y los datos ECC en la memoria flash. Los códigos Hamming se pueden calcular "a la velocidad del cable" mientras los datos del usuario llegan a través de la interfaz SD/MMC o mientras los datos del usuario se envían a la tarjeta flash, por lo que los cálculos de ECC no ralentizan las escrituras.

El controlador tiene que escribir 16 bytes "extra" de datos para cada sector de 512 bytes, pero eso no es notablemente más lento que un chip flash hipotético sin ECC: 1/32 ~= 3% más lento.

(*) Los controladores de la tarjeta SD no se molestan en leer los datos durante una escritura para ver si funcionó. Solo detectan problemas mucho más tarde, mientras manejan un comando de "lectura". Por desgracia, escucho rumores de personas sin escrúpulos que toman tarjetas de 1 GB perfectamente buenas y reprograman el controlador para que piense que en realidad hay 4 GB de flash conectados. La tarjeta falsa/falsificada/forjada resultante parece funcionar bien para lecturas y escrituras hasta que se llena el primer GB; incluso parece funcionar bien durante las escrituras (a ciegas) en el resto de los "4 GB", pero luego las cosas salen terriblemente mal al intentar leer los datos de la tarjeta.

Lectura ECC

una cantidad significativa de tiempo para recuperar errores... porque necesita procesar los datos originales como un todo

Sí, los códigos de Hamming necesitan procesar el "bloque completo", pero para las tarjetas SD, el "bloque completo" es solo 512 + 16 bytes.

Cuando su computadora o microcontrolador envía "leer un bloque de 512 bytes" a la tarjeta SD/MMC, el controlador de la tarjeta SD/MMC lee los 512 bytes de usuario completos + 16 bytes ECC, corrige los errores (si los hubiera) y envía los 512 bytes corregidos de datos de usuario a su computadora o microcontrolador (o envía un código de error si hubo tantos errores en los datos de usuario o en los datos de ECC o en ambos que eran incorregibles).

Debido a que el controlador en la tarjeta puede leer 512 + 16 bytes del flash y hacer la corrección de Hamming mucho más rápido de lo que filtra los códigos de respuesta y los datos a través de la interfaz de la tarjeta, esto no es mucho más lento que una tarjeta (hipotética) sin ECC.

Hasta donde yo sé, las tarjetas SD/MMC no utilizan la corrección de errores Reed-Solomon, pero supongo que podrían hacerlo internamente y no hay forma de saberlo desde el exterior.

Creo que la tarjeta SD ecc depende del fabricante. Podrían usar Hamming, Reed-Solomon o BCH simples (útiles a medida que aumentan las capacidades).

El controlador ECC generalmente está integrado dentro de la MCU en la tarjeta SD. El controlador ECC se utiliza para crear códigos ECC que se almacenan en el área de reserva de la memoria flash (cada página de la memoria flash contiene capacidad de reserva que puede utilizar la mcu).

También se utiliza para comparar los códigos con los datos que se leen (para corrección y detección de errores). Entonces, cada vez que se lee una página, el código se usa para corregir los datos de esa página (los datos corregidos no se reescriben). Representa una sobrecarga, pero si lo miras página por página, hacer la comparación sobre la marcha no es particularmente difícil.

asi que...

Escribir: HOST (datos) -> MCU (escribe ecc) -> FLASH (datos + ecc)

Lectura: FLASH(datos+ecc)->MCU(lee ecc)-> HOST(datos corregidos)

Los códigos de borrado toman un conjunto de ( k ) símbolos y convertirlo en un conjunto más grande ( norte símbolos) con codificación redundante, por lo que norte > k . Almacenó (mucho) más información de la que necesitaría. Ahí es donde entra en juego la redundancia. Piense en ello como tomar un libro, arrancar las páginas, hacer copias y distribuir juegos (al azar) entre sus amigos. Todos los fragmentos que salen del proceso suelen tener algún tipo de control de integridad (por ejemplo, controles de paridad). Si lo lees, seleccionas suficientes fragmentos para recuperar el k símbolos y hacer los cálculos. Si la verificación de integridad falla, reemplaza ese fragmento defectuoso por uno nuevo/similar, o reconstruye la información que falta (según el código utilizado). Un código bastante popular es el Código Reed-Solomon (pdf), así que tal vez eso pueda ayudarlo como un ejemplo concreto.

Para responder a sus preguntas relacionadas: los datos se verifican (inherentemente) cuando se leen (no cuando se escriben) ya que es más barato. La escritura se realiza en diferentes ubicaciones en paralelo, por lo que no hay demora adicional desde la perspectiva exterior.

Estoy familiarizado con Reed-Solomon, también se usa en el formato PAR2, por ejemplo. Sin embargo, una de sus propiedades es que lleva una cantidad significativa de tiempo recuperar errores cuando solo tiene un 10 % de bloques de recuperación, porque necesita procesar los datos originales en su totalidad para poder recuperar solo una pequeña parte. Además, ¿esto significa que no puede usar el 10% del espacio disponible en la tarjeta?
Seguramente habrá mejores introducciones a RS que ese documento escaneado de 144 páginas.