资源简介

51单片机读写SD卡程序,使用FAT文件系统,51单片机也可以有海量存储了

资源截图

代码片段和文件信息

#include “SD.h“
#include “FAT.h“


//FAT系统信息
unsigned long FATOffset; //FAT表的起始绝对扇区号
unsigned long RDTOffset; //RDT表的起始绝对扇区号
unsigned long DataOffset; //Data区的起始绝对扇区号
unsigned int  MaxCluster; //最大的簇序号FAT16
unsigned int  RDTEntryNum; //根目录项数
unsigned char ClusterSize; //每簇扇区数

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//将一个16位数按字节倒序
void Swap16(unsigned int *Var)
{
*Var = ((*Var & 0xFF00)>>8 | (*Var & 0x00FF)<<8);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//将一个32位数按字节倒序
void Swap32(unsigned long *Var)
{
*Var = ((*Var & 0xFF000000)>>24 | (*Var & 0x00FF0000)>>8 | (*Var & 0x0000FF00)<<8 | (*Var & 0x000000FF)<<24);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//读取并计算SD卡文件系统信息,返回0x00时操作成功,0xFF时出错。
unsigned char InitFAT()
{ //FAT文件系统参数
unsigned long RelSector;
unsigned long TotalSector;
unsigned int  ReservedSector;
unsigned char FATNum;
unsigned int  FATSize;

//初始化SD卡
if(InitSD()!=0x00) return 0xFF;

//读取FAT文件系统参数
if(0x00 != ReadSectorPartial(0 454 4 (unsigned char *)&RelSector)) return 0xFF;
Swap32(&RelSector);
if(0x00 != ReadSectorPartial(0 458 4 (unsigned char *)&TotalSector)) return 0xFF;
Swap32(&TotalSector);
if(0x00 != ReadSectorPartial(RelSector 14 2 (unsigned char *)&ReservedSector)) return 0xFF;
Swap16(&ReservedSector);
if(0x00 != ReadSectorPartial(RelSector 13 1 &ClusterSize)) return 0xFF;
if(0x00 != ReadSectorPartial(RelSector 16 1 &FATNum)) return 0xFF;
if(0x00 != ReadSectorPartial(RelSector 17 2 (unsigned char *)&RDTEntryNum)) return 0xFF;
Swap16(&RDTEntryNum);
if(0x00 != ReadSectorPartial(RelSector 22 2 (unsigned char *)&FATSize)) return 0xFF;
Swap16(&FATSize);

//计算FAT系统信息
FATOffset = RelSector + ReservedSector;
RDTOffset = FATOffset + FATNum * FATSize;
DataOffset = RDTOffset + (RDTEntryNum * 32) / 512;
MaxCluster = (unsigned int)((TotalSector + 1 - DataOffset) / ClusterSize + 1);

return 0x00; //初始化成功
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//在SD卡根目录下查找指定文件,返回0x00时操作成功,0xFF时出错。
//参数pFile为文件结构体指针;pFileName为要查找的文件名。
//文件名长11字节;前8个为文件名,不足8字节的在后面补空格;后3字节为文件后缀;所有字符为ASCII码大写字符。
unsigned char FileOpen(PFILE pFile char *pFileName)
{
unsigned int Entry EntrySecOffset;
unsigned long EntrySector;
unsigned char i;
idata char FileName[11];

for(Entry=0; Entry { //计算Entry的起始位置
EntrySector = (Entry * 32) / 512 + RDTOffset;
EntrySecOffset = (Entry * 32) % 512;
//读取Entry的前11字节
if(0x00 != ReadSectorPartial(EntrySector EntrySecOffset 11 FileName)) return 0xFF;
//比较文件名
for(i=0; i<11; i++)
{
if(FileName[i] != *(pFileName+i)) bre

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        749  2006-10-05 11:27  SDCard\STARTUP.OBJ

     文件       5115  2002-04-16 14:32  SDCard\STARTUP.A51

     文件       8468  2006-10-05 11:24  SDCard\FAT.c

     文件        164  2007-09-06 15:37  SDCard\SD.plg

     文件       1699  2006-06-30 10:32  SDCard\MAIN.bak

     文件       4127  2006-10-05 11:27  SDCard\main.LST

     文件       2254  2006-10-05 10:03  SDCard\SD_Uv2.Bak

     文件       7424  2006-10-05 11:27  SDCard\main.OBJ

     文件       1549  2006-07-12 17:05  SDCard\main.c

     文件      11200  2006-10-05 11:27  SDCard\SD.LST

     文件       3267  2006-10-05 09:52  SDCard\SD.bak

     文件        689  2006-10-05 10:09  SDCard\FAT.h

     文件      14472  2006-10-05 11:27  SDCard\FAT.LST

     文件      26095  2006-10-05 11:27  SDCard\FAT.OBJ

     文件       3333  2006-10-05 09:57  SDCard\SD.h

     文件       8467  2006-10-05 11:24  SDCard\FAT.c.bak

     文件       4758  2006-10-05 09:42  SDCard\SD.c

     文件      11679  2006-10-05 11:27  SDCard\STARTUP.LST

     文件       1566  2006-06-30 15:18  SDCard\main.c.bak

     文件        679  2006-10-05 10:06  SDCard\FAT.h.bak

     文件       4762  2006-10-05 09:40  SDCard\SD.c.bak

     文件       4912  2006-06-26 10:45  SDCard\FAT.bak

     文件        100  2006-10-05 11:28  SDCard\SD.lnp

     文件      35652  2006-10-05 11:28  SDCard\SD.M51

     文件      15782  2006-10-05 11:28  SDCard\SD.hex

     文件       3334  2006-10-05 09:57  SDCard\SD.h.bak

     文件       1120  2006-10-05 10:03  SDCard\SD_Opt.Bak

     文件      17059  2006-10-05 11:27  SDCard\SD.OBJ

     文件      45712  2006-10-05 11:28  SDCard\SD

     文件       2299  2007-09-06 15:37  SDCard\SD.Uv2

............此处省略5个文件信息

评论

共有 条评论