Forum: Mikrocontroller und Digitale Elektronik NAND Flash aus MicroSD Karte auslesen


von stefan s. (stef89)


Lesenswert?

Hallo,

nachdem mir schon zum wiederholten Mal die MicroSD Karte in meinem Handy 
kaputt gegangen ist, möchte ich nun zu Lernzwecken den NAND Flash aus 
einer baugleichen Karte auslesen und im Erfolgsfall dasselbe mit meiner 
defekten Karte versuchen.
Zu diesem Zweck habe ich mir einige funktionierende baugleiche MikroSD 
Karten als Testobjekte besorgt.

Die übliche Vorgehensweise eines Datenrettungs-Labors für die 
Datenrekonstruktion aus dem NAND Flash einer SD Karte ist folgende:

1) Karte aufschleifen
2) Leiterbahnen/Vias kontaktieren
3) funktionierende Karte während des Betriebes mit Logic Analyzer 
analysieren
4) CE, WE, RE, RB, ALE, CLE und D7..D0 identifizieren
5) NAND Flash aus defekter aber baugleicher Karte entsprechend manuell 
auslesen
6) Spezielle NAND Recovery Software (z.B. flash-extractor.com) verwenden 
um Dateisystem-Inhalt von NAND-Dump zu rekonstruieren
7) FAT Dateisystem-Analyse und Datei-Extraktion

Zu den jeweiligen Prozessen gibt es sogar ein kurzes Video eines 
deutschen Datenrettungs-Labors hier: 
http://www.youtube.com/watch?v=y-jrzsaT6ls


Ich habe mittlerweile sowohl eine baugleiche wie auch eine ähnliche 
MikroSD Karte vom selben Hersteller aufgeschliffen und kontaktiert.
Über meine eigene Software-Implementation auf einem XMEGA Board kann ich 
über das SPI Interface mit den SD Karten kommunizieren und ebenso 
erfolgreich auf das FAT Filesysytem zugreifen.
Während ich das tue, habe ich mir entsprechend Schritt 4) die 
herauskontaktieren Signale mit dem Logik-Analyzer angeschaut und konnte 
bereits CE, WE, RE, RB, ALE, CLE und D7..D0 identifizieren.
Derzeit kenne ich allerdings von dem Datenbus die Reihenfolge noch 
nicht.
Ich nehme also an, dass die Reihenfolge der Bits auf dem Datenbus, so 
wie ich sie am Logik-Analyzer sehe, vertauscht ist.

Nun orientieren sich heutige NAND Flash Speicherchips an der ONFI (Open 
NAND Flash Interface) Spezifikation, insbesondere was das unterstützte 
Command-Set betrifft.
Darauf bauen ebenso die käuflichen Flash-Extraktionstools für 
Datenrettungs-Labors auf (z.B. flash-extractor.com oder 
acelaboratory.com).
Mein Ansatz war somit, dass ich die Kommunikation zwischen dem SD 
Kartencontroller und dem NAND Flash analysiere und darin, etwa beim 
initialisieren, verschiedene ONFI Kommandos sehen müsste.
Beispielsweise ist der NAND Flash nach ONFI nach dem Powerup zu 
initialisieren, was mit dem RESET (0xff) Kommando funktioniert.
Ich müsste also am Logic-Analyzer das Kommando erkennen können (alle 
Bits am Datenbus high).
Anschliessend liest der Controller vom NAND Flash 
Konfigurationsparameter aus. Dies funktioniert etwa über das Read-ID 
(0x90) Kommando bzw. später dann durch das Lesen der 
Konfigurations-Page.
Aufgrund der Daten in der Antwort auf die jeweiligen Kommandos ist es 
somit sehr einfach möglich die richtige Anordnung des Datenbus zu 
bestimmen.
Im weiteren ist es dann möglich z.B. über einen Mikrocontroller die 
jeweiligen ONFI Kommandos direkt an den NAND Flash zu schicken und somit 
den Speichereinhalt auszulesen.

