mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 & SD-Karte: Beim Lesen immer 0x00


Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich hab' mein Programm nun so weit, dass ich mehr oder weniger mit der
SD-Karte plaudern kann. Initialisierung funzt, SET_BLOCKLEN funzt, CID
und CSD lesen geht auch. Allerdings bereitet mir das Lesen der
eigentlichen Daten Probleme. Das Startbyte (0xFE) bekomme ich, aber
danach kommen nur noch Nullbytes und zwar genau so viele, wie der Block
eben lang ist. Als Blocklänge habe ich 128 Bytes eingestellt, es
funktioniert aber auch mit 512 (Default-Einstellung) nicht. Die Karte
ist mit FAT32 formatiert, ob mit oder ohne Dateien, immer nur
Nullbytes. An Adressen hab' ich bereits alle Sektoren (128 Bytes) bis
ca. 50 probiert. Irgendwo da drin müsste doch wohl der Inhalt von der
FAT liegen. Ausprobiert hab' ich eine 512MB-Karte von SanDisk und eine
128er von Apacer, bei beiden das gleiche Ergebnis.
Kennt das jemand und/oder woran kann das liegen, bzw. was muss man tun,
damit's funktioniert?

Die betreffenden zwei Funktionen sehen so aus:
U08 SD_Read_Block(U08 *CMD, U08 *Buffer, U16 Bytes)
{
    if (SD_Write_Command(CMD) != 0) {
        SD_Disable();
        return CMD[0];
    }

    //Wait for Startbyte (0xFE)
    U16 Timeout = 0;
    while (SD_Read_Byte() != 0xFE) {
        if (Timeout++ > 1000) {
            SD_Disable();
            return CMD[0];
        }
    }

    //Read the block
    for (U16 i = 0; i < Bytes; i++) {
        *Buffer++ = SD_Read_Byte();
    }

    //Discard CRC
    SD_Read_Byte();
    SD_Read_Byte();

    SD_Disable();

    return 0;
}

U08 SD_Read_Sector(U32 Address, U08 *Buffer)
{
    U08 CMD[] = {0x51, 0x00, 0x00, 0x00, 0x00, 0xFF};

    Address <<= 7;  //Address = Address * 128

    CMD[1] = (Address & 0xFF000000) >> 24;
    CMD[2] = (Address & 0x00FF0000) >> 16;
    CMD[3] = (Address & 0x0000FF00) >> 8;

    return SD_Read_Block(CMD, Buffer, 128);
}

Danke schonmal im Voraus für alle (konstruktiven) Antworten!

Autor: Philipp Burch (philipp_burch)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt wird's noch eigenartiger: Das Schreiben auf die Karte
funktioniert! Zumindest mehr oder weniger. Nachdem ich mit dem
Controller mal den ganzen ersten Sektor mit 0xFF überschrieben habe
sieht das so aus wie im Anhang. Beim Lesen gibt's jetzt beim jeweils
ersten Command einen "Illegal Command" (0x04) und beim zweiten Mal
funktionierts eigentlich, nur dass wiederum nur Nullbytes gelesen
werden...
Kann mir da jemand helfen? Langsam aber sicher glaube ich, dass mich
die Karten bisschen verarschen wollen...

Den Code habe ich übrigens mehr oder weniger von Ulrich Radigs Listing
übernommen (Einfach auf den MSP430 umgeschrieben).

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun wird's erst recht seltsam. Ich bekomme zwar beim Lesen teilweise
was anderes als 0x00, aber nie das das da drinsteht, geschweige denn
das, was ich gerade davor draufgeschrieben hatte...
Kennt denn irgendjemand dieses Phänomen, dass nicht das gelesen wird,
was da eigentlich drin ist?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.