mikrocontroller.net

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


Autor: Martin Domke (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Feadi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

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

Gruß, Feadi

Autor: FRAGENSTELLER (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: André Kronfeldt (freakazoid)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht jemand mit 16MB-Karte von Panasonic macht einen Test?

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

Grüße, Freakazoid

Autor: André Kronfeldt (freakazoid)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Aufreger deluxe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meine 128MB Karte hat 128161792 Byte Speicher.

Autor: Feadi (Gast)
Datum:

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

Feadi

Autor: nurso (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: FRAGENSTELLER (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Hagen Re (hagen)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin Domke (eric_arthur_blair)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: André Kronfeldt (freakazoid)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Autor: Martin Domke (eric_arthur_blair)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ok. Jetzt nochmal der Quelltext

Autor: André Kronfeldt (freakazoid)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin Domke (eric_arthur_blair)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin Domke (eric_arthur_blair)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: André Kronfeldt (freakazoid)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin Domke (eric_arthur_blair)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Glückwunsch zu der Vaterschaft! Und vielen Dank für die Mithilfe…

Gruß,

Martin

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.