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


von Philipp B. (philipp_burch)


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:
1
U08 SD_Read_Block(U08 *CMD, U08 *Buffer, U16 Bytes)
2
{
3
    if (SD_Write_Command(CMD) != 0) {
4
        SD_Disable();
5
        return CMD[0];
6
    }
7
8
    //Wait for Startbyte (0xFE)
9
    U16 Timeout = 0;
10
    while (SD_Read_Byte() != 0xFE) {
11
        if (Timeout++ > 1000) {
12
            SD_Disable();
13
            return CMD[0];
14
        }
15
    }
16
17
    //Read the block
18
    for (U16 i = 0; i < Bytes; i++) {
19
        *Buffer++ = SD_Read_Byte();
20
    }
21
22
    //Discard CRC
23
    SD_Read_Byte();
24
    SD_Read_Byte();
25
26
    SD_Disable();
27
28
    return 0;
29
}
30
31
U08 SD_Read_Sector(U32 Address, U08 *Buffer)
32
{
33
    U08 CMD[] = {0x51, 0x00, 0x00, 0x00, 0x00, 0xFF};
34
35
    Address <<= 7;  //Address = Address * 128
36
37
    CMD[1] = (Address & 0xFF000000) >> 24;
38
    CMD[2] = (Address & 0x00FF0000) >> 16;
39
    CMD[3] = (Address & 0x0000FF00) >> 8;
40
41
    return SD_Read_Block(CMD, Buffer, 128);
42
}

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

von Philipp B. (philipp_burch)


Angehängte Dateien:

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

von Philipp B. (philipp_burch)


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?

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.