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

📄 fat.h

📁 SD卡简单实现文件系统,是别人发给我的,觉得很有必要放大这里和大家一起共享,希望对你有帮助,谢谢.
💻 H
字号:
#ifndef _FAT_H_
#define _FAT_H_

#include"config.h"

#define IsFAT12		12
#define IsFAT16		16
#define IsFATA32	32

/*****************BPB中各参数的偏移量*****************/
#define		OFBPB_BytsPerSec	0x0B
#define		OFBPB_SecPerClus	0x0D		
#define		OFBPB_RsvdSecCnt	0x0E
#define		OFBPB_NumFATs		0x10
#define		OFBPB_RootEntCnt	0x11	
#define		OFBPB_TotSec16		0x13
#define		OFBPB_FATSz16		0x16
#define		OFBPB_HiddSec		0x1C
#define		OFBPB_TotSec32		0x20
#define		OFBPB_FilSysType	0x2A
#define		OFBPB_FATSz32		0x24
#define		OFBPB_RootClus		0x2C

/***********短文件目录项中各参数的偏移量**************/
#define		OFSDIR_SName		0x00
#define		OFSDIR_Attr			0x0B		
#define		OFSDIR_FstCluH		0x14
#define		OFSDIR_FstCluL		0x1A
#define		OFSDIR_FileSize		0x1C
#define		LEN_SDIR_SName		0x0B

/************长文件目录项中各参数的偏移量*************/
#define		OFLDIR_LName1		0x01
#define		OFLDIR_LName2		0x0E
#define		OFLDIR_LName3		0x1C
#define		OFLDIR_Ord			0x00		
#define		OFLDIR_Attr			0x0B
#define		OFLDIR_Chksum		0x0D
#define		LEN_LDIR_LName1		0x0A
#define		LEN_LDIR_LName2		0x0C
#define		LEN_LDIR_LName3		0x04

/**********************文件属性**********************/
#define 	ATTR_READ_ONLY		0x01	//只读
#define 	ATTR_HIDDEN			0x02	//隐藏
#define 	ATTR_SYSTEM			0x04	//系统
#define 	ATTR_VOLUME			0x08	//卷标
#define 	ATTR_DIRECTORY		0x10	//子目录
#define 	ATTR_ARCHIVE		0x20	//存档
#define 	ATTR_LONG_NAME		0x0F	//长目录项
#define 	ATTR_LONG_NAME_MASK	0x3F	//长目录子项

	
INT16U	RootDirSectors;			//根目录所占扇区数
INT32U	FATSize;				//FAT表所占扇区数
INT32U  FirstDataSector;		//数据区的第一个扇区号
INT32U	TotSector;				//总扇区数
INT32U  DataSector;				//数据区中扇区数
INT32U	CountOfCluster;			//总簇数
INT32U  FistRootDirSecNum;		//根目录第一个扇区号

/*******************BPB数据结构***********************/
typedef struct 
{
	INT16U	BytsPerSec;		//每扇区字节数
	INT8U	SecPerClus;		//每簇扇区数
	INT16U	RsvdSecCnt;		//保留扇区数
	INT8U	NumFATs;		//FAT表份数
	INT16U	RootEntCnt;		//根目录中的目录项数
	INT16U	TotSec16;		//小扇区数
	INT16U	FATSz16;		//一个FAT表所占扇区数	
	INT32U	HiddSec;		//隐藏扇区数
	INT32U 	TotSec32;		//大扇区数
	INT8U	FilSysType;		//文件系统类型
	/************下面为FAT32的内容*******************/
	INT32U	FATSz32;		//一个FAT表所占扇区数(FAT32)
	INT32U	RootClus;		//根目录所在第一个簇的簇号
} BPB; 

/*****************短目录项数据结构********************/
typedef struct 
{
	INT8U	SName[11];		//短文件名
	INT8U	Attr;			//文件属性
	INT16U	FstCluH;		//该目录项簇号的高16位
	INT16U	FstCluL;		//该目录项簇号的低16位
	INT32U	FileSize;		//文件大小
} SDIR;

/*****************长目录项数据结构********************/
typedef struct 
{
	INT8U	LName[26];		//长文件名的unicode码
	INT8U	Ord;			//该长目录项在本组中的序号
	INT8U	Attr;			//长文件名目录标志
	INT8U	Type;			//为0表示是长文件名的子项
	INT8U	Chksum;			//短文件名的校验和
} LDIR;

typedef struct
{
	INT32U	FstClu;			//该目录或文件存储的簇号
	INT32U	FileSize;		//该目录或文件的大小
} DIR_LIST;

/************************Extern functions****************************/
//向串口发送一串字符
extern void uar_putchar (const INT8U *ch);
//SD卡块读底层函数
extern INT8U SD_Read_Block(INT8U *CMD, INT8U *Buffer, INT32U Bytes);
//从SD卡读一个扇区数据
extern INT8U SD_read_sector(INT32U Number_Sector,INT8U *Buffer);

/************************FAT fs functions****************************/


#endif

⌨️ 快捷键说明

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