Hallo,

Als school project moeten we een MP3 projectje maken waar ik al redelijk ver mee ben.
Key elementen van het project zijn:
- SD kaart met MP3 bestanden
- VS1011 (MP3 decoder)
- nokia LCD scherm

Heb alles al aan het werken gekregen, dus ik ga niet vragen om mijn project af te maken.

Wat mij vooral tegen viel/valt was het fat systeem op de SD kaart werkend te krijgen. Ik heb nu ergens een library gevonden op internet, en deze werkt wel (maar slurpt veel te veel geheugen, en zo super goed werkt ze ook weer niet).

Omdat ik het wel interessant vind, en er nog wel een beetje tijd in wou steken wou ik eens kijken of ik zelf een deel van zo'n fat library kan schrijven (ok, is niet het makkelijkste. Maar hoef ook niet alles te kunnen).

De zaken die ik graag als eerste wil doen zijn:
- MBR ontleden.
- kijken welke bestanden in de root directory aanwezig zijn
- lezen bestand

Ik ben al eens begonnen met een aantal sectoren uit te lezen. Zo heb ik mijn µC laten zoeken op alle blokken die eindigen op 0x55 0xAA (wat het einde van een partitie tabel zou betekenen).

ik heb de volgende 2 sectoren gevonden:

table found at 000000000

0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02
0x0C 0x00 0x06 0x38 0xF8 0xB8 0x89 0x00 0x00 0x00 0x77 0x9F 0x3A 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x55 0xAA

table found at 000000274

0xEB 0x3C 0x90 0x4D 0x53 0x44 0x4F 0x53 0x35 0x2E 0x30 0x00 0x02 0x40 0x02 0x00 0x02 0x00 0x02 0x00 0x00 0xF8 0xEB 0x00 0x3F 0x00 0xFF 0x00 0x89 0x00 0x00 0x00
0x77 0x9F 0x3A 0x00 0x80 0x00 0x29 0xAC 0x0F 0x5A 0xE8 0x4E 0x4F 0x20 0x4E 0x41 0x4D 0x45 0x20 0x20 0x20 0x20 0x46 0x41 0x54 0x31 0x36 0x20 0x20 0x20 0x33 0xC9
0x8E 0xD1 0xBC 0xF0 0x7B 0x8E 0xD9 0xB8 0x00 0x20 0x8E 0xC0 0xFC 0xBD 0x00 0x7C 0x38 0x4E 0x24 0x7D 0x24 0x8B 0xC1 0x99 0xE8 0x3C 0x01 0x72 0x1C 0x83 0xEB 0x3A
0x66 0xA1 0x1C 0x7C 0x26 0x66 0x3B 0x07 0x26 0x8A 0x57 0xFC 0x75 0x06 0x80 0xCA 0x02 0x88 0x56 0x02 0x80 0xC3 0x10 0x73 0xEB 0x33 0xC9 0x8A 0x46 0x10 0x98 0xF7
0x66 0x16 0x03 0x46 0x1C 0x13 0x56 0x1E 0x03 0x46 0x0E 0x13 0xD1 0x8B 0x76 0x11 0x60 0x89 0x46 0xFC 0x89 0x56 0xFE 0xB8 0x20 0x00 0xF7 0xE6 0x8B 0x5E 0x0B 0x03
0xC3 0x48 0xF7 0xF3 0x01 0x46 0xFC 0x11 0x4E 0xFE 0x61 0xBF 0x00 0x00 0xE8 0xE6 0x00 0x72 0x39 0x26 0x38 0x2D 0x74 0x17 0x60 0xB1 0x0B 0xBE 0xA1 0x7D 0xF3 0xA6
0x61 0x74 0x32 0x4E 0x74 0x09 0x83 0xC7 0x20 0x3B 0xFB 0x72 0xE6 0xEB 0xDC 0xA0 0xFB 0x7D 0xB4 0x7D 0x8B 0xF0 0xAC 0x98 0x40 0x74 0x0C 0x48 0x74 0x13 0xB4 0x0E
0xBB 0x07 0x00 0xCD 0x10 0xEB 0xEF 0xA0 0xFD 0x7D 0xEB 0xE6 0xA0 0xFC 0x7D 0xEB 0xE1 0xCD 0x16 0xCD 0x19 0x26 0x8B 0x55 0x1A 0x52 0xB0 0x01 0xBB 0x00 0x00 0xE8
0x3B 0x00 0x72 0xE8 0x5B 0x8A 0x56 0x24 0xBE 0x0B 0x7C 0x8B 0xFC 0xC7 0x46 0xF0 0x3D 0x7D 0xC7 0x46 0xF4 0x29 0x7D 0x8C 0xD9 0x89 0x4E 0xF2 0x89 0x4E 0xF6 0xC6
0x06 0x96 0x7D 0xCB 0xEA 0x03 0x00 0x00 0x20 0x0F 0xB6 0xC8 0x66 0x8B 0x46 0xF8 0x66 0x03 0x46 0x1C 0x66 0x8B 0xD0 0x66 0xC1 0xEA 0x10 0xEB 0x5E 0x0F 0xB6 0xC8
0x4A 0x4A 0x8A 0x46 0x0D 0x32 0xE4 0xF7 0xE2 0x03 0x46 0xFC 0x13 0x56 0xFE 0xEB 0x4A 0x52 0x50 0x06 0x53 0x6A 0x01 0x6A 0x10 0x91 0x8B 0x46 0x18 0x96 0x92 0x33
0xD2 0xF7 0xF6 0x91 0xF7 0xF6 0x42 0x87 0xCA 0xF7 0x76 0x1A 0x8A 0xF2 0x8A 0xE8 0xC0 0xCC 0x02 0x0A 0xCC 0xB8 0x01 0x02 0x80 0x7E 0x02 0x0E 0x75 0x04 0xB4 0x42
0x8B 0xF4 0x8A 0x56 0x24 0xCD 0x13 0x61 0x61 0x72 0x0B 0x40 0x75 0x01 0x42 0x03 0x5E 0x0B 0x49 0x75 0x06 0xF8 0xC3 0x41 0xBB 0x00 0x00 0x60 0x66 0x6A 0x00 0xEB
0xB0 0x42 0x4F 0x4F 0x54 0x4D 0x47 0x52 0x20 0x20 0x20 0x20 0x0D 0x0A 0x52 0x65 0x6D 0x6F 0x76 0x65 0x20 0x64 0x69 0x73 0x6B 0x73 0x20 0x6F 0x72 0x20 0x6F 0x74
0x68 0x65 0x72 0x20 0x6D 0x65 0x64 0x69 0x61 0x2E 0xFF 0x0D 0x0A 0x44 0x69 0x73 0x6B 0x20 0x65 0x72 0x72 0x6F 0x72 0xFF 0x0D 0x0A 0x50 0x72 0x65 0x73 0x73 0x20
0x61 0x6E 0x79 0x20 0x6B 0x65 0x79 0x20 0x74 0x6F 0x20 0x72 0x65 0x73 0x74 0x61 0x72 0x74 0x0D 0x0A 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xAC 0xCB 0xD8 0x55 0xAA

