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

📄 fat.h

📁 Mp3 Player using ATmega128, VS1003B, Character LCD. Test OK.Good Sound.
💻 H
字号:
/*
-------------------------------------------------------------------------------
* 力格			: FAT32 Interface Code
* 颇老疙		: fat.h
* 父电 荤恩		: kkamcneko@naver.com
* 父电 朝楼		: 2005-11-11
* 荐沥茄 朝楼	: 2005-12-29
* Version		: 0.1
* Target MCU	: AVR ATMega128
* 徘 荤捞令		: 4
* 眠玫 俊叼磐	: EditPlus (http://www.editplus.com)
-------------------------------------------------------------------------------
*/

#ifndef FAT_H
#define FAT_H

#include "../global.h"
#include "filelist.h"

// Bytes per Sector for SD/MMC
#define SECTOR_SIZE			512

// Master Boot Record
#define MBR_ADDR			0

// define ASCII
#define SPACE 				0x20
#define DIR_ENTRY_IS_FREE   0xE5

// define DIR Attribute
#define ATTR_LONG_NAME		0x0F
#define ATTR_READ_ONLY		0x01
#define ATTR_HIDDEN			0x02
#define ATTR_SYSTEM			0x04
#define ATTR_VOLUME_ID		0x08
#define ATTR_DIRECTORY		0x10
#define ATTR_ARCHIVE		0x20

#define ATTR_CWD			0x40

// 滚欺俊 历厘且 叼泛磐府 浚飘府狼 俺荐
#define ENTRY_BUF_SIZE		100


//====================================================================//
// MBR FAT Table
// Offset: 446~461
struct tagPartTable
{								// OFFSET
	U8		Bootable;			// 446	0x1BE
	U8		StartHead;			// 447	0x1EF
	U16		StartCylSec;		// 448	0x1C0
	U8		Type;				// 450	0x1C2
	U8		EndHead;			// 451	0x1C3
	U16		EndCylSec;			// 452	0x1C4
	U32		StartLBA;			// 454	0x1C6
	U32		Size;				// 458	0x1CA
};
//====================================================================//

//====================================================================//
// Partition Boot Record(PBR)
// Offset: 0~35
struct tagBootSector
{								// OFFSET
	U8		BS_jmpBoot[3];		// 0	0x00
	char	BS_OEMName[8];		// 3	0x03
	U16		BPB_BytesPerSec;	// 11	0x0B	// 冀磐寸 官捞飘荐
	U8		BPB_SecPerClus;		// 13	0x0D	// 努矾胶磐寸 冀磐荐
	U16		BPB_RsvdSecCnt;		// 14	0x0E	// 抗距等 冀磐荐 -- 风飘叼泛配府 困摹甫 备且锭 荤侩
	U8		BPB_NumFATs;		// 16	0x10	// FAT狼 肮荐(FAT #1, FAT #2秦辑 焊烹 2俺肺 备己)
	U16		BPB_RootEntCnt;		// 17	0x11
	U16		BPB_TotSec16;		// 19	0x13
	U8		BPB_Media;			// 21	0x15
	U16		BPB_FATSz16;		// 22	0x16
	U16		BPB_SecPerTrk;		// 24	0x18
	U16		BPB_NumHeads;		// 26	0x1A
	U32		BPB_HiddSec;		// 28	0x1C
	U32		BPB_TotSec32;		// 32	0x20
};


// FAT16 / FAT32 备盒篮 MBR FAT Table Type栏肺 搬沥
// ex) FAT32狼 版快 Type Code啊 0x0B唱 0x0C啊 等促.

// Offset: 36~89 (FAT32 Structure)
struct tagBPB32
{								// OFFSET
	U32		BPB_FATSz32;		// 36	0x24	// FAT(FAT #1, FAT #2)啊 瞒瘤窍绰 冀磐荐  -- 风飘叼泛配府 困摹甫 备且锭 荤侩
	U16		BPB_ExtFlags;		// 40	0x28
	U16		BPB_FSVer;			// 42	0x2A
	U32		BPB_RootClus;		// 44	0x2C	// 风飘叼泛配府狼 矫累努矾胶磐(焊烹 2)
	U16		BPB_FSInfo;			// 48	0x30
	U16		BPB_BkBootSec;		// 50	0x32
	U8		BPB_Reserved[12];	// 52	0x34
	U8		BS_DrvNum;			// 64	0x40
	U8		BS_Reserved1;		// 65	0x41
	U8		BS_BootSig;			// 66	0x42
	U32		BS_VolID;			// 67	0x43
	char	BS_VolLab[11];		// 71	0x47
	char	BS_FilSysType[8];	// 82	0x52
};
//====================================================================//

//====================================================================//
// Directory Entry
struct tagDirEntry
{								// OFFSET
	U8		DIR_Name[8];		// 00	0x00
	U8		DIR_Ext[3];			// 00	0x00
	U8		DIR_Attr;			// 11	0x0B
	U8		DIR_NTRes;			// 12	0x0C
	U8		DIR_CrtTimeTenth;	// 13	0x0D
	U16		DIR_CrtTime;		// 14	0x0E
	U16		DIR_CrtDate;		// 16	0x10
	U16		DIR_LastAccDate;	// 18	0x12
	U16		DIR_FstClusHI;		// 20	0x14
	U16		DIR_WrtTime;		// 22	0x16
	U16		DIR_WrtDate;		// 24	0x18
	U16		DIR_FstClusLO;		// 26	0x1A
	U32		DIR_FileSize;		// 28	0x1C
};

// 变颇老 捞抚阑 困茄 浚飘府
// 变颇老 备盒牢瘤 舅扁 困秦辑绰 Attribute甫 曼绊窍搁 等促.
// 变颇老牢 版快 Attribute啊 0x0F啊 等促.
// FAT Long Directory Entry Structure
struct tagLongDirEntry
{								// OFFSET
	U8		LDIR_Ord;			// 00	0x00
	U8		LDIR_Name1[10];		// 01	0x01
	U8		LDIR_Attr;			// 11	0x0B
	U8		LDIR_Type;			// 12	0x0C
	U8		LDIR_Chksum;		// 13	0x0D
	U8		LDIR_Name2[12];		// 14	0x0E
	U16		LDIR_FstClusLO;		// 26	0x1A
	U8		LDIR_Name3[4];		// 28	0x1C
};
//====================================================================//

//====================================================================//
// FAT Buffer
struct tagFATBuffer
{
	U8 buffer[SECTOR_SIZE];
	U32 lastSector;
};

// Directory Entry Buffer (叼泛磐府 浚飘府甫 100俺鳖瘤 历厘)
struct tagDirEntryBuffer	// cluster:entry 蔼栏肺 角力 叼泛配府 浚飘府狼 困摹甫 备窃
{
	U32 cluster[ENTRY_BUF_SIZE];
	U8 entry[ENTRY_BUF_SIZE];
	U8 index;
};
//====================================================================//

int fatInit(void);		// FAT包访 檬扁拳

U32 fatGetDirEntry(U32 cluster);	// 泅犁叼泛磐府郴俊 阿 颇老狼 浚飘府 困摹蔼阑 备窃

struct tagFileInfo fatGetFileInfo(U32 cluster, U8 entry);

U32 fatGetNextCluster(U32 cluster);
U32 fatGetPrevCluster(U32 startCluster, U32 curCluster);
U32 fatClusToSec(U32 cluster);	// Convert cluster to sector

void fatBufferInit(U32 cluster);		// Initialize Buffer
void fatDirEntryBufferInit(void);
int fatDirEntryBufferInsert(U32 cluster, U8 entry);
U8 fatDirEntryBufferIsFull(void);

void fatFormalizeFileName(U8 *fileName);

// 蜡聪内靛 茄臂阑 炼钦屈栏肺 函券
U16 uniToKssm(U16 wchar);
#endif

⌨️ 快捷键说明

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