Laut SD Card Beschreibung gibt die SD Karte nach einem CMD0 Befehl ein 0x01 zurück.
Also wie schon beschrieben, ein Großteil meiner SD Karten machen das auch. Der Rest gibt sowas zurück:

  • Cmd 00: 0x9F

    Cmd 00: 0xFF 0x05


oder sowas
  • Cmd 00: 0x1F

oder das noch
  • Cmd 00: 0xBF

    Cmd 00: 0xFF 0xC1


Nun dachte ich mir, mmh, es ist immer das erste Bit gesetzt. Ignorieren wir mal den Rest und sehen was passiert.
Die mmc_spi.c wie folgt geändert.
Originalversion:
Code:
 for(i=0; i<CMD0_RETRYS; i++)
  {
   //send CMD0 for RESET
   by=MMCCommand(MMC_CMD0,0);
   if(by  ==  IN_IDLE_STATE) break;
  }  

#ifdef MMC_DEBUG_CMD0_TIMEOUT
 printf("CMD0 retrys %u\n", (U16)i);
#endif

 if(by  == IN_IDLE_STATE )
Teständerung:
Code:
for(i=0; i<CMD0_RETRYS; i++)
  {
   //send CMD0 for RESET
   by=MMCCommand(MMC_CMD0,0);
   if(by && IN_IDLE_STATE  ==  IN_IDLE_STATE) break;
  }  

#ifdef MMC_DEBUG_CMD0_TIMEOUT
 printf("CMD0 retrys %u\n", (U16)i);
#endif

 if(by && IN_IDLE_STATE == IN_IDLE_STATE )
Ich habe also per AND den rest "rausgefilter".

Siehe da, ich bekomme per Debugmeldung die kompletten SD Kartendaten.
->

  • CSD done

    CSD_STRUCT 0
    SPEC_VERSION 0
    SD card

    c_size 3919 , c_size_mult 128
    DriveSize 250880 kB , maxsect 501760
    mmc_init() ok

    RS 0 0x00000000
    Cmd 17: 0xFF 0x00

    FAT32

    bootSecOffset 0
    Reserved Sectors 38
    FAT Sectors 977
    Num. of FAT's 2
    secPerCluster 4
    BytesPerCluster 2048
    FATFirstSector 38
    FirstRootSector 1992
    RootDirSectors 0
    FirstDataSector 1992
    maxsect 501760
    FirstDirCluster 2
    maxcluster 124944
    RS 38 0x00000026
    Cmd 17: 0xFF 0x00


Sieht ja erstmal gut aus. Allerdings haut er dann beim Beschreiben der Karte div. Fehler mit rein.
Ist natürlich die Strafe für das ignorieren der anderen Rückgabeflags.

Ich bekomme zwar die Kartendaten raus, bei einer 256MB Karte kann ich auch dann Daten schreiben. Die anderen bleiben jedoch "Schreibresistent".Kann mir mal jemand einen Tipp geben wo mein Denkfehler liegt.

Und eine Sache verstehe ich erst recht nicht, warum arbeitet Bascom mit allen Karten ohne Probleme?

Gruß,

Stephan