基于51单片机FAT32文件系统程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于51单片机FAT32文件系统程序

#ifndef __ZNFAT_H__

#define __ZNFAT_H__

#include "mytype.h" //类型重定义

/*******************************************************/

//znFAT的裁减宏---------------------------------------------------------

//#define ZNFAT_ENTER_DIR //有此宏,函数 znFAT_Enter_Dir() 参与编译

#define ZNFAT_OPEN_FILE //有此宏,函数 znFAT_Open_File() 参与编译

//#define ZNFAT_SEEK_FILE //有此宏,函数 znFAT_Seek_File() 参与编译

//#define ZNFAT_READ_FILE //有此宏,函数 znFAT_Read_File() 参与编译

//#define ZNFAT_READ_FILEX //有此宏,函数 znFAT_Read_FileX() 参与编译

//#define ZNFAT_ADD_DAT //有此宏,函数 znFAT_Add_Dat() 参与编译

//#define ZNFAT_CREATE_DIR //有此宏,函数 znFAT_Create_Dir() 参与编译

//#define ZNFAT_CREATE_FILE //有此宏,函数 znFAT_Create_File() 参与编译

//#define ZNFAT_DEL_FILE //有此宏,函数 znFAT_Del_File() 参与编译

//#define ZNFAT_XCOPY_FILE //有此宏,函数 znFAT_XCopy_File() 参与编译

//#define ZNFAT_RENAME_FILE //有此宏,函数 znFAT_Rename_File() 参与编译

//#define ZNFAT_GET_TOTAL_SIZE //有此宏,函数 znFAT_Get_Total_Size() 参与编译

//#define znFAT_GET_REMAIN_CAP //有此宏,函数 znFAT_Get_Remain_Cap() 参与编译

#include "cj.h"

#include "cj.h"

//----------------------------------------------------------------------

#define SOC(c) (((c-pArg->FirstDirClust)*(pArg->SectorsPerClust))+pArg->FirstDirSector) // 用于计算簇的开始扇区#define CONST const

//设备表

#define SDCARD 0 //SD卡

#define UDISK 1 //U盘

#define CFCARD 2 //CF卡

#define OTHER 3 //其它

//这里的存储设备表,可以灵活扩充,以实现对更多存储设备的支持

//-------------------------------------------

#define MAKE_FILE_TIME(h,m,s) ((((unsigned int)h)<<11)+(((unsigned int)m)<<5)+(((unsigned int)s)>>1))

/* 生成指定时分秒的文件时间数据 */

#define MAKE_FILE_DATE(y,m,d) (((((unsigned int)y)+20)<<9)+(((unsigned int)m)<<5)+((unsigned int)d))

/* 生成指定年月日的文件日期数据 */

//DPT:分区记录结构如下

struct PartRecord

{

UINT8 Active; //0x80表示此分区有效

UINT8 StartHead; //分区的开始磁头

UINT8 StartCylSect[2];//开始柱面与扇区

UINT8 PartType; //分区类型

UINT8 EndHead; //分区的结束头

UINT8 EndCylSect[2]; //结束柱面与扇区

UINT8 StartLBA[4]; //分区的第一个扇区

UINT8 Size[4]; //分区的大小

//MBR:分区扇区(绝对0扇区)定义如下

struct PartSector

{

UINT8 PartCode[446]; //MBR的引导程序

struct PartRecord Part[4]; //4个分区记录

UINT8 BootSectSig0; //55

UINT8 BootSectSig1; //AA

};

//znFAT中对BPB的定义如下一共占用90个字节

struct znFAT_BPB

{

UINT8 BS_jmpBoot[3]; //跳转指令 offset: 0 UINT8 BS_OEMName[8]; // offset: 3 UINT8 BPB_BytesPerSec[2];//每扇区字节数 offset:11 UINT8 BPB_SecPerClus[1]; //每簇扇区数 offset:13 UINT8 BPB_RsvdSecCnt[2]; //保留扇区数目 offset:14 UINT8 BPB_NumFATs[1]; //此卷中FAT表数 offset:16 UINT8 BPB_RootEntCnt[2]; //znFAT为0 offset:17 UINT8 BPB_TotSec16[2]; //znFAT为0 offset:19 UINT8 BPB_Media[1]; //存储介质 offset:21 UINT8 BPB_FATSz16[2]; //znFAT为0 offset:22 UINT8 BPB_SecPerTrk[2]; //磁道扇区数 offset:24 UINT8 BPB_NumHeads[2]; //磁头数 offset:26 UINT8 BPB_HiddSec[4]; //FAT区前隐扇区数 offset:28 UINT8 BPB_TotSec32[4]; //该卷总扇区数 offset:32 UINT8 BPB_FATSz32[4]; //一个FAT表扇区数 offset:36 UINT8 BPB_ExtFlags[2]; //znFAT特有 offset:40 UINT8 BPB_FSVer[2]; //znFAT特有 offset:42 UINT8 BPB_RootClus[4]; //根目录簇号 offset:44 UINT8 FSInfo[2]; //保留扇区FSINFO扇区数offset:48 UINT8 BPB_BkBootSec[2]; //通常为6 offset:50 UINT8 BPB_Reserved[12]; //扩展用 offset:52 UINT8 BS_DrvNum[1]; // offset:64 UINT8 BS_Reserved1[1]; // offset:65 UINT8 BS_BootSig[1]; // offset:66 UINT8 BS_VolID[4]; // offset:67 UINT8 BS_FilSysType[11]; // offset:71 UINT8 BS_FilSysType1[8]; //"znFAT " offset:82 };

struct znFAT_FAT_Item

{

UINT8 Item[4];

};

struct znFAT_FAT

{

struct znFAT_FAT_Item Items[128];

};

struct direntry

相关文档
最新文档