SD-Karte Erase Sector CMD38

OP #1313999
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
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?
> 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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.