Forum: Mikrocontroller und Digitale Elektronik SD-Karte Kapazität


von Martin Domke (Gast)


Lesenswert?

Hallo!

Ich habe eine 16MB SD-Karte von Panasonic, zumindest ist die Kapazität
nach Herstellerangaben so. Durch Auslesen des CDS-Blocks und der
Durchführung der nötigen Berechnungen komme ich aber auf 14909440
Bytes. Kann jemand verifizieren, dass das die richtige Anzahl an Bytes
ist?

Gruß,

Martin

von Feadi (Gast)


Lesenswert?

Hi,

verrätst Du auch wie wir das jetzt für Dich verifizieren sollen?

Gruß, Feadi

von FRAGENSTELLER (Gast)


Lesenswert?

wenn du meinst daß dir ca. 1MB fehlt dann stimmt das, denn irgendwie
müssen ja die 16MB verwaltet oder organsiert werden. genauso kannst du
das bei festplatten beobachten.

von André K. (freakazoid)


Lesenswert?

Vielleicht jemand mit 16MB-Karte von Panasonic macht einen Test?

Anderer weg wäre uns mal den CSD zu posten.

Grüße, Freakazoid

von André K. (freakazoid)


Lesenswert?

> wenn du meinst daß dir ca. 1MB fehlt dann stimmt das, denn irgendwie
> müssen ja die 16MB verwaltet oder organsiert werden. genauso kannst
> du das bei festplatten beobachten.
Kapier ich nicht. Es geht im nicht um die Netto-Datenmenge (z.B. im
Explorer). Da müßte man natürlich die FAT (oder andere
Dateisstemverwaltungsstrukturen) berücksichtigen.
Es geht im hier wohl eher um BlockSize * 2<<x ... also die Berechnung
aus der CSD-Antwort (16 Bytes).

von Aufreger deluxe (Gast)


Lesenswert?

Meine 128MB Karte hat 128161792 Byte Speicher.

von Feadi (Gast)


Lesenswert?

Könnte es sich um defekte Sektoren handeln? Schliesslich müsste eine
16MB Karte schon ein bischen älter sein.

Feadi

von nurso (Gast)


Lesenswert?

Hallo

meine Panasonic SD Karte hat unter Windows 14860288 Byte das
Speichersystem ist da natürlich schon weg. Wenn das Speichersystem ca
409200 Bytes hat (ungenau) müsste der Wert stimmen.

von FRAGENSTELLER (Gast)


Lesenswert?

meine SD-karte hat 14.860.288 (formatiert mit Panasonic LUMIX)
                   14.852.096 (FAT)
                   14.879.744 (NTFS)

FAT32 funktioniert nicht (formatierung bricht ab)

von Hagen R. (hagen)


Lesenswert?

SD steht für Secure Digital, und das bedeutet das irgendwo im Speicher
der Karte auch die Schlüssel für den Kryptoprozessor gespeichert werden
müssen. Wenn man an die Datenblätter ran kommt sieht man wofür dieser
Speicher draufgeht.

Gruß Hagen

von Martin D. (eric_arthur_blair)


Lesenswert?

Also ich habe die SD-Karte nun über einen Kartenleser in WinHex 
geöffnet. Das Programm zeigt dabei allerhand Informationen über das 
Medium an, unter anderem auch, dass die Gesamtkapazität 14.909.440 Bytes 
beträgt, was meiner ursprünglichen Berechnung entspricht. Auch die 
Anzahl der Sektoren (29120) stimmt überein.
 Nun habe ich die gleiche Berechnung mal für eine 512 MB-Karte von 
Kingston durchgeführt. Dort errechnet die Funktion 109.576.192 Bytes und 
214.016 Sektoren, was für mich nicht so viel Sinn macht. WinHex zeigt 
512.229.276 Bytes an. Kann das irgendjemand erklären? Warum sollte die 
Berechnung für eine Karte klappen und für eine andere totalen Unsinn 
liefern? Den Quelltext für die Berechnungsfunktion habe ich angehängt.

Gruß,

Martin