Nun zum Haken an der Geschichte: Im Gegensatz zu den Ausführungen und 
Beschreibungen auf den Seiten der Flash-Recovery-Tool Hersteller handelt 
es sich in dem auf meiner MikroSD Karte vebauten NAND Flash wohl nicht 
um einen nach ONFI standardisierten NAND Flash Speicher.
Ich kann nirgends in der Kommunikation Kommandos erkennen, die auf ONFI 
hindeuten. Auch das RESET (0xff, also alle Pins des Datenbus auf high) 
kann ich nicht erkennen.
Ich kann jedoch mittels einer weiteren Implementation auf einem 
Mikrocontroller-Board die observierten Kommandos bereits direkt an den 
NAND Flash schicken und bekomme dann auch dieselbe Antwort, wie wenn das 
der karteninterne Controller machen würde. Die Kommunikation mit dem 
NAND Flash haut also hin, nur weiss ich halt noch nicht was ich da 
eigentlich kommuniziere weil ich die Kommandos nicht identifizieren kann 
;)

Nun können NAND Flash Hersteller auch ihre eigenen Kommandos verwenden, 
unterstützen aber üblicherweise trotzdem das ONFI Command-Set.
Es könnte also sein, dass ich niemals ONFI Kommandos sehe, obwohl der 
NAND Flash diese unterstützen würde.
Um dies festzustellen, habe ich beschlossen einfach mal ONFI Kommandos 
an den NAND Flash zu schicken um zu sehen was passiert.
Im Speziellen hätte ich versucht eine Antwort auf das ONFI Read-ID 
(0x90) Kommando zu erhalten.
Binär ist 0x90 ==> 10010000, es sind also 2 bits gesetzt.
Nachdem ich die Reihenfolge der Bits am Datenbus noch nicht kenne, habe 
ich mir eine Bruteforce-Loop gebaut die in jeder Iteration folgendes 
macht:

1. Reset Kommando senden (0xff) - also alle Bits am Datenbus auf high
2. Kommando mit Kombination aus 2 gesetzten Bits am Datenbus senden
3. Adressinfo senden (0x00) - also alle Bits am Datenbus auf low
4. 4 Bytes vom Datenbus lesen

Das ganze mache ich aufgrund der Mikrocontroller-Geschwindkeit etwas 
langsamer wie das der karteninterne Controller machen würde.
Entsprechend ONFI müsste das Reset Kommando immer funktionieren. Und 
nachdem ja sowieso alle Bits am Datenbus gesetzt sind, macht es auch 
nichts wenn die Reihenfolge der Bits am Datenbus nicht stimmt.
Im nächsten Schritt sende ich dann jeweils eine Byte-Kombination in der 
genau 2 Bits gesetzt sind. Unabhängig von der Bit-Reihenfolge am 
Datenbus müsste ich somit in genau einem Versuch das 0x90 Kommando 
richtig hinbekommen. Im nächsten Schritt wird die Adresse (0x00) 
geschickt. Nachdem hier alle Bits des Datenbus auf 0 gesetzt sind, ist 
auch hier die Reihenfolge egal.
Schliesslich lese ich dann 4 bytes vom Datenbus.

Wenn der verbaute NAND Flash also die ONFI Kommandos unterstützt, so 
müsste ich zumindest in einem Durchlauf der Schleife ein Ergebnis 
bekommen, das sich von dem Rest untescheidet.
Dadurch wüsste ich nun die Reihenfolge der Bits am Datenbus und könnte 
mit dem NAND Flash über die ONFI Kommandos beliebig kommunizieren.
Leider hat jedoch auch das nicht funktioniert, weshalb ich annehme, dass 
die Karte die ONFI Kommandos nicht unterstützt.


* Sind NAND Flash Bausteine, die ONFI nicht unterstützen, verbreitet ?
 (Die Karte ist eine aktuelle 16GB Karte, die definitiv lang nach
 Erstellen der ONFI Spec hergestellt wurde.)

* Kennt jemand noch andere Command-Sets die ich versuchen könnte ?
  (Die Karte ist eine SanDisk Speicherkarte, was jedoch in Bezug auf die
  Internas der Karte nicht viel heissen muss).

* Hat hier jemand Ideen/Erfahrungen/Tipps ?


Falls ich mit meinen Versuchen nicht weiterkomme, hätte ich mir auch 
schon überlegt eine baugleiche Karte aufzuätzen und am Chip nach einer 
NAND-Flash Identifikation und dem Chip-Hersteller zu suchen.
Die Infrastruktur dafür ist vorhanden, jedoch ist das ganze natürlich 
auch mit etwas Arbeit verbunden.
Mit diesen Informationen könnte ich mich dann auf Suche nach 
Datenblättern für denselben bzw. ähnliche NAND Flash-Chips machen und 
könnte dadurch herausfinden, wie mit dem internen NAND Flash zu 
kommunizieren ist.



lg,
Stef

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

