Auparavant, j'ai examiné les cartes microSD SanDisk pour une utilisation dans des applications gourmandes en écriture telles que les DVR. Ensuite, j'ai étudié les résultats des tests de vitesse et j'ai réfléchi au type de flash NAND utilisé dans la carte. SanDisk ne publie pas de descriptions détaillées des composants internes des cartes, je n'ai donc eu d'autre choix que de procéder moi-même à une rétro-ingénierie de la carte.
Support technique qui a échoué
Dans l'espoir de trouver des informations, j'ai envoyé un e-mail au support SanDisk demandant quel type de flash NAND ils utilisent dans leur gamme High Endurance, ainsi que des métriques d'endurance telles que le nombre de cycles P / E (Program / Erase), et en général le nombre de téraoctets écrits (TBW). Malheureusement, l'équipe d'assistance de SanDisk n'a pas été en mesure de fournir des réponses satisfaisantes à mes questions car elles ne fournissent pas d'informations non couvertes par les spécifications publiées. On m'a dit que toutes leurs cartes utilisent MLC Flash, ce qui est correct si vous appelez TLC Flash 3 bits "MLC" (comme Samsung le fait).
Cher Jason,
Merci d'avoir contacté le service client mondial de SanDisk. Nous apprécions que vous soyez membre de notre famille SanDisk.
Je crois comprendre que vous souhaitez en savoir plus sur notre carte de surveillance vidéo SanDisk High Endurance. Laissez-nous vous informer que toutes nos cartes mémoire utilisent la technologie flash à cellules multi-niveaux . Cependant, le nombre de cycles de lecture / écriture de la mémoire flash n'est ni publié ni documenté. Seules les vitesses de lecture et d'écriture sont publiées, à savoir 100 Mo / s et 40 Mo / s. La carte de 64 Go peut enregistrer des vidéos Full HD pendant jusqu'à 10 000 heures. Les détails peuvent être trouvés ici.
CARTE microSD SANDISK DE SURVEILLANCE VIDÉO HAUTE ENDURANCE
Cordialement, ...
Je vais leur donner une médaille avec les mots "vous avez essayé".
Anatomie d'une carte SD
La carte microSD peut ressembler à un appareil monolithique. Cependant, ces cartes sont constituées de nombreuses puces différentes, chacune jouant un rôle différent. La carte SD la plus simple aura un contrôleur qui contrôle les puces Flash NAND et communique avec l'hôte (PC, appareil photo, etc.), ainsi qu'avec le Flash NAND lui-même (constitué d'un ou plusieurs cristaux flash). Le blog Bunnie Studios a un excellent article sur la construction des cartes SD, y compris des descriptions de contrefaçons et de leur fabrication.
Schéma fonctionnel d'une carte SD typique Les cartes
MicroSD sont souvent (mais pas toujours) des sites de test utilisés pour la programmation et le test de NAND Flash en production. Ils peuvent être utilisés pour récupérer des données, ou réutiliser des cartes microSD avec un contrôleur ou un micrologiciel défectueux. Ils vous permettent de transformer une carte en un simple NAND Flash - vous pouvez en savoir plus sur le blog de Gao Louis. Notez qu'il n'y a pas de norme pour de tels sites de test (même au sein d'un même fabricant), cependant, certains fabricants, en particulier SanDisk, ont des modèles qui facilitent l'ingénierie inverse.
Contrôleur accroupi, tampons de test cachés
Les cartes MicroSD entrent dans la catégorie des périphériques flash «monolithiques» car elles combinent un contrôleur et une mémoire flash NAND dans un seul boîtier non séparable. De nombreux fabricants apportent le bus de données flash sur des sites de test cachés (et pratiquement sans documentation). Avec leur aide, d'autres fabricants de cartes mémoire et de clés USB fabriquent des lecteurs bon marché à partir de pièces défectueuses. Le contrôleur peut être simplement désactivé et le flash peut être utilisé comme une puce normale.
Dans le cas des cartes SanDisk, les informations sur les broches de leurs sites de test sont extrêmement rares. Chaque génération a ses propres différences, mais la disposition reste en grande partie inchangée. Les différences peuvent être fatales, car les broches d'alimentation et de masse sont parfois permutées (et si la polarité est incorrecte, la puce mourra instantanément!).
Ma carte (ainsi que de nombreuses cartes de l'entreprise d'une ligne chère - pas Ultra) ont des tampons de test non recouverts de vernis, mais avec une sorte d'époxy fabriqué à l'aide de la sérigraphie, avec un numéro de série découpé au laser. Je me suis réchauffé, gratté et réussi à retirer ce revêtement très fragile des tampons de test. Ce faisant, j'ai également supprimé le numéro de série - c'est probablement quelque chose comme un sceau de garantie.
Tampons de test époxy en
vue
Tampons de test Après avoir enlevé les traces de revêtement époxy, je suis tombé sur une disposition familière de tampons de test, à laquelle plusieurs autres ont été ajoutés ci-dessous.
Créer un module d'interface
Le concept du module d'interface est assez simple. Pour chacune des pastilles de test, nous tirons un fil menant à un pad plus grand pour un accès plus facile, et connectons le bus SD normal au connecteur SD afin que le contrôleur fasse son travail pendant que nous bricolons le bus Flash NAND. Compte tenu de la petite taille des sites de test et de leur grand nombre, le résultat peut s'avérer un peu bâclé.
Assemblage du module d'interface Module d'
interface, photo agrandie
J'ai commencé par coller la carte avec du ruban adhésif double face sur la planche à pain. Ensuite, j'ai étamé toutes les pastilles et soudé un petit condensateur céramique 1uF aux pastilles Vcc et GND de la carte. À l'aide d'un fil émaillé de 40 AWG (0,1 mm), j'ai connecté chaque tampon de test à la broche correspondante sur la planche à pain. Avec les sites supplémentaires, cela représentait 28 minuscules fils!
Pour le connecteur SD, j'ai utilisé un câble avec un appareil pour réparer les téléphones Android à partir de HTC " XTC 2 ClipCela fonctionnait comme une `` carte SD distante flexible '' et acheminait les signaux à travers un petit câble flexible.J'ai enveloppé le câble avec du ruban de cuivre pour le protéger du bruit et de l'amplification, et j'ai soudé le ruban aux coussinets extérieurs de la maquette pour renforcer la structure. Ensuite, j'ai étamé l'extrémité du câble, et connecté les fils émaillés aux broches de la carte, puis j'ai inséré une LED avec une résistance dans le fil d'alimentation afin que je puisse voir quand la carte était alimentée.
Analyse de bus
Après avoir répandu tous les sites de test pour les contacts de test, j'ai pu commencer à comprendre de quoi ces contacts sont responsables en termes d'accès au NAND Flash situé à l'intérieur de la carte.
En général, la disposition des broches était la même que celle de la plupart des cartes microSD SanDisk.
Pour analyser les signaux de toutes les broches, j'ai utilisé un analyseur logique DSLogic Plus... Le brochage pour le transfert de données était déjà connu et le travail le plus dur avait déjà été effectué (bus de données, contrôle, adresses, commandes, protection en écriture, état occupé / libre). Cependant, le rôle de chacun des contacts n'était pas immédiatement évident - le brochage que j'ai trouvé comprenait le nombre minimum de bus qui permettaient de travailler avec NAND Flash - à l'exception du bus de contrôle, qui met le contrôleur en mode de réinitialisation et le déconnecte du contrôle du bus de données (ce sera important plus tard) ...
En écoutant le bus de données à la vitesse maximale disponible pour DSLogic (et en utilisant le tampon disponible de 32 Mo), j'ai pu compiler une liste claire des commandes envoyées au NAND Flash à partir du contrôleur au moment de l'initialisation.
Bases de l'écoute du bus et des E / S NAND (commandes d'écriture, adresses, lecture de données)
J'ai spécifiquement recherché deux commandes: RESET (0xFF) et READ ID (0x90). Lorsque vous recherchez des séquences de commandes, il est important de savoir quand et comment les données et les bus de contrôle changent. Je vais essayer de tout expliquer étape par étape. Si cela vous intéresse, je vous recommande le manuel de Micron , qui décrit les bases de NAND Flash et donne beaucoup plus d'informations sur les principes de son fonctionnement.
Suivi des commandes de réinitialisation SanDisk High Endurance 128 Go avec analyseur logique. La ligne pointillée marque l'apparence des commandes d'écriture et de réinitialisation.
Suivi des commandes de réinitialisation SanDisk High Endurance 128 Go avec analyseur logique. La ligne pointillée marque l'apparence des commandes de lecture / écriture.
Lorsque la commande RESET est envoyée au NAND Flash, le bus / CE (Chip Select, Active Low) est abaissé en premier. Ensuite, le bus CLE (Command Latch Enable) est tiré vers le haut; le bus de données est mis à sa valeur programmée 0xFF (en binaire); puis le bus / WE (Write Enable, Active Low) passe de haute à basse tension, puis revient à haut (les données du bus de données sont transférées à la puce lorsque le bus / WE passe de basse tension à haute, le soi-disant front de signal "); le bus CLE est tiré vers le bas et revient à la normale. La puce flash tire ensuite le bus R / B (Ready / Busy Status) vers le bas pour indiquer qu'il est occupé avec une réinitialisation et, une fois terminé, ramène le bus au niveau supérieur.
La commande READ ID fonctionne de la même manière, sauf qu'après avoir écrit la commande 0x90 (1001 0000) sur le bus de données, elle extrait le bus ALE (Address Latch Enable), et non CLE, et écrit 0x00 (tous les zéros binaires), ce qui entraîne / NOUS à l'état inférieur. La puce transfère l'ID Flash NAND qui y est écrit dans le registre de lecture interne, et les données sont lues à partir du périphérique sur chaque bord du bus / RE (Read Enable, Active Low); pour la plupart des appareils, il s'agit de 4 à 8 octets de données.
ID Flash NAND
Chaque périphérique Flash NAND possède son propre identifiant unique (pour la plupart) qui le relie à un fabricant spécifique et à d'autres données fonctionnelles spécifiques au fabricant. En d'autres termes, seul l'identifiant du fabricant attribué par l'association technologique JEDEC est bien défini .
Le premier octet indique le fabricant de la puce et le reste (de 2 à 6) définit les caractéristiques de l'appareil - toutes sont déterminées par le fabricant lui-même. La plupart des fabricants NAND sont très réticents à publier les spécifications des appareils, et SanDisk (et par extension Toshiba / Kioxia) est très strict sur ces données, à l'exception des fiches techniques Toshiba légèrement obsolètes divulguées en ligne. Étant donné que ces entreprises partagent la capacité de fabrication, on peut supposer que les structures de données des données définies par le fabricant peuvent être comparées les unes aux autres.
Quant à la carte SanDisk High Endurance de 128 Go, elle utilise l'ID Flash NAND de 0x45 48 9A B3 7E 72 0D 0E. Certains de ces chiffres peuvent être comparés aux spécifications Toshiba :
Octet (hexadécimal) | |
---|---|
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
|
( )
|
Bien que toutes les valeurs d'octets ne puissent pas être déterminées sans ambiguïté, j'ai pu déterminer que les cartes SanDisk High Endurance utilisent BiCS3 3D TLC NAND Flash - du moins il s'agit de 3D NAND, qui dépasse largement la NAND plate traditionnelle en termes de fiabilité. Malheureusement, ces informations ne peuvent à elles seules dire si le contrôleur tire parti du mécanisme de mise en cache SLC pour les opérations d'écriture.
La géométrie du processus de fabrication de la puce est déterminée en se basant sur les quatre premiers octets d'ID flash et de leur comparaison avec la ligne du fichier de configuration des outils de Silicon Motion pour le SM3271 contrôleur flash USB et SM2258XT contrôleurSSD sans DRAM. Ces outils donnent respectivement des SKU présumés des puces SDTNAIAMA-256G et SDUNBIEMM-32G, mais il me semble que cela ne correspond pas à la configuration de la mémoire flash de cette carte.
Contrôle externe
Je voulais m'assurer que j'obtenais le bon ID du flash NAND, j'ai donc branché la carte de débogage Texas Instruments MSP430FR2433 et écrit le code le plus simple en envoyant les commandes de réinitialisation et de lecture ID nécessaires et en essayant d'extraire des données supplémentaires en parallèle à partir des paramètres cachés de la puce JEDEC Parameter Page.
Le premier obstacle que j'ai rencontré était que le MSP430 était réinitialisé à chaque fois que j'essayais d'envoyer une commande RESET, ce qui indiquait que l'alimentation limitée de la carte MSP430 ne pouvait pas supporter ce courant. Cela peut se produire lorsque " conflit de bus"lorsque deux appareils se battent l'un contre l'autre, essayant d'appliquer simultanément haute et basse tension à un certain bus numérique. Je n'étais pas sûr d'avoir compris ce qui se passait, car il n'y a pas d'informations gratuites sur la façon d'éteindre le contrôleur de carte intégré. était (et à cause de cela, il "libère" le bus NAND et permet à un autre appareil d'en prendre le contrôle.)
J'ai compris que le pad de test A1 (voir schéma) est le bus de réinitialisation du contrôleur, et si vous gardez sa tension en position inférieure le contrôleur libère complètement le contrôle sur le bus Flash NAND.Après cela, mon code du microcontrôleur a pu lire correctement et sans entrave
l'ID Flash.Lecture de l'ID Flash de la carte
La page des paramètres JEDEC ... ou du moins ce que SanDisk en a fait!
Si disponible, la page des paramètres JEDEC contient des caractéristiques détaillées de la puce Flash - beaucoup plus détaillées que le NAND Flash ID - et, de plus, plus standardisée. Il s'est avéré, cependant, que SanDisk a choisi d'ignorer la norme et d'utiliser la sienne! Habituellement, la page commence par la chaîne ASCII "JEDEC", cependant j'ai trouvé une chaîne dupliquée "SNDK" ( nom de la société sur l'échange ) et d'autres données qui ne correspondaient à rien de la spécification JEDEC! Eh bien, ça vaut le coup d'essayer.
J'ai collecté des données en utilisant le même croquis Arduino que j'ai montré plus tôt et j'ai reçu 1536 octets de données. J'ai écrit un petit programme sur Ideone pour convertir les 512 premiers octets en un vidage HEX soigné:
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.....
Une analyse plus approfondie à l'aide de l'analyseur DSLogic a montré que le contrôleur a besoin d'une page de paramètres de 4128 octets (4K + 32 octets), remplie des mêmes données répétitives que celles indiquées ci-dessus.
Réinitialiser les problèmes
En examinant les données de l'analyseur logique, j'ai trouvé que le contrôleur envoie la commande READ ID deux fois, mais la première fois sans réinitialiser le Flash (ce qui doit généralement être fait immédiatement après la mise sous tension de la puce!). Les données renvoyées par la puce se révèlent, pour le moins, étranges.
Octet (hexadécimal) | La description |
---|---|
98
|
Fabricant: Toshiba
|
00
|
Tension E / S: inconnue (pas de données)
Capacité de l'appareil: inconnue (pas de données) |
90
|
Type NAND: SLC (cellule à un niveau / 1 bit par cellule)
Puces Flash / CE: 1 |
93
|
Taille du bloc: 4 Mo hors zone de réserve
Taille de la page : 16 384 octets / 16 ko hors zone de réserve |
76
|
Matrice / CE: 2
|
72
|
Type d'interface: asynchrone
Géométrie du processus: 70 nm à plat |
Cela m'a dérouté au début, car j'essayais d'obtenir l'ID en analysant uniquement la logique. Mais après avoir discuté avec quelqu'un qui a beaucoup d'expérience dans la récupération de données à partir de NAND Flash, j'ai appris que c'était la norme pour les appareils de SanDisk. Ils sont très vagues sur les commandes spéciales et les structures de données. Si vous croyez au quatrième octet, la taille du bloc est de 4 Mo, ce qui semble plausible pour une puce Flash moderne. Le reste des informations n'a pas de sens pour moi, sauf que le premier octet dit que le fabricant de la puce était Toshiba.
Conclusion
Je suis allé trop loin dans ma tentative d'obtenir une réponse à la simple question de savoir quel type de puces SanDisk utilisait dans sa carte à long terme. Il semblerait qu'ils pourraient fièrement parler de l'utilisation de la technologie 3D NAND pour une fiabilité accrue et un fonctionnement à long terme - mais non!
Des dossiers
Pour les personnes intéressées, je poste les données que j'ai interceptées sur la carte après sa mise sous tension. Je poste également un croquis approximatif pour Arduino, vous permettant de lire manuellement l'ID NAND et la page de paramètres: