Ingeniería inversa y análisis de la tarjeta microSDXC de alta resistencia de SanDisk

Para aquellos que son demasiado vagos para leer: las tarjetas SanDisk High Endurance utilizan la memoria flash SanDisk / Toshiba 3D TLC . Me tomó mucho más tiempo del que debería haber sido (¡y todo gracias a SanDisk!) Instalar esto.



Anteriormente, miré las tarjetas microSD de SanDisk para su uso en aplicaciones de escritura intensiva como DVR. Luego estudié los resultados de las pruebas de velocidad y pensé en qué tipo de NAND Flash se usa en la tarjeta. SanDisk no publica descripciones detalladas de los componentes internos de las tarjetas, por lo que no tuve más remedio que aplicar ingeniería inversa a la tarjeta.



Soporte técnico que falló



Con la esperanza de obtener información, envié un correo electrónico al soporte de SanDisk preguntando qué tipo de NAND Flash usan en su línea de alta resistencia, así como métricas de resistencia como el número de ciclos P / E (Programa / Borrado) y general el número de terabytes escritos (TBW). Desafortunadamente, el personal de soporte de SanDisk no pudo proporcionar respuestas satisfactorias a mis preguntas, ya que no brindan información que no esté cubierta por las especificaciones publicadas. Me dijeron que todas sus tarjetas usan MLC Flash, lo cual es correcto si llamas a TLC Flash de 3 bits "MLC" (como lo hace Samsung).



Estimado Jason:



Gracias por ponerse en contacto con el servicio de atención al cliente global de SanDisk. Le agradecemos que sea miembro de nuestra familia SanDisk.



Entiendo que desea saber más sobre nuestra tarjeta de monitoreo de video SanDisk High Endurance. Permítanos informarle que todas nuestras tarjetas de memoria utilizan tecnología flash de celda de niveles múltiples . Sin embargo, el número de ciclos de lectura / escritura flash no se publica ni se documenta. Solo se publican velocidades de lectura y escritura, es decir, 100 MB / sy 40 MB / s. La tarjeta de 64GB puede grabar video Full HD hasta por 10,000 horas. Detalles pueden ser encontrados aqui.



TARJETA microSD DE MONITOREO DE VIDEO DE ALTA RESISTENCIA SANDISK



Saludos, ...


Les daré una medalla con las palabras "lo intentaste".



Anatomía de una tarjeta SD



La tarjeta microSD puede parecer un dispositivo monolítico. Sin embargo, estas cartas se componen de muchas fichas diferentes, cada una de las cuales juega un papel diferente. La tarjeta SD más simple tendrá un controlador que controla los chips Flash NAND y se comunica con el host (PC, cámara, etc.), así como con el Flash NAND en sí (que consta de uno o más cristales flash). El blog de Bunnie Studios tiene un excelente artículo sobre la construcción de tarjetas SD, que incluye descripciones de falsificaciones y su fabricación.





Diagrama de bloques de una tarjeta SD típica Las tarjetas



microSD son a menudo (pero no siempre) sitios de prueba que se utilizan para programar y probar NAND Flash en producción. Pueden usarse para recuperar datoso reutilizar tarjetas microSD con un controlador o firmware defectuoso. Te permiten convertir una tarjeta en un simple NAND Flash; puedes leer sobre esto en el blog de Gao Louis. Tenga en cuenta que no existe un estándar para tales sitios de prueba (incluso dentro del mismo fabricante); sin embargo, algunos fabricantes, en particular SanDisk, tienen patrones que facilitan la ingeniería inversa.



Controlador agachado, almohadillas de prueba al acecho



Las tarjetas microSD entran en la categoría de dispositivos flash "monolíticos" porque combinan un controlador y NAND Flash en un solo paquete no separable. Muchos fabricantes están llevando el bus de datos flash a sitios de prueba ocultos (y prácticamente sin documentación). Con su ayuda, otros fabricantes de tarjetas de memoria y unidades flash USB fabrican unidades económicas a partir de piezas defectuosas. El controlador simplemente se puede apagar y el flash se puede usar como un chip normal.