stefan m. schrieb:
> nachdem mir schon zum wiederholten Mal die MicroSD Karte in meinem Handy
> kaputt gegangen ist,

wie / durch was passiert denn sowas?

von stefan s. (stef89)


Lesenswert?

Wegstaben Verbuchsler schrieb:
> stefan m. schrieb:
>> nachdem mir schon zum wiederholten Mal die MicroSD Karte in meinem Handy
>> kaputt gegangen ist,
>
> wie / durch was passiert denn sowas?

Da hab ich wirklich keine Ahnung.
Ausserhalb des Handys ist mir noch nie eine eingegangen.

von stefan s. (stef89)


Angehängte Dateien:

Lesenswert?

Hallo,

stefan m. schrieb:
> Falls ich mit meinen Versuchen nicht weiterkomme, hätte ich mir auch
> schon überlegt eine baugleiche Karte aufzuätzen und am Chip nach einer
> NAND-Flash Identifikation und dem Chip-Hersteller zu suchen.

genau das habe ich jetzt mal gemacht (siehe Bilder anbei).

Bei dem Controller handelt es sich um einen Sandisk/Phoenix Technologies 
Controller "C2RMP6" zu dem ich bis jetzt erst mal keine Informationen 
finden konnte.


Der NAND FLash ist ein Sandisk/Toshiba "EGW5 16G". Also ein 16-GBit NAND 
(2GByte). Unter [1] ist zu finden, dass dies offensichtlich dem die 
marking für einen Toshiba TC58NVG4D2H (EGW5) NAND Flash entspricht.
Hier [2] habe ich auch ein Datenblatt dazu gefunden :)

[1] http://bbs.dramx.com/forum.php?mod=viewthread&tid=73966
[2] http://wenku.baidu.com/view/7bebc32b3169a4517723a3b0.html

von stefan s. (stef89)



Lesenswert?

