Reverse Engineering und Analyse der SanDisk High Endurance microSDXC-Karte

Für diejenigen, die zu faul zum Lesen sind: SanDisk High Endurance-Karten verwenden den SanDisk / Toshiba 3D TLC- Flash-Speicher . Ich habe viel länger gebraucht, als es hätte sein sollen (und das alles wegen SanDisk!), Um dies zu installieren.



Zuvor habe ich mir SanDisk microSD-Karten für schreibintensive Anwendungen wie Dash-Kameras angesehen. Dann habe ich die Ergebnisse der Geschwindigkeitstests studiert und darüber nachgedacht, welche Art von NAND-Flash in der Karte verwendet wird. SanDisk veröffentlicht keine detaillierten Beschreibungen der Interna der Karten, daher hatte ich keine andere Wahl, als die Karte selbst zurückzuentwickeln.



Technischer Support, der fehlgeschlagen ist



In der Hoffnung, Informationen zu sammeln, schickte ich eine E-Mail an den SanDisk-Support und fragte, welche Art von NAND-Flash sie in ihrer High Endurance-Linie verwenden, sowie Ausdauer-Metriken wie P / E-Zyklen (Programm / Löschen) und Gesamt die Anzahl der geschriebenen Terabyte (TBW). Leider konnten die Mitarbeiter des SanDisk-Supports meine Fragen nicht zufriedenstellend beantworten, da sie keine Informationen liefern, die nicht in den veröffentlichten Spezifikationen enthalten sind. Mir wurde gesagt, dass alle ihre Karten MLC Flash verwenden, was richtig ist, wenn Sie TLC Flash 3-Bit "MLC" nennen (wie Samsung).



Sehr geehrter Jason,



vielen Dank, dass Sie sich an den SanDisk Global Customer Support gewandt haben. Wir freuen uns, dass Sie Mitglied unserer SanDisk-Familie sind.



Ich verstehe, dass Sie mehr über unsere SanDisk High Endurance-Videoüberwachungskarte erfahren möchten. Lassen Sie sich darüber informieren, dass alle unsere Speicherkarten die Multi-Level-Cell- Flash-Technologie verwenden . Die Anzahl der Flash-Lese- / Schreibzyklen wird jedoch nicht veröffentlicht oder dokumentiert. Es werden nur Lese- und Schreibgeschwindigkeiten veröffentlicht, nämlich 100 MB / s und 40 MB / s. Die 64-GB-Karte kann Full-HD-Videos für bis zu 10.000 Stunden aufnehmen. Details finden Sie hier.



SANDISK HIGH ENDURANCE VIDEOÜBERWACHUNG microSD CARD



Grüße, ...


Ich werde ihnen eine Medaille mit den Worten "du hast es versucht" geben.



Anatomie einer SD-Karte



Die microSD-Karte scheint ein monolithisches Gerät zu sein. Diese Karten bestehen jedoch aus vielen verschiedenen Chips, von denen jeder eine andere Rolle spielt. Die einfachste SD-Karte verfügt über einen Controller, der die NAND-Flash-Chips steuert und mit dem Host (PC, Kamera usw.) sowie mit dem NAND-Flash selbst (bestehend aus einem oder mehreren Flash-Kristallen) kommuniziert. Der Blog von Bunnie Studios enthält einen ausgezeichneten Artikel über den Bau von SD-Karten, einschließlich Beschreibungen von Fälschungen und deren Herstellung.





Blockdiagramm einer typischen SD-Karte



MicroSD-Karten sind häufig (aber nicht immer) Teststandorte, die zum Programmieren und Testen von NAND-Flash in der Produktion verwendet werden. Sie können zur Wiederherstellung von Daten verwendet werdenoder Wiederverwendung von microSD-Karten mit einem defekten Controller oder einer defekten Firmware. Sie ermöglichen es Ihnen, eine Karte in einen einfachen NAND-Flash zu verwandeln - darüber können Sie im Blog von Gao Louis lesen . Beachten Sie, dass es für solche Teststandorte keinen Standard gibt (auch nicht innerhalb desselben Herstellers). Einige Hersteller, insbesondere SanDisk, verfügen jedoch über Muster, die das Reverse Engineering erleichtern.



