SD-Karte Erase Sector CMD38

OP #1313999
Lesenswert?

Hallo,
ich möchte gerne Sektor x bis Sektor y auf einer SD karte löschen:
1
BYTE MDD_SDSPI_Sector_Erase(DWORD sect_start,DWORD sect_end)
2
{
3
  MMC_RESPONSE response;  
4
  
5
  response = SendMMCCmd(TAG_SECTOR_START,sect_start << 9);
6
  if(response.r1._byte != 0x00)
7
    return 0;
8
  response = SendMMCCmd(TAG_SECTOR_END,sect_end << 9);
9
  if(response.r1._byte != 0x00)
10
    return 0;
11
  response = SendMMCCmd(ERASE,0x00);
12
  if(response.r1._byte != 0x00)
13
    return 0;
14

15
  return 1;  
16
}

ERASE ist CMD38 und die Antwort ist R1b. Leider ist die Antwort R1B 
immer ungleich null, was auf einen Fehler schließt, aber die Sektoren 
sind auf der Karte gelöscht.
Hat jemand auf einer SD-Karte Sektoren gelöscht, wenn ja wie?
Was mache ich falsch?

Die Funktion SendMMCCmd ist aus der Microchip library.

Vielen dank für die Hilfe.
OP #1314012
Lesenswert?

Hallo,
ich  vermute nicht da:
1
    // see if we are going to get a response
2
    if(sdmmc_cmdtable[cmd].responsetype == R1 || sdmmc_cmdtable[cmd].responsetype == R1b)
3
    {
4
        do
5
        {
6
            response.r1._byte = MDD_SDSPI_ReadMedia();
7
            timeout--;
8
        }while(response.r1._byte == MMC_FLOATING_BUS && timeout != 0);
9
    }
10
    else if(sdmmc_cmdtable[cmd].responsetype == R2)
11
    {
12
        MDD_SDSPI_ReadMedia();
13
        
14
        response.r2._byte1 = MDD_SDSPI_ReadMedia();
15
        response.r2._byte0 = MDD_SDSPI_ReadMedia();
16
    }
17

18
    if(sdmmc_cmdtable[cmd].responsetype == R1b)
19
    {
20
        response.r1._byte = 0x00;
21
        
22
        for(index =0; index < 0xFF && response.r1._byte == 0x00; index++)
23
        {
24
            timeout = 0xFFFF;
25
            
26
            do
27
            {
28
                response.r1._byte = MDD_SDSPI_ReadMedia();
29
                timeout--;
30
            }while(response.r1._byte == 0x00 && timeout != 0);

so wie ich das verstehe wartet der uc wenn es r1b ist so lange bis die 
antwort ungleich 0 ist oder?
#1314054
Lesenswert?

> so wie ich das verstehe wartet der uc wenn es r1b ist so lange bis die
> antwort ungleich 0 ist oder?
oder bis der Timeout abgelaufen ist, da keine def. Zeitfunktion 
verwendet wird müsste man mal schauen wie lang das dauert, und wie lange 
die Karte sich für ein Page-Erase Zeit lassen kann.

Sascha

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