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

📄 fat.h

📁 ARM7 lpc2132+vs1003+sdcard 制作的 MP3 此程序在ADS1.2环境下编译
💻 H
字号:
/****************************************Copyright (c)**************************************************
**                                 上海新时达电气有限公司
**                                     研  发  中  心
**                                        研发一部 
**
**                                 http://www.stepelevatar.com
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: fat.h
**创   建   人: 吕海安
**最后修改日期: 2007年05月31日
**描        述: fat 文件系统的头文件
**              
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 吕海安
** 版  本: v1.0
** 日 期: 2007年05月31日
** 描 述: 原始版本
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 
** 日 期: 
** 描 述: 
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#ifndef FAT_H
#define FAT_H

#include "comm.h"

#pragma pack(1)

#define uint8 unsigned char
#define uint8 unsigned char
#define uint16 unsigned short
#define uint32 unsigned long

//簇定义
#define MSDOSFSROOT     0               
#define CLUST_FREE      0               
#define MSDOSFSFREE     CLUST_FREE
#define CLUST_RSRVD     0xfffffff6      // 系统保留簇
#define CLUST_BAD       0xfffffff7      // 坏簇
#define CLUST_EOFS      0xfffffff8      // 第一个结束簇
#define CLUST_EOFE      0xffffffff      // 最后一个结束簇

#define FAT12_MASK      0x00000fff      // FAT12掩码
#define FAT16_MASK      0x0000ffff      // FAT16掩码
#define FAT32_MASK      0x0fffffff      // FAT32掩码

#define FAT12           0
#define FAT16           1
#define FAT32           2

// 分区类型
#define PART_TYPE_UNKNOWN		0x00
#define PART_TYPE_FAT12			0x01
#define PART_TYPE_XENIX			0x02
#define PART_TYPE_DOSFAT16	    0x04
#define PART_TYPE_EXTDOS		0x05
#define PART_TYPE_FAT16			0x06
#define PART_TYPE_NTFS			0x07
#define PART_TYPE_FAT32			0x0B
#define PART_TYPE_FAT32LBA	    0x0C
#define PART_TYPE_FAT16LBA	    0x0E
#define PART_TYPE_EXTDOSLBA	    0x0F
#define PART_TYPE_ONTRACK		0x33
#define PART_TYPE_NOVELL		0x40
#define PART_TYPE_PCIX			0x4B
#define PART_TYPE_PHOENIXSAVE	0xA0
#define PART_TYPE_CPM		    0xDB
#define PART_TYPE_DBFS			0xE0
#define PART_TYPE_BBT			0xFF



typedef struct //  16 字节
{			
	uint8	prIsActive;					// 0x80代表该分区为缺省分区
	uint8	prStartHead;				// 该分区入口的磁头地址
	uint16	prStartCylSect;				// 该分区入口的扇区地址和柱面地址
	uint8	prPartType;					// 该分区类型
	uint8	prEndHead;					// 该分区结束的扇区地址
	uint16	prEndCylSect;				// 该分区结束的柱面地址
	uint32	prStartLBA;					// 该分区内第一个扇区地址
	uint32	prSize;						// 该分区所包含的扇区总数
}PARTRECORD;

        
typedef struct
{
	uint8	psPartCode[512-64-2];	    // 启动代码 (446 bytes)
	uint8	psPart[64];					// 四个分区表(64 bytes)
	uint8	psBootSectSig0;				// 两个签名(2 bytes)
	uint8	psBootSectSig1;
#define BOOTSIG0        0x55
#define BOOTSIG1        0xaa
}PARTSECTOR;


// 系统引导扇区(DOS BOOT RECORD)DBR结构
typedef struct
{
	uint8	bsJump[3];					// 跳转指令
	uint8	bsOEMName[8];				// 厂商标志和OS版本号
	uint8	bsBPB[53];					// BIOS 参数块
	uint8	bsExt[26];					// 扩展BPB
	uint8	bsBootCode[418];			// 引导扇区代码
	uint8	bsBootSectSig2;				
	uint8	bsBootSectSig3;
	uint8	bsBootSectSig0;				// 引导扇区签名0x55
	uint8	bsBootSectSig1;				// 引导扇区签名0xAA
#define BOOTSIG0        0x55
#define BOOTSIG1        0xaa
#define BOOTSIG2        0
#define BOOTSIG3        0
}BOOTSECTOR710;


// BIOS 参数块
typedef struct 
{
		uint16	bpbBytesPerSec;	// 每扇区字节数
		uint8	bpbSecPerClust;	// 每簇扇区数
		uint16	bpbResSectors;	// 保留区域中的保留扇区数
		uint8	bpbFATs;		// FAT表的份数
		uint16	bpbRootDirEnts;	// 根目录项数
		uint16	bpbSectors;		// 此域为存储卷上的扇区总数
		uint8	bpbMedia;		// 固定存储介质描述
		uint16	bpbFATsecs;		// FAT表所占的扇区数
		uint16	bpbSecPerTrack;	// 每道扇区数
		uint16	bpbHeads;		// 磁头数
		uint32	bpbHiddenSecs;	// 隐藏扇区数
		uint32	bpbHugeSectors;	// 总扇区数
		uint32   bpbBigFATsecs;  // 每个FAT区所占扇区数
		uint16    bpbExtFlags;	// 扩展标志
#define FATNUM    0xf			
#define FATMIRROR 0x80			
		uint16      bpbFSVers;	// 文件系统版本
#define FSVERS    0				
		uint32     bpbRootClust;	// 根目录簇号
		uint16      bpbFSInfo;	// 文件系统信息扇区号
		uint16      bpbBackup;	// 备份引导扇区
} BPB710;

// 目录或文件入口地址结构
typedef struct{
		uint8		deName[8];          // 文件名
#define SLOT_EMPTY      0x00            // 目录项为空
#define SLOT_E5         0x05            
#define SLOT_DELETED    0xe5            // 文件已被删除
		uint8		deExtension[3];     // 扩展名
		uint8		deAttributes;       // 文件属性
#define ATTR_NORMAL     0x00            // 读写
#define ATTR_READONLY   0x01            // 只读
#define ATTR_HIDDEN     0x02            // 隐藏
#define ATTR_SYSTEM     0x04            // 系统文件
#define ATTR_VOLUME     0x08            // 卷标文件
#define ATTR_LONG_FILENAME	0x0f		// 长文件名文件			    
#define ATTR_DIRECTORY  0x10            // 子目录文件
#define ATTR_ARCHIVE    0x20            // 归档文件
		uint8        deLowerCase;        // 系统保留
#define LCASE_BASE      0x08            
#define LCASE_EXT       0x10            
		uint8        deCHundredth;       // 文件创建时间的10MS
		uint8        deCTime[2];         // 文件创建时间
		uint8        deCDate[2];         // 文件创建日期
		uint8        deADate[2];         // 文件最近访问日期
		uint16        deHighClust; 	    // 文件起始簇号的高16位
		uint8        deMTime[2];         // 文件最近修改时间
		uint8        deMDate[2];         // 文件最近修改日期
		uint16        deStartCluster;     // 文件起始簇号的低16位
		uint32       deFileSize;  	    // 文件长度
} DIRENTRY;

// 一个扇区中的目录项数
#define DIRENTRIES_PER_SECTOR	0x10

// 长文件名入口地址结构
typedef struct {
		uint8		weCnt;                //序号
#define WIN_LAST        0x40            
#define WIN_CNT         0x3f
		uint8		wePart1[10];          //长文件名UNICODE码(第一部分)
		uint8		weAttributes;         //长文件名目录项标志
#define ATTR_WIN95      0x0f
		uint8		weReserved1;          //系统保留              
		uint8		weChksum;             //校验值
		uint8		wePart2[12];          //长文件名UNICODE码(第二部分)
		uint16       	weReserved2;          //文件开始簇号
		uint8		wePart3[4];           //长文件名UNICODE码(第三部分)
} WINENTRY;

#define WIN_uint8S	13      //长文件名入口地址结构可包含13个字符 

//在FAT32中,文件名最长可到255个字符
#define WIN_MAXLEN      255

// 目录或文件入口地址结构中的时间结构

#define DT_2SECONDS_MASK        0x1F    // 秒
#define DT_2SECONDS_SHIFT       0
#define DT_MINUTES_MASK         0x7E0   // 分
#define DT_MINUTES_SHIFT        5
#define DT_HOURS_MASK           0xF800  // 时
#define DT_HOURS_SHIFT          11

// 目录或文件入口地址结构中的日期结构

#define DD_DAY_MASK             0x1F    // 日
#define DD_DAY_SHIFT            0
#define DD_MONTH_MASK           0x1E0   // 月
#define DD_MONTH_SHIFT          5
#define DD_YEAR_MASK            0xFE00  // 年 - 1980
#define DD_YEAR_SHIFT           9

// 可调函数   
extern void ReadBlock(INT32U LBA);
extern INT32U fatClustToSect(INT32U clust);
extern INT32U  fatGetRootSector(void);
extern INT32U fatGetRootClust(void);
extern INT8U fatInit( void);
extern INT16U fatClusterSize(void);
extern INT32U fatGetFilesize(void);
extern char* fatGetFilename(void);
extern char* fatGetDirname(void);
extern void fatLoadCluster(INT32U cluster, INT8U *buffer);
extern INT32U fatNextCluster(INT32U cluster);
extern void GetSysFileClust(INT32U *hzk,INT32U *unit);
extern void FindLrcFile(INT32U dircluster,INT8U *strName);
extern INT8U IsMusicFile(INT8U *strName);
extern void InitSetPath(FIND_FILE_INFO *fp,INT32U dircluster);
extern void ReadBlockToBuff(INT32U LBA,INT8U *pbuff); 
extern INT8U ReadNextDirEntry(FIND_FILE_INFO *fp); 
extern void UniToGB(INT8U *pbuf);
extern INT8U IsUnitogbFile(INT8U *pbuf);
extern INT8U IsHzk12File(INT8U *pbuf);
extern INT8U IsCurDir(INT8U *strName);
extern INT8U IsFatherDir(INT8U *strName);
extern INT16U FindDirIndex(INT32U fatherdir,INT32U dircluster);
extern INT16U SerarchFile(INT32U dircluster,INT16U index);
extern INT32U GetSysFileSector(void *eep,INT16U clustr);


#endif

/*****************************************************************************************
*                                   END OF FILE
*****************************************************************************************/

⌨️ 快捷键说明

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