Hockender Controller, lauernde Testpads



MicroSD-Karten fallen in die Kategorie der "monolithischen" Flash-Geräte, da sie einen Controller und NAND-Flash in einem einzigen nicht trennbaren Paket kombinieren. Viele Hersteller bringen den Flash-Datenbus an versteckte (und praktisch keine Dokumentation) Teststandorte. Andere Hersteller von Speicherkarten und USB-Sticks stellen mit ihrer Hilfe kostengünstige Laufwerke aus fehlerhaften Teilen her. Der Controller kann einfach ausgeschaltet werden und der Blitz kann wie ein normaler Chip verwendet werden.



Bei SanDisk-Karten sind die Pinbelegungsinformationen für ihre Testpads äußerst knapp. Jede Generation hat ihre eigenen Unterschiede, aber das Layout bleibt weitgehend unverändert. Die Unterschiede können schwerwiegend sein, da die Stifte für Strom und Masse manchmal vertauscht werden (und wenn die Polarität falsch ist, stirbt der Chip sofort ab!).



Meine Karte (sowie viele Karten des Unternehmens aus einer teuren Linie - nicht Ultra) haben Testpads, die nicht mit Lack bedeckt sind, sondern mit einer Art Epoxidharz, das im Siebdruck mit einer lasergeschnittenen Seriennummer hergestellt wurde. Ich habe es aufgewärmt, abgekratzt und es geschafft, diese sehr zerbrechliche Beschichtung von den Testpads zu entfernen. Dabei habe ich auch die Seriennummer entfernt - wahrscheinlich ist dies so etwas wie ein Garantiesiegel.





Epoxy-Testpads





Sichtbare



Testpads Nachdem ich Spuren der Epoxybeschichtung entfernt hatte, stieß ich auf ein bekanntes Layout von Testpads, zu denen im Folgenden einige zusätzliche hinzugefügt wurden.



Erstellen eines Schnittstellenmoduls



Das Konzept des Schnittstellenmoduls ist ziemlich einfach. Für jedes der Testpads ziehen wir ein Kabel heraus, das zu einem größeren Pad führt, um den Zugriff zu erleichtern, und verbinden den normalen SD-Bus mit dem SD-Anschluss, damit der Controller seine Arbeit erledigt, während wir am NAND-Flash-Bus basteln. Angesichts der geringen Größe der Teststellen und der großen Anzahl von ihnen kann sich das Ergebnis als etwas chaotisch herausstellen.





Schnittstellenmodul-Baugruppe





Schnittstellenmodul, vergrößertes Foto



Ich begann damit, die Karte mit doppelseitigem Klebeband auf das Steckbrett zu kleben. Dann verzinnte ich alle Pads und löte einen kleinen 1uF-Keramikkondensator auf die Vcc- und GND-Pads der Karte. Mit 0,1 mm emailliertem Draht (40 AWG) verband ich jedes Testpad mit dem entsprechenden Stift auf dem Steckbrett. Zusammen mit den zusätzlichen Standorten waren dies 28 winzige Drähte!



Für den SD-Anschluss habe ich ein Kabel mit einem Gerät zur Wartung von Android-Handys vom HTC " XTC 2 Clip verwendetEs funktionierte wie eine 'flexible Remote-SD-Karte' und leitete die Signale durch ein kleines Flexkabel. Ich wickelte das Kabel mit Kupferband ein, um es vor Rauschen und Verstärkung zu schützen, und löte das Band an die äußeren Pads des Steckbretts, um die Struktur zu stärken. Dann verzinnte ich das Ende des Kabels. und verband die emaillierten Drähte mit den Stiften der Karte, dann steckte ich eine LED mit einem Widerstand in das Stromkabel, damit ich sehen konnte, wann die Karte mit Strom versorgt wurde.



