|
发表于 2010-5-16 21:00:46
|
显示全部楼层
回复【楼主位】qushiwei
-----------------------------------------------------------------------
楼主,我用你的程序,我用SanDisk SD卡,为什么Fat_Init(void)不正常?
INT8U Fat_Init(void)
{
SD_ReadBlock(0,BUFFER); //read partion message // 读MBR结构//struct bpb710 *bpb;
// 读取分区表信息// 读引导扇区// 引导扇区号在PartInfo.prStartLBA中
Partition_PartType= BUFFER[450]; //分区信息 FAT32 0x0B
Partition_Size = BUFFER[458]+(BUFFER[459]<<8)+(BUFFER[460]<<16)+(BUFFER[461]<<24);
Partition_StartLBA = BUFFER[454]+(BUFFER[455]<<8)+(BUFFER[456]<<16)+(BUFFER[457]<<24); //0xF9*512=127488
SD_ReadBlock(Partition_StartLBA,BUFFER); //FAT32 read BPB
BS_OEMName[0] = BUFFER[3];
BS_OEMName[1] = BUFFER[4];
BS_OEMName[2] = BUFFER[5];
BS_OEMName[3] = BUFFER[6];
BS_OEMName[4] = BUFFER[7];
BS_OEMName[5] = BUFFER[8];
BS_OEMName[6] = BUFFER[9];
BS_OEMName[7] = BUFFER[10];
BPB_BytesPerSec = BUFFER[11] |(BUFFER[12] << 8); //0x0200 //每个扇区字节数
BPB_SecPerClus = BUFFER[13]; //0x08 //每个簇的扇区数
BPB_RsvdSecCnt = BUFFER[14] |(BUFFER[15] << 8); //0x20 //保留扇区数
BPB_NumFATs = BUFFER[16]; //0x02 //FAT 表数目
BPB_RootEntCnt = BUFFER[17] | (BUFFER[18] << 8);
BPB_TotSec16 = BUFFER[19] | (BUFFER[20] << 8);
BPB_Media = BUFFER[21];
BPB_FATSz16 = BUFFER[22] | (BUFFER[23] << 8);
BPB_SecPerTrk = BUFFER[24] | (BUFFER[25] << 8);
BPB_NumHeads = BUFFER[26] | (BUFFER[27] << 8);
BPB_HiddSec = BUFFER[28] | (BUFFER[29] << 8) | (BUFFER[30] << 16) | (BUFFER[31] << 24);
BPB_TotSec32 = BUFFER[32] | (BUFFER[33] << 8) | (BUFFER[34] << 16) | (BUFFER[35] << 24);
BPB_FATSz32 = BUFFER[36] | (BUFFER[37] << 8) | (BUFFER[38] << 16) | (BUFFER[39] << 24);
BPB_ExtFlags = BUFFER[40] | (BUFFER[41] << 8);
BPB_FSVer = BUFFER[42] | (BUFFER[43] << 8);
BPB_RootClus = BUFFER[44] | (BUFFER[45] << 8) | (BUFFER[46] << 16) | (BUFFER[47] << 24);
BPB_FSInfo = BUFFER[48] | (BUFFER[49] << 8);
BPB_BKBootSec = BUFFER[50] | (BUFFER[51] << 8);
BS_drvNum = BUFFER[64];
BS_Reservd1 = BUFFER[65];
BS_BootSig = BUFFER[66];
BS_VolID = BUFFER[67] | (BUFFER[68] << 8) | (BUFFER[69] << 16) | (BUFFER[70] << 24);
switch(Partition_PartType)
{
case PART_TYPE_FAT12:
break;
case PART_TYPE_DOSFAT16:
case PART_TYPE_FAT16:
case PART_TYPE_FAT16LBA:
break;
case PART_TYPE_FAT32LBA:
case PART_TYPE_FAT32:
FAT_MASK = FAT32_MASK; //0x0fffffff
Clust = BPB_RootClus;
FAT1Sec = BPB_RsvdSecCnt+Partition_StartLBA;
FAT2Sec = FAT1Sec+BPB_FATSz32;
FirstDataSector = FAT2Sec+BPB_FATSz32;
break;
default:
return 0;
}
return 1;
}
为什么Partition_PartType=0x72 ? 我怎么试都是这样的.我用是SanDisk 2G |
|