MSP430 & SD-Karte: Beim Lesen immer 0x00

OP #401860
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!
OP #401861
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).
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren