|
想吃透sd卡mp3方案,从fat16着手,啃fat过程中遇到一些问题
对于fat16:
1.BPB_TotSec16只分配了两个字节,那么它的最大值0xffff,一个sector按照512字节计算,fat16是怎么支持2G的存储器?如果把BPB_TotSec16中的值理解为簇数,倒是可以解释以上问题,但是从后面DataSec的计算方法来看,BPB_TotSec16确实指的是扇区数,此处该如何理解?
2.fat16的每一个表项大小为16bit,是否意味着fat表里面没有存储簇号?但是看网友busy翻译的fat手册,“fat的表项总数与硬盘上的总簇数相关,因为每一项要代表一个簇,每项占用的字节数也与总簇数有关,因为其中需要放簇号,簇号越大,每项占用的字节数越大”,是否与 fat16的每一个表项大小为16bit相互矛盾,fat表里面到底有没有存储簇号?
3.在一个德国人写的fat16程序中下面函数作何用?
long FAT_Addr (void)
{
char Buffer[BlockSize];
unsigned long Volume_Boot_Record_Addr;
//auslesen des Master Boot Record von der MMC/SD Karte (addr = 0)
mmc_read_sector (MasterBootRecord,Buffer); //Read Master Boot Record
//Berechnet Volume Boot Record
Volume_Boot_Record_Addr = (Buffer[VBR_Addr+1] << 8) + (Buffer[VBR_Addr]);
return (Volume_Boot_Record_Addr);
}
其中 VBR_Addr = 0x1c6,BlockSize = 512,MasterBootRecord = 0.
继续研究中,有问题再向大家讨教。欢迎正在研究fat的网友加入讨论。
-----此内容被bigben于2005-06-27,14:24:24编辑过 |
|