⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fat16.h

📁 《基于MDK的STM32处理器应用开发》例程,本例程包使用STM32 FirmLibrary V1.0
💻 H
字号:
#ifndef _FAT_H_65226575624
#define _FAT_H_65226575624

#define USE_FAT                         1
#define FAT_READ_ONLY                   1

typedef __packed struct 
{
	u8 			BootFlag; 			//启动标志
	u8 			StartCHS[3]; 		//分区开始的柱面、磁头、扇区
	u8 			SystemID; 			//分区类型
	u8 			EndCHS[3]; 			//分区结束的柱面、磁头、扇区
	u32 		RelativeSectors; 	//分区起始扇区数,指分区相对于记录该分区的分区表的扇区位置之差 (该分区表:LBA=0x0)。
	u32 		TotalSectors;		//分区总扇区数
} PartitionTable;

typedef __packed struct 
{
	u8 				bootcode[446];	//ofs:0.启动代码。“FA 33 C0 8E D0 BC…”.
	PartitionTable 	PT[4]; 			//ofs:446.分区表length=4*16.
	u16 			EndingFlag; 	//ofs:510.结束标识:0xAA55.
}MBR_tag;

typedef __packed struct
{//由于默认情况下以对齐方式访问,因此可能导至结构体元素之间有“空隙”,
 //不利于操作,因此需要加上关键字__packed强制其以压缩方式存储结构体。
 //这样该结构体在内存空间上是一片连续的空间,不存在“空隙”情况。其它地方类同。
	u8         BS_jmpBoot[3];
	u8         BS_OEMName[8];
	u16        BPB_BytesPerSec;
	u8         BPB_SecPerClus;
	u16        BPB_RsvdSecCnt;
	u8         BPB_NumFATs;
	u16        BPB_RootEntCnt;
	u16        BPB_TotSec16;
	u8         BPB_Media;
	u16        BPB_FATSz16;
	u16        BPB_SecPerTrk;
	u16        BPB_NumHeads;
	u32        BPB_HiddSec;
	u32        BPB_TotSec32;
	u8         BS_DrvNum;
	u8         BS_Reservedl;
	u8         BS_BootSig;
	u32        BS_VolID;
	u8         BS_VolLab[11];
	u8         BS_FilSysType[8];
	u8         ExecutableCode[448];
	u8         ExecutableMarker[2];
} FAT_BPB;

typedef __packed struct
{
	u16        Start;
	u32        Size;
} FILE_POSIT;

typedef __packed struct
{
	u8         FileName[11];
	u8         FileAttrib;
	u8         UnUsed[10];
	u8         FileUpdateTime[2];
	u8         FileUpdateData[2];
	FILE_POSIT    FilePosit;
} DIR;

//********************************************************************************************
//初始化驱动,建立必要数据结构
void FAT_Init(void);
//列出指定扇区和长度(以扇区为单位)的所有目录信息,dirAddr为扇区地址,secNum为扇区数
void List_AllDir_Long(u32 dirAddr);
//在指定扇区(首扇区地址为dirAddr)的所有目录项中查找子目录,其名字为foldername[],
//type标识找目录还是文件, 0表示找目录,1表示找文件,返回子目录或文件的首扇区号
u32 SearchFoler(u32 dirAddr, u8 foldername[], u8 namelen, u8 type);
//获取根目录开始扇区号
u32 DirStartSec(void);
//打开指定文件,firstSec为文件的首扇区
void FAT_FileOpen(u32 firstSec);
//读取文件的数据,start指文件编移,length指读取长度,buff存入读取内容
void FAT_FileRead(u32 start, u32 length, u8* buff);
//计算可用空间,返回字节数
u32 CalcuFreeSpace(void);
//********************************************************************************************
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -