10.06.06 by Dennis Kleine-Beck Damit MMC/SD-Karten mit Ulrich Radigs Code (v. 2.5) unabhängig von der Partitionierungsart (Nur VBR ("Supperfloppy") oder MBR + VBR ("partitioniert, wie von Uli ursprünglich vorausgesetzt, mit z.B. LINUX) funktionieren, nehme man die folgenden 2 Änderungen vor. Beschreibung: Es wird geprüft, ob sich im Sector 0 an Offset 0x0B ein gültiger Eintrag für die Sectorgröße befindet. AFAIK ist diese immer 512 Bytes. Wird ein Wert ungleich 512 gefunden, ist die Annahme, dass es sich um einen MBR handelt (Dann steht BOOT Code an diesem Offset) und der Offset für den VBR wird ermittelt. Ansonsten ist Sector 0 der VBR und es existiert kein Offset. 1) In FAT.H folgendes ergänzen (Offset für Sectorgröße in VBR) // Block Size in Bytes in VBR #define VBR_BlockSize 0x0B 2) In FAT.C folgende Funktion austauschen/ersetzen: //############################################################################ //Auslesen der Adresse des Volume Boot Record von MBR oder VBR direkt (VBR=Sector 0) unsigned int fat_addr (unsigned char *Buffer) //############################################################################ { U16 vbr_blocksize=0; // DKB: Initial Value //auslesen des Master Boot Record von der MMC/SD Karte (addr = 0) mmc_read_sector (MASTER_BOOT_RECORD,Buffer); //Read Master Boot Record = 0 vbr_blocksize = (Buffer[VBR_BlockSize] + (Buffer[VBR_BlockSize+1]<<8)); //DKB: Berechnet Volume Boot Record in abhängigkeit von Partitionierungsart: if (vbr_blocksize != BlockSize) //DKB: != 512? -> MBR -> multiple partitions volume_boot_record_addr = Buffer[VBR_ADDR] + (Buffer[VBR_ADDR+1] << 8); else // == 512? -> sec 0 = VBR -> SuperFloppy Format volume_boot_record_addr = 0; mmc_read_sector (volume_boot_record_addr,Buffer); //Read Master Boot Record return (volume_boot_record_addr); // = offset (MBR) or 0 (no MBR) }