von André K. (freakazoid)


Lesenswert?

Hallo,

> Den Quelltext für die Berechnungsfunktion habe ich angehängt.
Haste nicht ;-)

geht deine Funktion zufällig von 512Byte-Sektoren aus (ich meine, daß 
z.B. der Code von Ulrich Radig das tut)? Hast Du überprüft, ob das 
stimmt (also ob Deine Formatierung wirklich 512Byte-Sektoren hat)?

Vielleicht postest Du mal den Code und den BPM (BIOS Parameter Block).

Grüße, Freakazoid

BTW: Ich hoffe wir reden überhaupt von einer FAT-Formatierung ;-)

von Martin D. (eric_arthur_blair)


Angehängte Dateien:

Lesenswert?

Ok. Jetzt nochmal der Quelltext

von André K. (freakazoid)


Lesenswert?

Hm. Sieht eigentlich gut aus. Hast Du mal überprüft, ob die CSD korrekt 
gelesen wurde (z.B. Dump über RS232)? Nicht, daß Du auf einem völlig 
wirren Datenblock zugreifst.

von Martin D. (eric_arthur_blair)


Lesenswert?

Das ist das CSD-Register für die 512MB-Karte von Kingston

Block    Binary          Decimal
1.       00000000        0
2.       00101101        45
3.       00000000        0
4.       00110010        50
5.       00011011        27
6.       01011001        89
7.       10000011        131
8.       11010000        208
9.       11110110        246
10.      11011011        219
11.      01111111        127
12.      10000000        128
13.      00010110        22
14.      01000000        64
15.      00000000        0
16.      00001101        13

Daraus ergibt sich nach SD Card Product Manual, Rev. 1.9

C_SIZE          111101000011    3907
READ_BLOCK_LEN          1001       9
C_SIZE_MULT              110       6

und letztlich

memory capacity = (C_SIZE + 1)* 2^(C_SIZE_MULT + 2) * 2^(READ_BL_LEN)
                = 3908  256  512 = 512.229.376

was dem richtigen Wert entspricht.

Kann mir jemand erklären weswegen bei mir der falsche Wert ausgegeben 
wird. Der Aufruf der im vorherigen Posting angegeben Funktion lautet

  if(!SD_GetDriveSize(&sc)){
    sectorCount = sc/512;
    file->sectorCount = sc/512;
    if( (sc%512) != 0){
      sectorCount--;
      file->sectorCount--;
    }

    DBG("Drive Size is %li Bytes (%li Sectors)\n\r", sc, sectorCount);
  }
  else
    printf((rom char*)"Couldn't get drive size\n\r");

Danke für eure Antworten.

Gruß,

Martin

von Martin D. (eric_arthur_blair)


Lesenswert?

Ok. Ich habe den Fehler jetzt selbst gefunden. War ziemlich blöd von 
mir. Statt

c_size = (euint32)((CSD[6] & 0x03)<<10);

muss es

c_size = (euint32)(CSD[6] & 0x03)<<10;

heißen. Logisch, weil ja sonst beim shiften immer 0 rauskommt. CSD ist 
ein Array vom Typ unsigned char, die einzelnen Felder sind also nur 8 
Bit breit und wenn man da zehnmal nach links shifted ist nachher nix 
mehr über. Also ERST nach long casten und dann shiften!

Gruß,

Martin

von André K. (freakazoid)


Lesenswert?

Tricky. Ich hatte zwar beim Rückwärtsrechnen c_size auch mit 0 raus 
(deswegen ja auch meine Frage nach dem CSD), aber den Teil mit den 
Klammern hätt ich nicht bemerkt. Mist. Naja, war halt wohl gestern ein 
wenig neben mir (am 14.10. um 08:11 Uhr das 2. mal Vater geworden) ;-)

Hauptsache das Teil läuft jetzt.

Grüße, Freakazoid

von Martin D. (eric_arthur_blair)


Lesenswert?

Glückwunsch zu der Vaterschaft! Und vielen Dank für die Mithilfe…

Gruß,

Martin

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.