Und noch einer ...
Leider ist der Controller verloren gegangen :(

von Alexander S. (esko) Benutzerseite


Lesenswert?

Danke für die tollen Bilder!

von stefan s. (stef89)


Lesenswert?

Alexander Schmidt schrieb:
> Danke für die tollen Bilder!

Gerne.
Aufgrund der Hersteller-Nomenklatur und des Hersteller-Katalogs [1] 
nehme ich an, dass es sich bei dem "Toshiba EER5" um folgenden NAND 
Flash handelt:

TH58NVG5S0FTA20 (4k page size, Datenblatt [2])
TH58NVG5S2FTA20 (8k page size)


[1] 
http://www.semicon.toshiba.co.jp/docs/catalog/en/SCE0004-02_catalog.pdf
[2] 
http://media.digikey.com/pdf/Data%20Sheets/Toshiba%20PDFs/TH58NVG5S0FTA20.pdf

von stefan s. (stef89)


Angehängte Dateien:

Lesenswert?

Über ein paar Daten-Permutationsexperimente konnte ich die Reihenfolge
der Bits am Datenbus rekonstruieren.

Interessantes Detail am Rande: Ist die SD-Karte vorher ohne Strom, so
liest der karteninterne Controller als erstes die ID des NAND Flash aus
(siehe Bild).
Der "Maker Code" (0x98) ist der von Toshiba, jedoch ist der Device Code
(0x00) unüblich. Auch die Länge des IDs entspricht nicht der Länge der 
ID aus den Toshiba Datenblättern.

Die read Kommandos sehen auch anders aus.
Anstatt "0x00 <2 byte col addr> <3 byte page addr> 0x30" ist das
Kommando "0x05 <5 byte addr> 0xe0".

Bei dem Flash scheint es sich evt. um eine nicht öffentliche Sandisk
Variante zu handeln für welche ich kein Datenblatt finde.

von Zufall (Gast)


Lesenswert?

Hallo,
konntest Du deine Daten von der defekten Karte retten?Ich habe ebenfalls 
eine defekte Micro SD von meinem Handy,die von jetzt auf gleich 
Feierabend machte.Das Handy erkennt die Karte noch,beim öffnen kommt 
aber die Meldung,Karte nicht formatiert.Der PC erkennt die Karte nicht 
mehr.Ich bin dann bei meiner Suche auf fotos-wiederherstellen.de 
gestoßen.Die Meinungen über diese Firma sind doch sehr geteilt.Ich hätte 
doch gerne meine Bilder von der Karte wieder,habe von solchen Dingen 
überhaupt keine Ahnung,und weiß nicht,an wen man sich wenden könnte.Ich 
bin für jede Hilfe dankbar.

Mfg

von <( , , )> (Gast)


Lesenswert?

Vielleicht erstmal ein image der Karte machen (z.B. dd) wenn die Blöcke 
grundsätzlich noch lesbar sind und dann sowas wie recoverjpeg probieren 
wenns nur um JPEGs geht.

von Viktor (Gast)


Lesenswert?

Zur identifikation der Datenleitungen könntest du falls noch möglich 
bzw. du noch eine karte zur verfügung hast daten auf dem pc per Hex 
Editor in den chip schreiben...

hexadecimal 0x01 0x02 0x04 0x08 0x10 0x20 0x40 und 0x80

beim entsprechenden lesen der adressen wirst du dann im logik analyser 
das entsprechende bild sehen...

von Viktor (Gast)


Lesenswert?

sorry so wird das nix... hab nicht aufmerksam genug geschaut....

von stefan s. (stef89)


Lesenswert?

Hallo,

Zufall schrieb:
> Hallo,
> konntest Du deine Daten von der defekten Karte retten?Ich habe ebenfalls
> eine defekte Micro SD von meinem Handy,die von jetzt auf gleich
> Feierabend machte.Das Handy erkennt die Karte noch,beim öffnen kommt
> aber die Meldung,Karte nicht formatiert.Der PC erkennt die Karte nicht
> mehr.


bei mir war es auch dasselbe. Die Karte wird überhaupt nicht mehr 
erkannt und man kann auch nicht mehr mit ihr z.B. über SPI kommunizieren 
(vermutlich Controller defekt).

Ich konnte von einer baugleichen Karte den Speicherinhalt des NAND Flash 
erfolgreich auslesen.
Leider scheint jedoch laut NAND-Flash Recovery-SW Herstellern 
(FlashExtractor.com, etc.) bei SanDisk Speicherkarten der Inhalt des 
NAND Flash nicht nur gemixt und verxort, sondern richtig verschlüsselt 
zu sein.
Aus diesem Grund konnte ich bis jetzt keine Möglichkeit finden die 
direkt aus dem NAND Flash extrahierten Daten zu rekonstruieren.

Ich hätte somit 32GB Daten mit denen ich nichts anfangen kann :(
Da haben auch Datenrettungs-Labors keine Chance mehr ...

von Zufall (Gast)


Lesenswert?

Na das macht mir ja Hoffnung :-(
Danke für die Rückmeldung.

von als gast (Gast)


Lesenswert?

Ich habe hier ein USB Stick, der inter eine micro SD als Speicher hat, 
die SD-Karte ist dort auch an den freigekratzten Pins (nicht die 
Steckerleiste) kontaktiert. Zu dem Controler konnte ich nichts finden, 
habe aber auch nicht lange gesucht. Würde sowas nützen?
PS: es ist ein Fake USB Stick der mit 64Gb verkauft wird obwohl er 
intern nur 2Gb hat.

von Alexander S. (esko) Benutzerseite


Lesenswert?

als gast schrieb:
> PS: es ist ein Fake USB Stick der mit 64Gb verkauft wird obwohl er
> intern nur 2Gb hat.

Wenn du 3 GB auf dem Stick gespeichert hast, dann sind davon 1 GB 
verloren. Da hilft gar nichts dagegen.
Falls das nicht der Fall ist, solltest du dein Problem mal genauer 
beschreiben.

von als gast (Gast)


Lesenswert?

Hallo,
nein kein Problem aber vieleicht die Lösung. Mein Stick ist einfach nur 
Müll, es sind keine Daten drauf und die SD Karte habe ich abgelötet. 
Bilder vergleichbarer Sticks gibt es hier: 
http://de.reclabox.com/beschwerde/52801-groupon-berlin-gold-bar-usb-stick-von-beauty-systems-groupon-ein-fakestick

Meine Idee war, dass es vieleicht mit diesen Stick möglich ist SD Karten 
auszulesen. Der Unterschied zu üblichen SD Lesern liegt hier darin, das 
dort die Pins auf der SD Karte vom Lack befreit sind und wie BGAs 
kontaktiert sind.
Deshalb dachte ich die SD-Karte wird dort nur als Flash genutzt und 
kontaktiert. Von der vergoldeten Anschlussleiste der SD-Karte sind nur 
zwei Kontakte belegt, tippe mal auf +/-.

von Holm T. (Gast)


Lesenswert?

Ehe ich mich auf solchen Krempel einlassen würde, käme ich auf dir Idee 
mich umzusehen ob es sowas nicht fertig gibt und es gibt diese Teile zu 
Kaufen.
Ich habe einen "USB Stick" mit einber Micro-SD Fassung dran, abgesehen 
davon das das Teil extrem piepslig zu handhaben ist, funktioniert es 
einwandfrei.

http://www.smdv.de/products/229401/Platinum-Micro-Sdhc-Karte-32GB-Cl4-W-R.html

Ich beschreibe damit SDHC Karten die dann an ATXmegas werkeln..

Nein, ich bin nicht der Herstelle und auch nicht dessen Schwager..

Gruß,

Holm

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ein Micro-SD-Karten-Leser hilft hier nicht; es geht ja darum, das in der 
Micro-SD-Karte verbaute Flash auszulesen, ohne den Controller in der 
Karte zu verwenden (weil der wohl defekt ist).

von als gast (Gast)


Angehängte Dateien:

Lesenswert?

Erst mal Sorry für das Bildformat, ich bin auf Arbeit ohne Adminrechte 
und kann das Bild nicht verkleinern.
Anbei ein Bild vom Stick ohne SD-Karte, bei der Karte werden 2 Pins an 
der Steckerleiste und 21 Pins über abgeschliffene Kontakte 
angeschlossen.
Ich habe keine Ahnung ob es das ist was du brauchst, ob die Daten 
verschlüsselt werden oder was auch immer. Für mich sieht es aus wie ein 
Lesegerät für SD-Flash Speicher ohne SD Kontroller mit USB-Anschluss und 
unterstützung für Karten bis 64Gb.
Das der Stick Schrott ist, der in verbrecherischer Absicht gefertigt 
wird ist mir auch klar, vieleicht kann er hier aber sinnvoll sein.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

als gast schrieb:
> ich bin auf Arbeit ohne Adminrechte
> und kann das Bild nicht verkleinern.

Wie, da darf man mspaint.exe nicht aufrufen?

von Alexander S. (esko) Benutzerseite


Lesenswert?

als gast schrieb:
> nein kein Problem aber vieleicht die Lösung.
> ...
> Meine Idee war, dass es vieleicht mit diesen Stick möglich ist SD Karten
> auszulesen. Der Unterschied zu üblichen SD Lesern liegt hier darin, das
> dort die Pins auf der SD Karte vom Lack befreit sind und wie BGAs
> kontaktiert sind.

Jetzt verstehe ich, was du meinst. Eventuell ist es damit tatsächlich 
möglich manche Speicherchips direkt auszulesen. Ob man damit allerdings 
alle auslesen kann, wage ich zu bezweifeln, dennoch könnte dies für 
manche die Lösung sein.

Rege dich nicht über das Bildformat auf, 260 kByte sind nicht die Welt.

von stefan s. (stef89)


Lesenswert?

Unterschiedliche SD- und MicroSD- Karten haben unterschiedliche Pinouts 
für diese Testpads.
Manche haben auch überhaupt keine Testpads, die muss man erst 
aufschleifen und dann ggf. die Leiterbahnen kontaktieren.

Du solltest allerdings zumindest die Karten desselben Herstellers damit 
lesen können.

Aber wie gesagt: Die Kartencontroller haben alle wear-leveling welches 
u.A. auch mixes und xor verwendet.
Das kann man durch trial and error rekonstruieren, indem man z.B. 
versucht den FAT Header zu rekonstruieren.

Bestehende Recovery SW-Lösungen können das für viele Karten- und 
Controllertypen, sind jedoch sehr teuer.
Und wenn du Pech hast, sind die Daten so verschlüsselt, dass man die 
Verschlüsselung nicht mehr so einfach wie etwa das XOR aufheben kann.

Es wäre interessant zu wissen ob man an den Controller einer baugleichen 
Karte den NAND Flash einer Karte mit defektem Controller anhängen kann.
Zuvor müsste man allerdings den NAND Flash der funktionierenden Karte 
deaktivieren indem man z.B. eine Versorgungsleitung entfernt oder die 
/CE Leitung auf high zieht.

* Hat das schon mal jemand gemacht ?

Wenn man Glück hat geht das evt. sogar auf der Platine, indem man die 
jeweilige Leiterbahn durchkratzt und neu verkabelt.
Wenn man Pech hat, sind Controller und NAND Flash direkt miteinander 
verbonded, sodass man die Bondingdrähte angreifen müsste.
Heisst also: Vorsichtig aufätzen und ggf. rebonden.

LG

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.