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

📄 fat.h

📁 用串口来显示和操作的基于ucos的以sd卡为存储介质的mp3源码
💻 H
字号:
#ifndef _FAT_H
#define _FAT_H

#define FAT12			0x01
#define FAT16			0x01
#define FAT32			0x02
#define EMPTY_DRIVE		0x00

#define ReadSec			0x01
#define ReadBlock		0x02
#define WriteSec		0x03

#define MP3CMD_Play				0x12
#define MP3CMD_Pause			0x13
#define MP3CMD_Stop				0x14
#define MP3CMD_Next				0x15

/***********************错误代码*********************************/
#define RETURN_OK                   0x00    /* 操作成功         */
#define NOT_FIND_DISK               0x01    /* 逻辑盘不存在     */
#define DISK_FULL                   0x02    /* 逻辑盘满         */
#define SECTOR_NOT_IN_CACHE         0x03    /* 扇区没有被cache  */
#define NOT_EMPTY_CACHE             0x04    /* 没有空闲cache    */
#define SECTOR_READ_ERR             0x05    /* 读扇区错误       */
#define CLUSTER_NOT_IN_DISK         0x06    /* 逻辑盘中没有此簇  */
#define NOT_FIND_FDT                0x07    /* 没有发现文件(目录)*/
#define NOT_FAT_DISK                0x08    /* 非FAT文件系统    */
#define FDT_OVER                    0x09    /* FDT索引超出范围  */
#define FDT_EXISTS                  0x0a    /* 文件(目录)已经存在*/
#define ROOT_FDT_FULL               0x0b    /* 根目录满         */
#define DIR_EMPTY                   0x0C    /* 目录空           */
#define DIR_NOT_EMPTY               0x0d    /* 目录不空         */
#define PATH_NOT_FIND               0x0e    /* 路径未找到       */
#define FAT_ERR                     0x0f    /* FAT表错误       */
#define FILE_NAME_ERR               0x10    /* 文件(目录)名错误 */
#define FILE_EOF                    0x11    /* 文件结束        */
#define FILE_LOCK                   0x12    /* 文件被锁定       */
#define NOT_FIND_FILE               0x13    /* 没有发现指定文件 */
#define NOT_FIND_DIR                0x14    /* 没有发现指定目录 */
#define NOT_RUN                     0xfd    /* 命令未执行       */
#define BAD_COMMAND                 0xfe    /* 错误命令       */
#define PARAMETER_ERR               0xff    /* 非法参数        */

/*****************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	//长目录子项

/*******************BPB数据结构***********************/
typedef struct 
{
	INT8U	DriveID;		//逻辑驱动器ID号
	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;		//根目录所在第一个簇的簇号
	/************************************************/
	INT32U  RelaStaSect;		//该卷逻辑0扇区实际物理扇区
	INT16U	RootDirSectors;		//根目录所占扇区数
	INT32U  FirstDataSector;	//数据区的第一个扇区号
	
	/**************磁盘底层驱动函数******************/
	INT8U	(* DiskDrive)(INT8U Cammand, void *Parameter);
} Disk_Info; 

/*****************磁盘驱动函数参数结构*******************/
typedef struct
{
    INT8U       Drive;          // 驱动器号
    INT16U		Len;			//长度
    INT32U      SectorIndex;    // 操作的扇区
    INT8U       *Buf;           // 数据存储位置
} Disk_RW_Parameter;

/*****************文件数据位置指针********************/
typedef struct
{
	INT32U  Len;		//长度
	INT32U 	OfClu;		//簇号
	INT8U 	OfSec;		//该簇中扇区偏移量
	INT16U	OfByte;		//该扇区中字节偏移量
} FileDataPoint;


/*****************短目录项数据结构********************/
typedef struct 
{
	INT8U			SName[11];		//短文件名
	INT8U			Attr;			//文件属性
	INT32U			FstClu;			//该目录或文件存储的第一个簇号
	INT32U			FileSize;		//文件大小
	FileDataPoint	FDP;		
} ShortFileDirTab;

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


typedef struct
{
	INT8U	Read_Flag;
	INT8U   OffsetCluSce;
	INT16U  NextCluOfFAT16;	//文件簇链中下一个簇号
	INT32U  FirstSectorOfCluster;   //该簇号第一个扇区号
	INT32U  FileLen;	    //已读取的文件长度
} FDI;

/************************Extern functions****************************/
extern void 	UartPutchar(const INT8U ch);
extern void 	UartPrint(const INT8U *ch); 

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


#endif

⌨️ 快捷键说明

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