(als je ze in notepad++ oid plakt heb je beter overzicht)

Het is duidelijk dat de tabel op positie 0 niet de MBR is. Maar wel de tabel op plaats 274.

Mijn vraag is:
- wie weet hoe ik van sector 0 tot sector 274 raak (zonder te scannen natuurlijk)
- weet iemand een goeie tutorial/info site over fat?

Alvast bedankt!!

Ojeke

Dat is niet de MBR, maar het bootrecord van de eerste partitie. MBR hoort inderdaad vooraan te staan.
Zie ook: http://www.beginningtoseethelight.org/fat16/

MBR is het Master Boot Record. Die staat altijd op block 0. Dus op block 0 heb je gewoon de MBR gevonden.

Normaliter bevat de MBR de code die de actieve partitie pakt, en het boot record daarvan laad en executeert. Deze bevat dat niet en is verder leeg. Kan ook als je er niet van wilt booten.

De MBR heeft een partitie tabel. Die verwijst naar partities. Het eerste block van de parttie zal dan een parameter table van de FAT partitie bevatten.

Ik heb ook eens eigen methodes geschreven om wave bestanden van een sd kaart te lezen. Ik heb toen dit document doorgenomen.

Op sector 0 staat inderdaad het MBR, die met al die nullen. De partitieomschrijving staat op de een na laatste regel:


0x0C 0x00 0x06 0x38 0xF8 0xB8 0x89 0x00 0x00 0x00 0x77 0x9F 0x3A 
           |                   | 
           |                   | 
           |                   '--- 0x00000089 is startsector partitie
           '--- partitie type

0x00000089 is 137 decimaal, dus 274 klopt wel.
(Jij telt 256 byte als sector, maar een sector is 512 bytes. (dus 274 door 2 delen)

Hoi,

Allen bedankt voor de info :)

Ga morgen de link en het document doornemen.

@Arco, mijn sector is toch ook 512? Als ik die blokken tel heb ik 32 *16 byte = 512 byte, of ben ik mis?

MVG

Ojeke

Waar het om gaat is dat je partitie op sector 0x89 zou beginnen, en jij noemt dat "sector 274". Ik ben zelf opgehouden om om te rekenen naar decimaal. Die partitie begint op sector 0x89. dus het byte-adres is 89*200 = 11200 .

@FET hieronder: Ik ben gestopt met puzzelen na MSDOS5.0.

[Bericht gewijzigd door rew op (12%)]

MSDOS5.0 [...] Remove disks or other media.. Disk error.. Press any key to restart..

Grappig, dat dat soort dingen er gewoon nog in zit.