En el caso de las tarjetas SanDisk, la información sobre los pines de sus sitios de prueba es extremadamente escasa. Cada generación tiene sus propias diferencias, pero el diseño se mantiene prácticamente sin cambios. Las diferencias pueden ser fatales, ya que las clavijas de alimentación y tierra a veces se intercambian (y si la polaridad es incorrecta, ¡el chip morirá instantáneamente!).



Mi tarjeta (así como muchas de las tarjetas de la compañía de una línea costosa, no Ultra) tienen almohadillas de prueba cubiertas no con barniz, sino con algún tipo de epoxi serigrafiado con un número de serie cortado con láser. Calenté, raspé y logré quitar este revestimiento muy frágil de las almohadillas de prueba. Al hacerlo, también eliminé el número de serie; probablemente esto sea algo así como un sello de garantía.





Almohadillas de prueba de epoxi





Esquema de las almohadillas de prueba



Después de eliminar los rastros de recubrimiento epoxi, encontré un diseño familiar de almohadillas de prueba, a las que se agregaron algunas más a continuación.



Crear un módulo de interfaz



El concepto del módulo de interfaz es bastante simple. Para cada una de las almohadillas de prueba, sacamos un cable que conduce a una almohadilla más grande para facilitar el acceso y conectamos el bus SD normal al conector SD para que el controlador haga su trabajo mientras jugamos con el bus NAND Flash. Dado el pequeño tamaño de los sitios de prueba y la gran cantidad de ellos, el resultado puede resultar un poco complicado.





Conjunto del módulo de interfaz Módulo de





interfaz, foto ampliada



Comencé pegando la tarjeta con cinta adhesiva de doble cara a la placa de pruebas. Luego estañé todas las almohadillas y soldé un pequeño condensador cerámico de 1uF a las almohadillas Vcc y GND de la tarjeta. Con un cable esmaltado de 40 AWG (0,1 mm), conecté cada almohadilla de prueba al pin correspondiente en la placa de pruebas. ¡Junto con los sitios adicionales, esto ascendió a 28 pequeños cables!



Para el conector SD utilicé un cable con un dispositivo para reparar teléfonos Android de HTC " XTC 2 ClipFuncionó como una 'tarjeta SD remota flexible' y enrutaba las señales a través de un pequeño cable flexible. Envolví el cable con cinta de cobre para protegerlo del ruido y la amplificación, y soldé la cinta a las almohadillas exteriores de la placa para fortalecer la estructura. Luego estañé el extremo del cable, y conecté los cables esmaltados a los pines de la tarjeta, luego inserté un LED con una resistencia en el cable de alimentación para poder ver cuando la tarjeta estaba encendida.



Análisis de bus



Habiendo difundido todos los sitios de prueba para contactos de prueba, pude comenzar a comprender de qué son responsables estos contactos en términos de acceso a la NAND Flash ubicada dentro de la tarjeta.







En general, el diseño de los pines era el mismo que el de la mayoría de las tarjetas microSD SanDisk.



Para analizar las señales de todos los pines, utilicé un analizador lógico DSLogic Plus... El pinout para la transferencia de datos ya se conocía y ya se había realizado el trabajo más duro (bus de datos, control, direcciones, comandos, protección contra escritura, estado ocupado / libre). Sin embargo, el papel de no cada uno de los contactos fue inmediatamente obvio: el pinout que encontré incluía el número mínimo de buses que permitían trabajar con NAND Flash, con la excepción del bus de control, que pone el controlador en modo de reinicio y lo desconecta del control del bus de datos (esto será importante más adelante) ...



Al escuchar el bus de datos a la velocidad máxima disponible para DSLogic (y usando el búfer de 32 MB disponible), pude compilar una lista clara de comandos enviados al NAND Flash desde el controlador en el momento de la inicialización.



Conceptos básicos de escucha de bus y E / S NAND (escritura de comandos, direcciones, lectura de datos)



Busqué específicamente dos comandos: RESET (0xFF) y READ ID (0x90). Al buscar secuencias de comandos, es importante saber cuándo y cómo cambian los buses de datos y control. Intentaré explicarte todo paso a paso. Si está interesado, le recomiendo el manual de Micron , que describe los conceptos básicos de NAND Flash y brinda mucha más información sobre los principios de su funcionamiento.





Seguimiento de comandos RESET de 128 GB de alta resistencia SanDisk con analizador lógico. La línea de puntos marca la aparición de comandos de escritura y reinicio.





SanDisk High Endurance 128GB RESET Command Tracking con Logic Analyzer. La línea de puntos marca la aparición de comandos de lectura / escritura.



Cuando el comando RESET se envía al flash NAND, el bus / CE (Chip Select, Active Low) se baja primero. Entonces se levanta el bus CLE (Command Latch Enable); el bus de datos se establece en su valor programado 0xFF (en binario); luego, el bus / WE (Write Enable, Active Low) pasa de alto a bajo voltaje y luego vuelve a alto (los datos del bus de datos se transfieren al chip cuando el bus / WE pasa de bajo voltaje a alto, el llamado borde de señal "); el autobús CLE retrocede, volviendo a la normalidad. El chip flash luego tira del bus R / B (Ready / Busy Status) hacia abajo para indicar que está ocupado con un reinicio, y cuando termina, lleva el bus de regreso al nivel superior.



El comando READ ID funciona de manera similar, excepto que después de escribir el comando 0x90 (1001 0000) en el bus de datos, saca el bus ALE (Address Latch Enable), no CLE, y escribe 0x00 (todos ceros binarios), lo que da como resultado / NOSOTROS al estado inferior. El chip transfiere la NAND Flash ID escrita en él al registro de lectura interno, y los datos se leen desde el dispositivo en cada borde del bus / RE (habilitación de lectura, activo bajo); para la mayoría de los dispositivos, esto es de 4 a 8 bytes de datos.



ID de Flash NAND



Cada dispositivo NAND Flash tiene su propio (en su mayor parte) identificador único que lo relaciona con un fabricante específico y otros datos funcionales específicos del fabricante. En otras palabras, solo el ID de fabricante asignado por la asociación de tecnología JEDEC está bien definido .



El primer byte indica el fabricante del chip, y el resto (de 2 a 6) define las características del dispositivo, todas ellas determinadas por el propio fabricante. La mayoría de los fabricantes de NAND son muy reacios a publicar especificaciones de dispositivos, y SanDisk (y por extensión Toshiba / Kioxia) es muy estricto con estos datos, con la excepción de las hojas de datos de Toshiba ligeramente desactualizadas filtradas en línea. Dado que estas empresas comparten la capacidad de fabricación, se puede hacer una suposición fundamentada de que las estructuras de datos en los datos definidos por el fabricante se pueden comparar entre sí.



En cuanto a la tarjeta SanDisk High Endurance de 128 GB, utiliza NAND Flash ID de 0x45 48 9A B3 7E 72 0D 0E. Algunos de estos números se pueden comparar con las especificaciones de Toshiba :



Byte (hexadecimal)
45

: SanDisk

48

I/O : 1.8 volts ( )

: 128 ( )

9A

NAND: TLC (Triple-Level Cell / 3 )

/CE: 4 ( 4 32 )

B3

: 12 (768 )

: 16 384 / 16

7E

/CE: 8 (2 )

72

:

: BiCS3 3D NAND

0D

( )

0E

( )





Aunque no todos los valores de bytes se pueden determinar sin ambigüedades, pude determinar que las tarjetas SanDisk High Endurance usan BiCS3 3D TLC NAND Flash ; al menos esto es 3D NAND, que supera significativamente la NAND plana tradicional en términos de confiabilidad. Desafortunadamente, esta información por sí sola no puede decir si el controlador está aprovechando el mecanismo de almacenamiento en caché SLC para las operaciones de escritura.



La geometría del proceso de fabricación del chip se determina basándose en los primeros cuatro bytes de flash ID y su comparación con la línea del archivo de configuración de herramientas de Silicon Motion para el SM3271 controlador flash USB y SM2258XT controladorSSD sin DRAM. Estas herramientas dan supuestos SKU de chips SDTNAIAMA-256G y SDUNBIEMM-32G respectivamente, pero me parece que esto no corresponde a la configuración de la memoria flash en esta tarjeta.



Control externo



Quería asegurarme de que estaba obteniendo la ID correcta del NAND Flash, así que conecté una placa de depuración MSP430FR2433 de Texas Instruments y escribí el código más simple enviando los comandos RESET y READ ID que necesitaba y tratando de extraer datos adicionales en paralelo de los parámetros ocultos del chip de página de parámetros JEDEC.



El primer obstáculo que encontré en mi camino fue que el MSP430 se reiniciaba cada vez que intentaba enviar un comando RESET, lo que indicaba que la fuente de alimentación limitada de la placa MSP430 no podía hacer frente a esta corriente. Esto puede suceder cuando " la contención del autobús"cuando dos dispositivos están peleando entre sí, tratando de aplicar simultáneamente alto y bajo voltaje a un determinado bus digital. No estaba seguro de entender lo que estaba sucediendo, ya que no hay información gratuita sobre cómo apagar el controlador de tarjeta integrado. era (y debido a esto "libera" el bus NAND y permite que otro dispositivo tome el control de él).



Descubrí que la almohadilla de prueba A1 (ver diagrama) es el bus de reinicio del controlador, y si mantiene su voltaje en la posición inferior, el controlador libera por completo el control sobre el bus NAND Flash. Después de eso, mi código del microcontrolador pudo leer la ID de Flash correctamente y sin obstáculos.





Leyendo la ID de Flash de la tarjeta



La página de configuración de JEDEC ... ¡o al menos lo que SanDisk ha hecho con ella!



Si está disponible, la página de parámetros de JEDEC contiene características detalladas del chip Flash, mucho más detalladas que el NAND Flash ID, y, además, más estandarizado. Sin embargo, resultó que SanDisk decidió ignorar el estándar y usar el suyo. Por lo general, la página comienza con la cadena ASCII "JEDEC", sin embargo, encontré una cadena duplicada "SNDK" ( nombre de la empresa en el intercambio ) y otros datos que no cumplían con nada de la especificación JEDEC. Bueno, vale la pena intentarlo.



Recopilé datos usando el mismo boceto de Arduino que mostré anteriormente y recibí 1536 bytes de datos. Escribí un pequeño programa en Ideone para convertir los primeros 512 bytes en un volcado HEX ordenado:



Offset 00:01:02:03:04:05:06:07:08:09:0A:0B:0C:0D:0E:0F 0123456789ABCDEF

------ --+--+--+--+--+--+--+--+--+--+--+--+--+--+--+-- ----------------

0x0000 53 4E 44 4B 53 4E 44 4B 53 4E 44 4B 53 4E 44 4B SNDKSNDKSNDKSNDK

0x0010 53 4E 44 4B 53 4E 44 4B 53 4E 44 4B 53 4E 44 4B SNDKSNDKSNDKSNDK

0x0020 08 08 00 08 06 20 00 02 01 48 9A B3 00 05 08 41 ..... ...H.....A

0x0030 48 63 6A 08 08 00 08 06 20 00 02 01 48 9A B3 00 Hcj..... ...H...

0x0040 05 08 41 48 63 6A 08 08 00 08 06 20 00 02 01 48 ..AHcj..... ...H

0x0050 9A B3 00 05 08 41 48 63 6A 08 08 00 08 06 20 00 .....AHcj..... .

0x0060 02 01 48 9A B3 00 05 08 41 48 63 6A 08 08 00 08 ..H.....AHcj....

0x0070 06 20 00 02 01 48 9A B3 00 05 08 41 48 63 6A 08 . ...H.....AHcj.

0x0080 08 00 08 06 20 00 02 01 48 9A B3 00 05 08 41 48 .... ...H.....AH

0x0090 63 6A 08 08 00 08 06 20 00 02 01 48 9A B3 00 05 cj..... ...H....

0x00A0 08 41 48 63 6A 08 08 00 08 06 20 00 02 01 48 9A .AHcj..... ...H.

0x00B0 B3 00 05 08 41 48 63 6A 08 08 00 08 06 20 00 02 ....AHcj..... ..

0x00C0 01 48 9A B3 00 05 08 41 48 63 6A 08 08 00 08 06 .H.....AHcj.....

0x00D0 20 00 02 01 48 9A B3 00 05 08 41 48 63 6A 08 08 ...H.....AHcj..

0x00E0 00 08 06 20 00 02 01 48 9A B3 00 05 08 41 48 63 ... ...H.....AHc

0x00F0 6A 08 08 00 08 06 20 00 02 01 48 9A B3 00 05 08 j..... ...H.....

0x0100 41 48 63 6A 08 08 00 08 06 20 00 02 01 48 9A B3 AHcj..... ...H..

0x0110 00 05 08 41 48 63 6A 08 08 00 08 06 20 00 02 01 ...AHcj..... ...

0x0120 48 9A B3 00 05 08 41 48 63 6A 08 08 00 08 06 20 H.....AHcj.....

0x0130 00 02 01 48 9A B3 00 05 08 41 48 63 6A 08 08 00 ...H.....AHcj...

0x0140 08 06 20 00 02 01 48 9A B3 00 05 08 41 48 63 6A .. ...H.....AHcj

0x0150 08 08 00 08 06 20 00 02 01 48 9A B3 00 05 08 41 ..... ...H.....A

0x0160 48 63 6A 08 08 00 08 06 20 00 02 01 48 9A B3 00 Hcj..... ...H...

0x0170 05 08 41 48 63 6A 08 08 00 08 06 20 00 02 01 48 ..AHcj..... ...H

0x0180 9A B3 00 05 08 41 48 63 6A 08 08 00 08 06 20 00 .....AHcj..... .

0x0190 02 01 48 9A B3 00 05 08 41 48 63 6A 08 08 00 08 ..H.....AHcj....

0x01A0 06 20 00 02 01 48 9A B3 00 05 08 41 48 63 6A 08 . ...H.....AHcj.

0x01B0 08 00 08 06 20 00 02 01 48 9A B3 00 05 08 41 48 .... ...H.....AH

0x01C0 63 6A 08 08 00 08 06 20 00 02 01 48 9A B3 00 05 cj..... ...H....

0x01D0 08 41 48 63 6A 08 08 00 08 06 20 00 02 01 48 9A .AHcj..... ...H.

0x01E0 B3 00 05 08 41 48 63 6A 08 08 00 08 06 20 00 02 ....AHcj..... ..

0x01F0 01 48 9A B3 00 05 08 41 48 63 6A 08 08 00 08 06 .H.....AHcj.....




Un análisis adicional con el analizador DSLogic mostró que el controlador necesita una página de parámetros de 4128 pb (4 KB + 32 pb) llena con los mismos datos repetidos que se muestran arriba.



Restablecer problemas



Al examinar los datos del analizador lógico, descubrí que el controlador envía el comando READ ID dos veces, pero la primera vez sin reiniciar el Flash (¡lo que generalmente debe hacerse inmediatamente después de aplicar energía al chip!). Los datos devueltos por el chip resultan, por decirlo suavemente, extraños.



Byte (hexadecimal) Descripción
98

Fabricante: Toshiba

00

Voltaje de E / S: desconocido (sin datos)

Capacidad del dispositivo: desconocido (sin datos)

90

Tipo NAND: SLC (celda de un solo nivel / 1 bit por celda)

Chips de flash / CE: 1

93

Tamaño del bloque: 4 MB excluyendo el área libre

Tamaño de página : 16,384 bytes / 16 kb excluyendo el área libre

76

Matriz / CE: 2

72

Tipo de interfaz: asincrónica

Geometría de proceso: plano de 70 nm





Esto me confundió al principio, porque estaba tratando de obtener la identificación analizando solo la lógica. Pero después de hablar con alguien que tiene mucha experiencia en la recuperación de datos de NAND Flash, aprendí que esta es la norma para los dispositivos de SanDisk. Son muy flexibles con respecto a los comandos especiales y las estructuras de datos. Si cree en el cuarto byte, entonces el tamaño del bloque es de 4 MB, lo que parece plausible para un chip Flash moderno. El resto de la información no tiene sentido para mí, excepto que el primer byte dice que el fabricante del chip era Toshiba.



Conclusión



Fui demasiado lejos en mi intento de obtener una respuesta a la simple pregunta de qué tipo de chips usaba SanDisk en su tarjeta a largo plazo. Parecería que podrían hablar con orgullo sobre el uso de la tecnología 3D NAND para una mayor confiabilidad y un funcionamiento a largo plazo, ¡pero no!



Archivos



Para los interesados, publico los datos que intercepté de la tarjeta después de encenderla. También publico un boceto aproximado para Arduino, lo que le permite leer manualmente la ID NAND y la página de parámetros:




All Articles