Busanalyse



Nachdem ich alle Teststellen für Testkontakte verteilt hatte, konnte ich verstehen, wofür diese Kontakte für den Zugriff auf den NAND-Flash auf der Karte verantwortlich sind.







Im Allgemeinen war das Pin-Layout das gleiche wie bei den meisten SanDisk microSD-Karten.



Um die Signale von allen Pins zu analysieren, habe ich einen DSLogic Plus- Logikanalysator verwendet... Die Pinbelegung für die Datenübertragung war bereits bekannt und die härteste Arbeit wurde bereits geleistet (Datenbus, Steuerung, Adressen, Befehle, Schreibschutz, Besetzt- / Freistatus). Die Rolle nicht jedes der Kontakte war jedoch sofort offensichtlich - die Pinbelegung, die ich fand, umfasste die Mindestanzahl von Bussen, die das Arbeiten mit NAND Flash ermöglichten - mit Ausnahme des Steuerbusses, der den Controller in den Rücksetzmodus versetzt und ihn von der Datenbussteuerung trennt (dies wird später wichtig sein). ...



Durch Abhören des Datenbusses mit der für DSLogic verfügbaren Höchstgeschwindigkeit (und Verwendung des verfügbaren 32-MB-Puffers) konnte ich eine übersichtliche Liste von Befehlen erstellen, die zum Zeitpunkt der Initialisierung vom Controller an den NAND-Flash gesendet wurden.



Grundlagen des Bus-Abhörens und der NAND-E / A (Schreiben von Befehlen, Adressen, Lesen von Daten)



Ich habe speziell nach zwei Befehlen gesucht: RESET (0xFF) und READ ID (0x90). Bei der Suche nach Befehlssequenzen ist es wichtig zu wissen, wann und wie sich die Daten- und Steuerbusse ändern. Ich werde versuchen, alles Schritt für Schritt zu erklären. Wenn Sie interessiert sind, empfehle ich das Handbuch von Micron , das die Grundlagen von NAND Flash beschreibt und viel mehr Informationen über die Funktionsweise von NAND Flash enthält.





SanDisk High Endurance 128 GB RESET-Befehlsverfolgung mit Logic Analyzer. Die gepunktete Linie markiert das Erscheinungsbild der Schreib- und Rücksetzbefehle.





SanDisk High Endurance 128 GB RESET-Befehlsverfolgung mit Logic Analyzer. Die gepunktete Linie markiert das Auftreten von Lese- / Schreibbefehlen.



