SD-Karten auf Protokolllevel zerschiessbar?

K

Kai Gossner

Guest
Hallo!

Ich habe vor längerer Zeit SD/MMC + Fat16 routinen für einen AtMega
programmiert (assembler quellcode unter
http://kgossner.de/anderes/blinkstroem/ ).
Da am Anfang die Kommunikation (SPI) mit der SD-Karte nicht
funktionierte habe ich einfach diverse Kommandos an die Karte
geschickt (die gute alte 0-255 Schleife) und geschaut, worauf und wie
die Karte reagiert.

Danach war die Karte defekt. Sie wird zwar von meinem Palm noch als
128MB-Sandisk-Karte erkannt, aber lässt sich weder formatieren noch
sonst irgendetwas damit anstellen. Auch das auslesen einzelner
Sektoren funktioniert bei dieser Karte nicht mehr.

Die FAT/SD funktionen funktionieren zwar mittlerweile vorbildlich
(siehe
http://wiki.blinkenarea.org/bin/view/Blinkenarea/BlinkstroemAdvanced),
aber die Karte würde ich dennoch ungern einfach wegschmeissen.

Vermutlich habe ich irgendwie die Firmware der Karte oder ähnliches
mit einem nicht dokumentierten Befehl zerschossen. Hat irgendjemand
Erfahrung mit solchen Fällen?

viele Grüße,

Kai
--
 
Hallo,

Kai Gossner schrieb:


Da am Anfang die Kommunikation (SPI) mit der SD-Karte nicht
funktionierte habe ich einfach diverse Kommandos an die Karte
geschickt (die gute alte 0-255 Schleife) und geschaut, worauf und wie
die Karte reagiert.
Ich hab festgestellt das die Initalisierung für den SPI-Modus etwas kritisch
ist, manche Karten brauchen halt doch etwas mehr Zeit als andere.
Beachte das eine Kartenart (MMC oder SDC) die CS Leitung beim Initialisieren
von SPI (80mal 0xFF DataIn oder eben entsprechende Clockpulse) disabled haben will
(funktionieren tuts dann mit beiden).
Das "Ergebnis" sollte auch abgeholt werden, kann man aber in die Tonne kloppen.
Dann kannst du Cmd0 absetzen und kannst anfangen mehrmals und mit Wartezeit auf die
korrekte Antwort zu pollen. Ähnlich läufts mit Cmd1.
Wenn das funktioniert sollte auch SPI aktiv sein.

Auf die Idee die Karte einfach mal mit allen Kommandos zuzuballern bin ich allerdings
nicht gekommen...

Danach war die Karte defekt. Sie wird zwar von meinem Palm noch als
128MB-Sandisk-Karte erkannt, aber lässt sich weder formatieren noch
sonst irgendetwas damit anstellen. Auch das auslesen einzelner
Sektoren funktioniert bei dieser Karte nicht mehr.
Auch nicht CID und CSD?
Zumindest ersteres wird wohl von Deinem Palm noch gelesen werden
können, sonst würde er nicht die Infos ausspucken können.
Ich würde zunächst das mit Deinem ľC versuchen und mit einer
Funktionierenden vergleichen, so findest Du heraus ob dort evtl.
Müll drinsteht. Besser wäre natürlich die komplette Doku des CSD,
dann kann man auch sehen wie die Karte angesprochen werden will und
ob das mit Deinem Interface und der Software übereinstimmt.

Ich würde mir auch mal den Kartenstatus mit Cmd13 auslesen, da gibts
ein ominöses "Secured Mode" vielleicht ist das gesetzt.
Es gibt auch noch ein lock/unlock, hab ich mich aber noch nicht mit
beschäftigt, ist bei Infineon z.B. auch nicht verwendet.

Vermutlich habe ich irgendwie die Firmware der Karte oder ähnliches
mit einem nicht dokumentierten Befehl zerschossen. Hat irgendjemand
Erfahrung mit solchen Fällen?
Nein nur mit Readern die keine 256MB Karten lesen und beschreiben können,
ich könnte mir aber Vorstellen das etwas mit dem SPI (auf der Karte
oder ľC-Interface oder Software) nicht stimmt und gleichzeitig
in den ersten Sektoren der Karte Müll steht, hängt halt auch davon ab
woher der Palm die Infos zum Formatieren nimmt. Braucht der eine intakte
Partitionstabelle?

An welcher Stelle hakts denn eigentlich genau, wenn Du die Karte mit
dem ľC ansprichst?

Ich schau mir mal Deinen Code an, ich hoffe der ist auch für nicht ATMeganer
lesbar.

Also, der Karteninit sieht ja ganz ok aus, ich würde vielleicht testweise
ein paar nops oder anderweitige Wartezeiten zwischen Cmd und antwortholen
einbauen. Und versuchen an die Status und sonstigen Register zu kommen,
sind ne Menge infos drin, auch über evtl. Errors der letzten Operation.


Jörg.
 
Dann kannst du Cmd0 absetzen und kannst anfangen mehrmals und mit Wartezeit auf die
korrekte Antwort zu pollen. Ähnlich läufts mit Cmd1.
Wenn das funktioniert sollte auch SPI aktiv sein.

Auf die Idee die Karte einfach mal mit allen Kommandos zuzuballern bin ich allerdings
nicht gekommen...
Ja, das war weder schlau, noch erfolgreich. Ich hatte die SPI-mode
initialisierung einfach nicht hinbekommen, hatte es schon Stunden
probiert und wußte einfach nicht mehr weiter :)
Mittlerweile klappts aber!

Auch das auslesen einzelner
Sektoren funktioniert bei dieser Karte nicht mehr.
Auch nicht CID und CSD?
Gute Frage. Die Karte lässt sich mit garnicht mehr in den SPI modus
versetzen. Eine andere (gleiche) Karte schon.

Kleines Update dazu: Ich habe die Karte gerade in eine Digicam
geschoben und die meldet: "Speicherkarte ist gesperrt". Fragt sich
nur, wie ich die "entsperrt" bekomme, wenn ich sie nicht mehr in den
SPI modus versetzen kann :-(
Mit gesperrt ist scheinbar auch nicht der Schreibschutz-schieber
gemeint, der ist in ungeschützer position.

Zumindest ersteres wird wohl von Deinem Palm noch gelesen werden
können, sonst würde er nicht die Infos ausspucken können.
Denke ich auch. Er zeigt sogar die Geräte-ID ("SD128_2005...") an.

Ich würde mir auch mal den Kartenstatus mit Cmd13 auslesen, da gibts
ein ominöses "Secured Mode" vielleicht ist das gesetzt.
Es gibt auch noch ein lock/unlock, hab ich mich aber noch nicht mit
beschäftigt, ist bei Infineon z.B. auch nicht verwendet.
Das mit dem lock/unlock klingt schon verdächtig nach meinem Problem
:)

in den ersten Sektoren der Karte Müll steht, hängt halt auch davon ab
woher der Palm die Infos zum Formatieren nimmt. Braucht der eine intakte
Partitionstabelle?
Ich weiß es nicht. Ich hatte das auslesen einzelner Sektoren mit einem
USB<->SDC Adapter und Diskeditor ausprobiert. Der Editor meldet aber
nur ständig, dass er die Sektoren nicht lesen kann.

An welcher Stelle hakts denn eigentlich genau, wenn Du die Karte mit
dem ľC ansprichst?
Ich hatte an den falschen Taktflanken gelesen und geschrieben.

vielen Dank für Deine Hilfe,

Kai
--
 
Ich spiele auch mit MMC/SD aber ein bishen anders: ins 64 macrocell PLD ein
SD reader zu bauen! ist moeglich! (no FAT). (fuer MMC reicht schon 32 aus)
Das klingt interessant. Was für ein Interface hat das ganze denn zur
Aussenwelt?

viele Grüße,

Kai
--
 
"Kai Gossner" <xyphro@t-online.de> wrote in message
news:s9qad09ncb4237dm21ubqvvqt86646shbf@4ax.com...
Hallo!

Da am Anfang die Kommunikation (SPI) mit der SD-Karte nicht
funktionierte habe ich einfach diverse Kommandos an die Karte
geschickt (die gute alte 0-255 Schleife) und geschaut, worauf und wie
die Karte reagiert.

Danach war die Karte defekt. Sie wird zwar von meinem Palm noch als
CMD56 schreibt moeglicherweise was herstellerspezifisches irgendwo, aber
doch nicht wahrscheinlich das man damit was so einfach zerstort.

Ich spiele auch mit MMC/SD aber ein bishen anders: ins 64 macrocell PLD ein
SD reader zu bauen! ist moeglich! (no FAT). (fuer MMC reicht schon 32 aus)

Antti
 
Kai Gossner schrieb:

Auch nicht CID und CSD?


Gute Frage. Die Karte lässt sich mit garnicht mehr in den SPI modus
versetzen. Eine andere (gleiche) Karte schon.
Naja, mit den "gleichen" Karten ist das so eine Sache...
Dann versuchs mal mit geändertem Timing, ich hatte sogar mal eine Karte
die in irgendeine Art Latch-Up ging und dem Host den Strom klaute,
eine Timingänderung beim Initialisieren brachte Abhilfe.
Und die Karte hats auch überlebt.
Ich kann mir das nur so erklären, das ich sie zu früh angesprochen hab,
die Teile brauchen schonmal was Zeit um intern alles geregelt zu bekommen,
wenn sie dabei in irgendeinen internen Flashbereich schreiben sollten,
könnte diese Zeit sogar mit der Anzahl Powerup-zyklen länger werden,
so wie das auch für das normale Schreiben ins Flash gilt.

Nochwas:
Ohne Dein elktr. Interface genau zu kennen,
schau Dir mal genau an ob der High-Pegel der Kartenausgangsleitung am ľC
überhaupt sicher ausreicht und ob die Clockflanken die an der Karte ankommen
ausreichende Steilheit haben.
Ersteres sollte kein Problem sein wenn Du eh deinen ľC mit 3.3V betreibst.


Kleines Update dazu: Ich habe die Karte gerade in eine Digicam
geschoben und die meldet: "Speicherkarte ist gesperrt". Fragt sich
nur, wie ich die "entsperrt" bekomme, wenn ich sie nicht mehr in den
SPI modus versetzen kann :-(
Mit gesperrt ist scheinbar auch nicht der Schreibschutz-schieber
gemeint, der ist in ungeschützer position.
Der wird eh nur mechanisch abgefragt, wenn Du also die Kontakte am Slot
in Deiner Anwendung nicht abfragst kannst Du ohne Probleme schreiben.

Das mit dem lock/unlock klingt schon verdächtig nach meinem Problem
:)
Hast Du ein Datenblatt wo das näher Beschrieben ist?
Würde mich auch interessieren.

Ich weiß es nicht. Ich hatte das auslesen einzelner Sektoren mit einem
USB<->SDC Adapter und Diskeditor ausprobiert. Der Editor meldet aber
nur ständig, dass er die Sektoren nicht lesen kann.
Nimm mal WinHex, das kann phys. ab Sektor 0 lesen (und schreiben).

An welcher Stelle hakts denn eigentlich genau, wenn Du die Karte mit
dem ľC ansprichst?

Ich hatte an den falschen Taktflanken gelesen und geschrieben.
He, he, das hat mich auchmal etwas Zeit gekostet, auf die primitivsten Fehler
kommt man manchmal etwas später.

Jörg.
 
Ich schrieb:
Nochwas:
Ohne Dein elktr. Interface genau zu kennen,
Habs mir mal angesehen, prüf mal den min. High-Pegel des AT,
und was da wirklich ankommt.
Die Dioden als 3,irgendwas Volt sind auch nicht gerade das
gelbe vom Ei, die Ausgangsspannung wird immer von der Stomaufnahme
abhängig sein, je nach Dioden.
Falls der AT irgendeinen Schmitttriggereingang hat würde
ich zumindest den benutzen, ansonsten sollte da schon ein Pegelwandler
rein. Spannungsteiler könnte für Clk zu lahm sein, ausserdem wollen die
Karten (auch für SPI) eigentlich überall leichte Pull-Ups haben.
Früher oder später bekommst Du mit dem Interface Probleme.

Also besser auch ein Pegelwandler in die andere Richtung.

Jörg.
 
"Kai Gossner" <xyphro@t-online.de> wrote in message
news:pu6cd0da8nmig3i906e18eqdg2qq3b2oem@4ax.com...
Ich spiele auch mit MMC/SD aber ein bishen anders: ins 64 macrocell PLD
ein
SD reader zu bauen! ist moeglich! (no FAT). (fuer MMC reicht schon 32
aus)

Das klingt interessant. Was für ein Interface hat das ganze denn zur
Aussenwelt?
sorry for english, its designed to be fast bootloader and configurator.
can load any SRAM FPGA with initial bitstream and then continue to load
FPGA-uCLinux as example.
after config the MMC/SD card is accessible as file system.
optionally can boot MCU systems with no ROM by loading external SRAM and
then releasing CPU reset.

I managed to get minimal MMC version into 21 macrocells!! but then to my
horror realizes the SD support is a bit more complicated and requires quite
a bit more macrocells. SD requires 16 bit register for RCA and as the stream
read is not supported some additional 10 macrocells are needed to filter out
data stream in repeat block read
so the SD version does not fit into 36 macrocells no way :(

antti
 

Welcome to EDABoard.com

Sponsor

Back
Top