Wenn der Befehl RESET an den NAND-Flash gesendet wird, wird zuerst der Bus / CE (Chip Select, Active Low) heruntergezogen. Dann wird der CLE-Bus (Command Latch Enable) hochgezogen; der Datenbus wird auf seinen geplanten Wert 0xFF (binär) gesetzt; dann geht der / WE-Bus (Write Enable, Active Low) von Hoch auf Niederspannung und kehrt dann auf Hoch zurück (Daten vom Datenbus werden auf den Chip übertragen, wenn der / WE-Bus von Niederspannung auf Hoch geht, die sogenannte Signalflanke "); Der CLE-Bus wird wieder nach unten gezogen und kehrt zum Normalzustand zurück. Der Flash-Chip zieht dann den R / B-Bus (Ready / Busy Status) nach unten, um anzuzeigen, dass er mit einem Reset beschäftigt ist, und zieht den Bus nach Abschluss zurück auf die oberste Ebene.



Der Befehl READ ID funktioniert auf ähnliche Weise, außer dass nach dem Schreiben des Befehls 0x90 (1001 0000) auf den Datenbus der ALE-Bus (Address Latch Enable) und nicht CLE aufgerufen wird und 0x00 (alle binären Nullen) geschrieben wird, was zu / führt WIR in den unteren Zustand. Der Chip überträgt die darauf geschriebene NAND-Flash-ID in das interne Leseregister, und Daten werden von dem Gerät an jeder Kante des Busses / RE gelesen (Read Enable, Active Low). Für die meisten Geräte sind dies 4 bis 8 Datenbytes.



NAND Flash ID



Jedes NAND-Flash-Gerät verfügt über eine eigene (größtenteils) eindeutige Kennung, die es auf einen bestimmten Hersteller und andere herstellerspezifische Funktionsdaten bezieht. Mit anderen Worten, nur die vom JEDEC- Technologieverband zugewiesene Hersteller-ID ist genau definiert .



Das erste Byte gibt den Hersteller des Chips an, und der Rest (von 2 bis 6) definiert die Eigenschaften des Geräts - alle werden vom Hersteller selbst festgelegt. Die meisten NAND-Hersteller zögern sehr, Spezifikationen für Geräte zu veröffentlichen, und SanDisk (und damit Toshiba / Kioxia) wird von diesen Daten sehr streng kontrolliert, mit Ausnahme von leicht veralteten Toshiba-Datenblättern, die online durchgesickert sind. Da sich diese Unternehmen die Produktionskapazität teilen, kann eine fundierte Vermutung angestellt werden, dass die Datenstrukturen in herstellerdefinierten Daten miteinander abgeglichen werden können.



Die SanDisk High Endurance-Karte mit 128 GB verwendet die NAND-Flash-ID 0x45 48 9A B3 7E 72 0D 0E. Einige dieser Zahlen können mit der Toshiba-Spezifikation verglichen werden :



Byte (hex)
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

( )





Obwohl nicht alle Bytewerte eindeutig bestimmt werden können, konnte ich feststellen, dass SanDisk High Endurance-Karten BiCS3 3D-TLC-NAND-Flash verwenden - zumindest ist dies 3D-NAND, das das herkömmliche flache NAND in Bezug auf Zuverlässigkeit deutlich übertrifft. Leider können diese Informationen allein nicht sagen, ob der Controller den SLC-Caching-Mechanismus für Schreibvorgänge nutzt.



Die Geometrie des Herstellungsprozesses des Chips wird basierend auf den ersten vier Bytes der Flash-ID und deren Vergleich mit der Zeile der Konfigurationsdatei der Tools von Silicon Motion für den SM3271 USB-Flash-Controller und den SM2258XT- Controller bestimmtDRAM-freie SSD. Diese Tools geben angebliche SKUs von SDTNAIAMA-256G- bzw. SDUNBIEMM-32G-Chips an, aber es scheint mir, dass dies nicht der Flash-Speicherkonfiguration auf dieser Karte entspricht.



Externe Kontrolle



Ich wollte sicherstellen, dass ich die richtige ID vom NAND-Flash erhalte , also steckte ich die Debug- Karte MSP430FR2433 von Texas Instruments ein und schrieb den einfachsten Code, der die erforderlichen Befehle RESET und READ ID sendet und versucht, zusätzliche Daten parallel aus den versteckten Parametern des JEDEC-Parameterseiten-Chips zu extrahieren.



Das erste Hindernis, das mir im Weg stand, war, dass der MSP430 jedes Mal zurückgesetzt wurde, wenn ich versuchte, einen RESET-Befehl zu senden, was darauf hinwies, dass die begrenzte Stromversorgung der MSP430-Karte diesen Strom nicht bewältigen konnte. Dies kann passieren, wenn " Buskonflikt"Wenn zwei Geräte miteinander kämpfen und versuchen, gleichzeitig Hoch- und Niederspannung an einen bestimmten digitalen Bus anzulegen. Ich war mir nicht sicher, ob ich verstanden habe, was passiert, da es keine kostenlosen Informationen zum Ausschalten des integrierten Kartencontrollers gibt. war (und aus diesem Grund "gibt" er den NAND-Bus frei und lässt ein anderes Gerät die Kontrolle darüber übernehmen.)



Ich fand heraus, dass das A1-Testpad (siehe Abbildung) der Rücksetzbus des Controllers ist, und wenn Sie seine Spannung in der unteren Position halten, Der Controller gibt die Kontrolle über den NAND-Flash-Bus vollständig frei. Danach konnte mein Code vom Mikrocontroller die Flash-ID korrekt und ungehindert lesen.





Lesen der Flash-ID von der Karte



Die JEDEC-Einstellungsseite ... oder zumindest, was SanDisk damit gemacht hat!



Falls verfügbar, enthält die JEDEC-Parameterseite detaillierte Eigenschaften des Flash-Chips - viel detaillierter als die NAND-Flash-ID - und darüber hinaus standardisierter. Es stellte sich jedoch heraus, dass SanDisk den Standard ignorierte und seinen eigenen verwendete! Normalerweise beginnt die Seite mit der ASCII-Zeichenfolge "JEDEC", ich habe jedoch eine doppelte Zeichenfolge "SNDK" ( Firmenname an der Börse ) und andere Daten gefunden, die nicht mit der JEDEC-Spezifikation übereinstimmen! Einen Versuch wert.



Ich sammelte Daten mit derselben Arduino-Skizze, die ich zuvor gezeigt hatte, und erhielt 1536 Datenbytes. Ich habe ein kleines Programm auf Ideone geschrieben , um die ersten 512 Bytes in einen ordentlichen HEX-Dump umzuwandeln:



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.....




Eine weitere Analyse unter Verwendung des DSLogic-Analysators ergab, dass der Controller eine Parameterseite mit 4128 bp (4 KB + 32 bp) benötigt, die mit denselben sich wiederholenden Daten wie oben gezeigt gefüllt ist.



Probleme zurücksetzen



Bei der Untersuchung der Daten vom Logikanalysator stellte ich fest, dass der Controller den Befehl READ ID zweimal sendet, jedoch das erste Mal, ohne den Flash zurückzusetzen (was normalerweise unmittelbar nach dem Einschalten des Chips erfolgen muss!). Die vom Chip zurückgegebenen Daten erweisen sich, gelinde gesagt, als seltsam.



Byte (hex) Beschreibung
98

Hersteller: Toshiba

00

E / A-Spannung: unbekannt (keine Daten)

Gerätekapazität: unbekannt (keine Daten)

90

NAND-Typ: SLC (Single Level Cell / 1 Bit pro Zelle)

Flash-Chips / CE: 1

93

Blockgröße: 4 MB ohne Ersatzbereich

Seitengröße: 16.384 Byte / 16 KB ohne Ersatzbereich

76

Matrix / CE: 2

72

Schnittstellentyp: asynchron

Prozessgeometrie: 70 nm flach





Das verwirrte mich zuerst, weil ich versuchte, die ID zu erhalten, indem ich nur die Logik analysierte. Nachdem ich mit jemandem gesprochen hatte, der viel Erfahrung in der Datenwiederherstellung von NAND Flash hat, stellte ich fest, dass dies die Norm für Geräte von SanDisk ist. Sie sind sehr locker in Bezug auf spezielle Befehle und Datenstrukturen. Wenn Sie dem vierten Byte glauben, beträgt die Blockgröße 4 MB, was für einen modernen Flash-Chip plausibel erscheint. Der Rest der Informationen macht für mich keinen Sinn, außer dass das erste Byte besagt, dass der Chiphersteller Toshiba war.



Fazit



Ich bin zu weit gegangen, um eine Antwort auf die einfache Frage zu bekommen, welche Art von Chips SanDisk für seine Langzeitkarte verwendet hat. Es scheint, dass sie stolz über die Verwendung der 3D-NAND-Technologie für mehr Zuverlässigkeit und langfristigen Betrieb sprechen könnten - aber nein!



Dateien



Für Interessenten poste ich die Daten, die ich nach dem Einschalten von der Karte abgefangen habe. Ich poste auch eine grobe Skizze für Arduino, mit der Sie die NAND-ID und die Parameterseite manuell lesen können:




All Articles